[Fai-commit] r5731 - people/michael/experimental/patches
Michael Tautschnig
mt at alioth.debian.org
Fri Mar 12 14:24:14 UTC 2010
Author: mt
Date: 2010-03-12 14:24:12 +0000 (Fri, 12 Mar 2010)
New Revision: 5731
Modified:
people/michael/experimental/patches/series
people/michael/experimental/patches/setup-storage_ext4-support
people/michael/experimental/patches/setup-storage_lvm-preserve2
Log:
proper handling of LVM/RAID and existing volumes
Modified: people/michael/experimental/patches/series
===================================================================
--- people/michael/experimental/patches/series 2010-03-12 13:06:20 UTC (rev 5730)
+++ people/michael/experimental/patches/series 2010-03-12 14:24:12 UTC (rev 5731)
@@ -4,10 +4,10 @@
bugfix-313397
bugfix-479537
setup-storage_no-cylinder-boundaries
-setup-storage_lvm-preserve2
setup-storage_GIB-support
setup-storage_mdadm-output
setup-storage_swap-fstab-bugfix
setup-storage_ext4-support
setup-storage_used-devs-only
setup-storage_preserve-lazy
+setup-storage_lvm-preserve2
Modified: people/michael/experimental/patches/setup-storage_ext4-support
===================================================================
--- people/michael/experimental/patches/setup-storage_ext4-support 2010-03-12 13:06:20 UTC (rev 5730)
+++ people/michael/experimental/patches/setup-storage_ext4-support 2010-03-12 14:24:12 UTC (rev 5731)
@@ -6,7 +6,7 @@
===================================================================
--- trunk.orig/lib/setup-storage/Commands.pm
+++ trunk/lib/setup-storage/Commands.pm
-@@ -891,6 +891,7 @@
+@@ -890,6 +890,7 @@
$fs = "linux-swap" if ($fs eq "swap");
$fs = "fat32" if ($fs eq "vfat");
$fs = "fat16" if ($fs eq "msdos");
Modified: people/michael/experimental/patches/setup-storage_lvm-preserve2
===================================================================
--- people/michael/experimental/patches/setup-storage_lvm-preserve2 2010-03-12 13:06:20 UTC (rev 5730)
+++ people/michael/experimental/patches/setup-storage_lvm-preserve2 2010-03-12 14:24:12 UTC (rev 5731)
@@ -1,3 +1,7 @@
+2010-03-12 Michael Tautschnig <mt at debian.org>
+
+ * setup-storage/{Commands.pm,Volumes.pm}: Completed support for preserve in
+ LVM/RAID contexts; extended checking for volume groups that remain alive.
Index: trunk/lib/setup-storage/Commands.pm
===================================================================
--- trunk.orig/lib/setup-storage/Commands.pm
@@ -2,18 +6,116 @@
+++ trunk/lib/setup-storage/Commands.pm
-@@ -355,6 +355,7 @@
+@@ -244,12 +244,14 @@
+
+ # keep a reference to the current volume
+ my $vol = (\%FAI::configs)->{$config}->{volumes}->{$id};
++
++ # if it is a volume that has to be preserved, there is not much to be
++ # done; its existance has been checked in propagate_and_check_preserve
++ next if ($vol->{preserve});
++
+ # the desired RAID level
+ my $level = $vol->{mode};
+
+- warn "RAID implementation is incomplete - preserve is not supported\n" if
+- ($vol->{preserve});
+-
+ # prepend "raid", if the mode is numeric-only
+ $level = "raid$level" if ($level =~ /^\d+$/);
+
+@@ -347,13 +349,22 @@
+ $vg_exists = 1;
+ foreach my $dev (@{ $FAI::current_lvm_config{$vg}{"physical_volumes"} }) {
+ my ($i_p_d, $disk, $part_no) = &FAI::phys_dev($dev);
+- # if this is not a physical disk, just assume that the volume group will
+- # not exist anymore
+ if ($i_p_d) {
+ defined ($FAI::configs{"PHY_$disk"}) or next;
+ defined ($FAI::configs{"PHY_$disk"}{partitions}{$part_no}) and
($FAI::configs{"PHY_$disk"}{partitions}{$part_no}{size}{preserve}) and
next;
++ } elsif ($dev =~ m{^/dev/md[\/]?(\d+)$}) {
++ my $vol = $1;
++ defined ($FAI::configs{RAID}{volumes}{$vol}) or next;
++ next if (1 == $FAI::configs{RAID}{volumes}{$vol}{preserve});
++ } elsif ($dev =~ m{^/dev/([^/\s]+)/([^/\s]+)$}) {
++ my $vg = $1;
++ my $lv = $2;
++ defined($FAI::configs{"VG_$vg"}{volumes}{$lv}) or next;
++ next if (1 == $FAI::configs{"VG_$vg"}{volumes}{$lv}{size}{preserve});
++ } else {
++ warn "Don't know how to check preservation of $dev\n";
}
-+ # TODO: handle RAID and LVM
$vg_exists = 0;
last;
- }
-@@ -396,7 +397,7 @@
+@@ -396,8 +407,6 @@
my @new_devices = ();
push @new_devices, &FAI::enc_name($_) foreach (keys %new_devs);
- # &FAI::erase_lvm_signature( \@new_devices );
-+ # TODO: check for those that really don't exist anymore
-
+-
# create all the devices
&FAI::push_command( "pvcreate $pv_create_options $_", "exist_$_", "pv_done_$_"
+ ) foreach (@new_devices);
+Index: trunk/lib/setup-storage/Volumes.pm
+===================================================================
+--- trunk.orig/lib/setup-storage/Volumes.pm
++++ trunk/lib/setup-storage/Volumes.pm
+@@ -435,11 +435,17 @@
+ my ($device_name) = @_;
+ my ($i_p_d, $disk, $part_no) = &FAI::phys_dev($device_name);
+
+- if (1 == $i_p_d && defined($FAI::configs{"PHY_$disk"}{partitions}{$part_no})) {
+- $FAI::configs{"PHY_$disk"}{partitions}{$part_no}{size}{preserve} = 1;
+- $FAI::configs{"PHY_$disk"}{preserveparts} = 1;
+- } elsif ($device_name =~ m{^/dev/md(\d+)$}) {
++ if (1 == $i_p_d) {
++ defined ($FAI::current_config{$disk}{partitions}{$part_no}) or die
++ "Can't preserve $device_name because it does not exist\n";
++ if (defined($FAI::configs{"PHY_$disk"}{partitions}{$part_no})) {
++ $FAI::configs{"PHY_$disk"}{partitions}{$part_no}{size}{preserve} = 1;
++ $FAI::configs{"PHY_$disk"}{preserveparts} = 1;
++ }
++ } elsif ($device_name =~ m{^/dev/md[\/]?(\d+)$}) {
+ my $vol = $1;
++ defined ($FAI::current_raid_config{$vol}) or die
++ "Can't preserve $device_name because it does not exist\n";
+ if (defined($FAI::configs{RAID}{volumes}{$vol}) &&
+ $FAI::configs{RAID}{volumes}{$vol}{preserve} != 1) {
+ $FAI::configs{RAID}{volumes}{$vol}{preserve} = 1;
+@@ -448,6 +454,8 @@
+ } elsif ($device_name =~ m{^/dev/([^/\s]+)/([^/\s]+)$}) {
+ my $vg = $1;
+ my $lv = $2;
++ defined ($FAI::current_lvm_config{$vg}{volumes}{$lv}) or die
++ "Can't preserve $device_name because it does not exist\n";
+ if (defined($FAI::configs{"VG_$vg"}{volumes}{$lv}) &&
+ $FAI::configs{"VG_$vg"}{volumes}{$lv}{size}{preserve} != 1) {
+ $FAI::configs{"VG_$vg"}{volumes}{$lv}{size}{preserve} = 1;
+@@ -477,6 +485,9 @@
+ (defined($FAI::current_config{$1}{partitions}{$part_id}) ? 1 : 0)
+ if (2 == $part->{size}->{preserve});
+ next unless ($part->{size}->{preserve} || $part->{size}->{resize});
++ defined ($FAI::current_config{$1}{partitions}{$part_id}) or die
++ "Can't preserve ". &FAI::make_device_name($1, $part->{number})
++ . " because it does not exist\n";
+ defined ($part->{size}->{range}) or die
+ "Can't preserve ". &FAI::make_device_name($1, $part->{number})
+ . " because it is not defined in the current config\n";
+@@ -491,6 +502,8 @@
+ if (2 == $FAI::configs{$config}{volumes}{$l}{size}{preserve});
+ next unless ($FAI::configs{$config}{volumes}{$l}{size}{preserve} == 1 ||
+ $FAI::configs{$config}{volumes}{$l}{size}{resize} == 1);
++ defined ($FAI::current_lvm_config{$1}{volumes}{$l}) or die
++ "Can't preserve /dev/$1/$l because it does not exist\n";
+ defined ($FAI::configs{$config}{volumes}{$l}{size}{range}) or die
+ "Can't preserve /dev/$1/$l because it is not defined in the current config\n";
+ &FAI::mark_preserve($_) foreach (keys %{ $FAI::configs{$config}{devices} });
+@@ -504,6 +517,8 @@
+ (defined($FAI::current_raid_config{$r}) ? 1 : 0)
+ if (2 == $FAI::configs{$config}{volumes}{$r}{preserve});
+ next unless ($FAI::configs{$config}{volumes}{$r}{preserve} == 1);
++ defined ($FAI::current_raid_config{$r}) or die
++ "Can't preserve /dev/md$r because it does not exist\n";
+ defined ($FAI::configs{$config}{volumes}{$r}{devices}) or die
+ "Can't preserve /dev/md$r because it is not defined in the current config\n";
+ &FAI::mark_preserve($_) foreach (keys %{ $FAI::configs{$config}{volumes}{$r}{devices} });
More information about the Fai-commit
mailing list