equal
deleted
inserted
replaced
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: |