lib/SI/ptable.pm
changeset 36 bdc967bf50d2
parent 28 7d7ca3f05f25
child 37 a61b92c60367
equal deleted inserted replaced
35:1c7e99693439 36:bdc967bf50d2
     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 $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     }
       
    84 }
       
    85 
       
    86 sub mkfs(\%) {
       
    87     my $devs = shift;
       
    88     foreach my $volume ( keys %{$devs->{volume}} ) {
       
    89 	my $v = $devs->{volume}{$volume};
       
    90 	next if $v->{origin} ne "ptable";
       
    91 	warn $volume, "\n";
       
    92 	next if not defined $v->{type};
       
    93 	given ($v->{type}) {
       
    94 	    when(/ext\d/) {
       
    95 		my $label = defined $v->{label} ? $v->{label} : "";
       
    96 		my $uuid = defined $v->{uuid} ? $v->{uuid} : "";
       
    97 		run("mkfs -t $v->{type} -L '$label' -U '$uuid' $volume");
       
    98 	    };
       
    99 	    when("swap") {
       
   100 		my $label = defined $v->{label} ? $v->{label} : "";
       
   101 		my $uuid = defined $v->{uuid} ? $v->{uuid} : "";
       
   102 		run("mkswap -L '$label' -U '$uuid' $volume");
       
   103 	    };
       
   104 	};
       
   105 
       
   106     }
       
   107 
       
   108 }
    68 1;
   109 1;
    69 
   110 
    70 # vim:sts=4 sw=4 aw ai si:
   111 # vim:sts=4 sw=4 aw ai si: