diff options
Diffstat (limited to 'perl-install/raid.pm')
-rw-r--r-- | perl-install/raid.pm | 77 |
1 files changed, 13 insertions, 64 deletions
diff --git a/perl-install/raid.pm b/perl-install/raid.pm index 585f2565e..7cc2eb7d6 100644 --- a/perl-install/raid.pm +++ b/perl-install/raid.pm @@ -9,7 +9,6 @@ use strict; use common qw(:common :functional); use run_program; use devices; -use commands; use fs; sub nb($) { @@ -27,15 +26,12 @@ sub new($$) { my $nb = @$raid; $raid->[$nb] = { 'chunk-size' => "64k", type => 0x83, disks => [ $part ], device => "md$nb", notFormatted => 1 }; $part->{raid} = $nb; - delete $part->{mntpoint}; - $nb; } sub add($$$) { - my ($raid, $part, $nb) = @_; $nb = nb($nb); + my ($raid, $part, $nb) = @_; $raid->[$nb]{isMounted} and die _("Can't add a partition to _formatted_ RAID md%d", $nb); $part->{raid} = $nb; - delete $part->{mntpoint}; push @{$raid->[$nb]{disks}}, $part; } @@ -44,23 +40,12 @@ sub delete($$) { $nb = nb($nb); delete $_->{raid} foreach @{$raid->[$nb]{disks}}; - undef $raid->[$nb]; -} - -sub changeNb($$$) { - my ($raid, $oldnb, $newnb) = @_; - if ($oldnb != $newnb) { - ($raid->[$newnb], $raid->[$oldnb]) = ($raid->[$oldnb], undef); - $raid->[$newnb]{device} = "md$newnb"; - $_->{raid} = $newnb foreach @{$raid->[$newnb]{disks}}; - } - $newnb; + $raid->[$nb] = undef; } sub removeDisk($$) { my ($raid, $part) = @_; my $nb = nb($part->{raid}); - run_program::run("raidstop", devices::make($part->{device})); delete $part->{raid}; @{$raid->[$nb]{disks}} = grep { $_ != $part } @{$raid->[$nb]{disks}}; update($raid->[$nb]); @@ -78,34 +63,23 @@ sub updateSize($) { }; } -sub module($) { - my ($part) = @_; - my $mod = $part->{level}; - - $mod = 5 if $mod eq "4"; - $mod = "raid$mod" if $mod =~ /^\d+$/; - $mod; -} - sub updateIsFormatted($) { my ($part) = @_; $part->{isFormatted} = and_ map { $_->{isFormatted} } @{$part->{disks}}; $part->{notFormatted} = and_ map { $_->{notFormatted} } @{$part->{disks}}; } -sub update { - foreach (@_) { - updateSize($_); - updateIsFormatted($_); - } +sub update($) { + &updateSize; + &updateIsFormatted; } sub write($) { my ($raid, $file) = @_; local *F; local $\ = "\n"; - open F, ">$file" or die _("Can't write file $file"); foreach (grep {$_} @$raid) { + open F, ">$file" or die _("Can't write file $file"); print F <<"EOF"; raiddev /dev/$_->{device} raid-level $_->{level} @@ -113,51 +87,26 @@ chunk-size $_->{'chunk-size'} persistent-superblock 1 EOF print F "nr-raid-disks ", int @{$_->{disks}}; - map_index { - print F " device ", devices::make($_->{device}); + map_index { + print F " device /dev/$_->{device}"; print F " raid-disk $::i"; } @{$_->{disks}}; } } -sub make { +sub make($$) { my ($raid, $part) = @_; - is($_) and make($raid, $_) foreach @{$part->{disks}}; my $dev = devices::make($part->{device}); - eval { commands::modprobe(module($part)) }; run_program::run("raidstop", $dev); &write($raid, "/etc/raidtab"); - run_program::run("mkraid", "--really-force", $dev) or die - $::isStandalone ? _("mkraid failed (maybe raidtools are missing?)") : _("mkraid failed"); + run_program::run("mkraid", "--really-force", $dev); + run_program::run("raidstart", $dev); } sub format_part($$) { my ($raid, $part) = @_; - $part->{isFormatted} and return; - - make($raid->{raid}, $part); - fs::real_format_part($part); - $_->{isFormatted} = 1 foreach @{$part->{disks}}; + make($raid->{raid}, $part) if is($part); + fs::format_part($part); } -sub verify($) { - my ($raid) = @_; - $raid && $raid->{raid} or return; - foreach (grep {$_} @{$raid->{raid}}) { - @{$_->{disks}} >= ($_->{level} =~ /4|5/ ? 3 : 2) or die _("Not enough partitions for RAID level %d\n", $_->{level}); - } -} - -sub prepare_prefixed($$) { - my ($raid, $prefix) = @_; - $raid && $raid->{raid} or return; - - eval { commands::cp("-f", "/etc/raidtab", "$prefix/etc/raidtab") }; - foreach (@{$raid->{raid}}) { - devices::make("$prefix/dev/$_->{device}") foreach @{$_->{disks}}; - } -} - -sub stopAll() { run_program::run("raidstop", devices::make("md$_")) foreach 0..7 } - 1; |