lib/SI/ptable.pm
branchstable
changeset 38 38af4add892a
parent 37 a61b92c60367
equal deleted inserted replaced
34:28090de7d005 38:38af4add892a
     5 use strict;
     5 use strict;
     6 use warnings;
     6 use warnings;
     7 use File::Find;
     7 use File::Find;
     8 use File::Basename;
     8 use File::Basename;
     9 use IO::File;
     9 use IO::File;
       
    10 use feature "switch";
    10 
    11 
    11 use SI::tools;
    12 use SI::tools;
    12 $ENV{LC_ALL} = "C";
    13 $ENV{LC_ALL} = "C";
    13 
    14 
    14 sub volumes($\%) {
    15 sub volumes($\%) {
    63         }
    64         }
    64     }
    65     }
    65 
    66 
    66     return;
    67     return;
    67 }
    68 }
       
    69 
       
    70 sub restore(\%) {
       
    71     my $devs = shift;
       
    72 
       
    73     foreach my $disk (keys %{$devs->{disk}}) {
       
    74 	verbose("restoring partition table of $disk\n");
       
    75 	die "I won't use the disk ($disk) I'm running on!" 
       
    76 	    if (stat $0)[0] ~~ [ map { (stat)[6] } map { "/dev/" . basename dirname $_ } glob ("/sys/block/" . basename($disk) . "/*/partition")];
       
    77 
       
    78 	    my $sfdisk = new IO::File "|sfdisk --force $disk >/dev/null"
       
    79 		or die "Can't open |sfdisk $disk: $!\n";
       
    80 	    print {$sfdisk} @{$devs->{disk}{$disk}{pt}};
       
    81 	    $sfdisk->close or die $? >> 8;
       
    82 	    run("partprobe $disk");
       
    83 	    run("udevadm settle");
       
    84     }
       
    85 }
       
    86 
       
    87 sub mkfs(\%) {
       
    88     my $devs = shift;
       
    89     foreach my $volume ( keys %{$devs->{volume}} ) {
       
    90 	my $v = $devs->{volume}{$volume};
       
    91 	next if $v->{origin} ne "ptable";
       
    92 	warn $volume, "\n";
       
    93 	next if not defined $v->{type};
       
    94 	given ($v->{type}) {
       
    95 	    when(/ext\d/) {
       
    96 		my $label = defined $v->{label} ? $v->{label} : "";
       
    97 		my $uuid = defined $v->{uuid} ? $v->{uuid} : "";
       
    98 		run("mkfs -t $v->{type} -L '$label' -U '$uuid' $volume");
       
    99 	    };
       
   100 	    when("swap") {
       
   101 		my $label = defined $v->{label} ? $v->{label} : "";
       
   102 		my $uuid = defined $v->{uuid} ? $v->{uuid} : "";
       
   103 		run("mkswap -L '$label' -U '$uuid' $volume");
       
   104 	    };
       
   105 	};
       
   106 
       
   107     }
       
   108 
       
   109 }
    68 1;
   110 1;
    69 
   111 
    70 # vim:sts=4 sw=4 aw ai si:
   112 # vim:sts=4 sw=4 aw ai si: