package raid; # $Id$ use diagnostics; use strict; #-###################################################################################### #- misc imports #-###################################################################################### use common; use partition_table qw(:types); use run_program; use devices; use commands; use modules; use fs; sub nb($) { my ($nb) = @_; first((ref $nb ? $nb->{device} : $nb) =~ /(\d+)/); } sub new { my ($raid, @parts) = @_; my $nb = @$raid; $raid->[$nb] = { 'chunk-size' => "64k", type => 0x83, disks => [ @parts ], device => "md$nb", notFormatted => 1 }; foreach my $part (@parts) { $part->{raid} = $nb; delete $part->{mntpoint}; } $nb; } sub add($$$) { my ($raid, $part, $nb) = @_; $nb = nb($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; } sub delete($$) { my ($raid, $nb) = @_; $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; } 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]); } sub updateSize($) { my ($part) = @_; local $_ = $part->{level}; my @l = map { $_->{size} } @{$part->{disks}}; $part->{size} = do { if (/0|linear/) { sum @l } elsif (/1/ ) { min @l } elsif (/4|5/) { min(@l) * $#l } }; } 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 write($) { my ($raid, $file) = @_; local *F; local $\ = "\n"; open F, ">$file" or die _("Can't write file $file"); foreach (grep {$_} @$raid) { print F <<"EOF"; raiddev /dev/$_->{device} raid-level $_->{level} chunk-size $_->{'chunk-size'} persistent-superblock 1 EOF print F "nr-raid-disks ", int @{$_->{disks}}; map_index { print F " device ", devices::make($_->{device}); print F " raid-disk $::i"; } @{$_->{disks}}; } } sub make { my ($raid, $part) = @_; isMDRAID($_) and make($raid, $_) foreach @{$part->{disks}}; my $dev = devices::make($part->{device}); eval { modules::load(module($part)) }; &write($raid, "/etc/raidtab"); run_program::run("raidstop", $dev); run_program::run("mkraid", "--really-force", $dev) or die $::isStandalone ? _("mkraid failed (maybe raidtools are missing?)") : _("mkraid failed"); } sub format_part($$) { my ($raid, $part) = @_; $part->{isFormatted} and return; make($raid->{raid}, $part); fs::real_format_part($part); $_->{isFormatted} = 1 foreach @{$part->{disks}}; } 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; ='user/martinw/mga6'>user/martinw/mga6</option> <option value='user/pterjan/arm64'>user/pterjan/arm64</option> </select> <input type='submit' value='switch'/></form></td></tr> <tr><td class='sub'>Mageia Installer and base platform for many utilities</td><td class='sub right'>Thierry Vignaud [tv]</td></tr></table> <table class='tabs'><tr><td> <a href='/software/drakx/?h=15.73.1'>summary</a><a href='/software/drakx/refs/?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>refs</a><a href='/software/drakx/log/perl-install/ChangeLog?h=15.73.1'>log</a><a href='/software/drakx/tree/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>tree</a><a class='active' href='/software/drakx/commit/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>commit</a><a href='/software/drakx/diff/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>diff</a><a href='/software/drakx/stats/perl-install/ChangeLog?h=15.73.1'>stats</a></td><td class='form'><form class='right' method='get' action='/software/drakx/log/perl-install/ChangeLog'> <input type='hidden' name='h' value='15.73.1'/><input type='hidden' name='id' value='635e1d3e945c7c29b64d21a7004827d84d497d1f'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/software/drakx/commit/?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>root</a>/<a href='/software/drakx/commit/perl-install?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>perl-install</a>/<a href='/software/drakx/commit/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>ChangeLog</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='h' value='15.73.1'/><input type='hidden' name='id' value='635e1d3e945c7c29b64d21a7004827d84d497d1f'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'> <tr><th>author</th><td>Pascal Rigaux <pixel@mandriva.com></td><td class='right'>2003-09-22 16:02:51 +0000</td></tr> <tr><th>committer</th><td>Pascal Rigaux <pixel@mandriva.com></td><td class='right'>2003-09-22 16:02:51 +0000</td></tr> <tr><th>commit</th><td colspan='2' class='sha1'><a href='/software/drakx/commit/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>635e1d3e945c7c29b64d21a7004827d84d497d1f</a> (<a href='/software/drakx/patch/perl-install/ChangeLog?id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>patch</a>)</td></tr> <tr><th>tree</th><td colspan='2' class='sha1'><a href='/software/drakx/tree/?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>6ffdaa1f85142137284cf7be9b8ab5d7165524f8</a> /<a href='/software/drakx/tree/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>perl-install/ChangeLog</a></td></tr> <tr><th>parent</th><td colspan='2' class='sha1'><a href='/software/drakx/commit/perl-install/ChangeLog?h=15.73.1&id=4da6f983b9f35896f046f0c1d700e8f2ebb9e866'>4da6f983b9f35896f046f0c1d700e8f2ebb9e866</a> (<a href='/software/drakx/diff/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f&id2=4da6f983b9f35896f046f0c1d700e8f2ebb9e866'>diff</a>)</td></tr><tr><th>download</th><td colspan='2' class='sha1'><a href='/software/drakx/snapshot/drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.tar'>drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.tar</a><br/><a href='/software/drakx/snapshot/drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.tar.gz'>drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.tar.gz</a><br/><a href='/software/drakx/snapshot/drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.tar.bz2'>drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.tar.bz2</a><br/><a href='/software/drakx/snapshot/drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.tar.xz'>drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.tar.xz</a><br/><a href='/software/drakx/snapshot/drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.zip'>drakx-635e1d3e945c7c29b64d21a7004827d84d497d1f.zip</a><br/></td></tr></table> <div class='commit-subject'>*** empty log message ***</div><div class='commit-msg'></div><div class='diffstat-header'><a href='/software/drakx/diff/?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>Diffstat</a> (limited to 'perl-install/ChangeLog')</div><table summary='diffstat' class='diffstat'><tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/software/drakx/diff/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>perl-install/ChangeLog</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='21%'><tr><td class='add' style='width: 95.2%;'/><td class='rem' style='width: 4.8%;'/><td class='none' style='width: 0.0%;'/></tr></table></td></tr> </table><div class='diffstat-summary'>1 files changed, 20 insertions, 1 deletions</div><table summary='diff' class='diff'><tr><td><div class='head'>diff --git a/perl-install/ChangeLog b/perl-install/ChangeLog<br/>index e1510d498..9f504b6ea 100644<br/>--- a/<a href='/software/drakx/tree/perl-install/ChangeLog?h=15.73.1&id=4da6f983b9f35896f046f0c1d700e8f2ebb9e866'>perl-install/ChangeLog</a><br/>+++ b/<a href='/software/drakx/tree/perl-install/ChangeLog?h=15.73.1&id=635e1d3e945c7c29b64d21a7004827d84d497d1f'>perl-install/ChangeLog</a></div><div class='hunk'>@@ -1,5 +1,24 @@</div><div class='ctx'> 2003/09/22 Fran�ois Pons <fpons at mandrakesoft.com></div><div class='ctx'> </div><div class='add'>+ * pkgs.pm: simplified code.</div><div class='add'>+ use kernel-i686 or kernel-enterprise as other kernel.</div><div class='add'>+</div><div class='add'>+ * network/netconnect.pm: make sure module are loaded only during</div><div class='add'>+ installation.</div><div class='add'>+</div><div class='add'>+ * install2.pm: keep use_existing_root for recovery (behaviour changed</div><div class='add'>+ later)</div><div class='add'>+</div><div class='add'>+ * install_steps.pm: avoid mounting partitions in recovery mode.</div><div class='add'>+</div><div class='add'>+2003/09/22 Pixel <pixel at mandrakesoft.com></div><div class='add'>+</div><div class='add'>+ * fs.pm: fix error message</div><div class='add'>+</div><div class='add'>+ * detect_devices.pm: dmi doesn't detect ht, but acpi does, so use it</div><div class='add'>+</div><div class='add'>+2003/09/22 Fran�ois Pons <fpons at mandrakesoft.com></div><div class='add'>+</div><div class='ctx'> * install_steps_gtk.pm: try to follow what is wrong when requiring</div><div class='ctx'> multiple cds.</div><div class='ctx'> </div><div class='hunk'>@@ -22342,7 +22361,7 @@</div><div class='ctx'> </div><div class='ctx'> * Makefile.config: remove dir security</div><div class='ctx'> </div><div class='del'>- * proxy.pm: add $Id: ChangeLog,v 1.844 2003/09/22 08:15:36 prigaux Exp $</div><div class='add'>+ * proxy.pm: add $Id: ChangeLog,v 1.845 2003/09/22 15:59:35 prigaux Exp $</div><div class='ctx'> </div><div class='ctx'> * interactive/gtk.pm: use my_gtk {isWizard} and {isEmbedded} which are</div><div class='ctx'> more accurate than</div></td></tr></table></div> <!-- class=content --> <div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.1</a> (<a href='https://git-scm.com/'>git 2.21.0</a>) at 2025-03-02 11:35:56 +0000</div> </div> <!-- id=cgit --> </body> </html>