From 36ff13fecc898737614aafab4a2813a2f161f9fa Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Fri, 1 Jul 2005 06:09:56 +0000 Subject: replace lv_nb_segments() with lv_nb_pvs() (which is really what lilo cares about. lilo error is "mapped boot device cannot be on multiple real devices") --- perl-install/fsedit.pm | 8 ++++---- perl-install/lvm.pm | 10 +++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/perl-install/fsedit.pm b/perl-install/fsedit.pm index dcc87b6db..f17d5c151 100644 --- a/perl-install/fsedit.pm +++ b/perl-install/fsedit.pm @@ -386,12 +386,12 @@ sub check_mntpoint { No bootloader is able to handle this without a /boot partition. Please be sure to add a /boot partition") if $mntpoint eq "/" && isRAID($part) && !fs::get::has_mntpoint("/boot", $all_hds); - #- NB: if the LV doesn't exist, lv_nb_segments returns undef - die N("You can not use a LVM Logical Volume for mount point %s", $mntpoint) - if $mntpoint eq '/boot' && isLVM($part) && lvm::lv_nb_segments($part) > 1; + #- NB: if the LV doesn't exist, lv_nb_pvs returns 0 + die N("You can not use a LVM Logical Volume for mount point %s since it spans physical volumes", $mntpoint) + if $mntpoint eq '/boot' && isLVM($part) && lvm::lv_nb_pvs($part) > 1; cdie N("You've selected a LVM Logical Volume as root (/). The bootloader is not able to handle this when the volume spans physical volumes. -You should create a /boot partition first") if $mntpoint eq "/" && isLVM($part) && lvm::lv_nb_segments($part) != 1 && !fs::get::has_mntpoint("/boot", $all_hds); +You should create a /boot partition first") if $mntpoint eq "/" && isLVM($part) && lvm::lv_nb_pvs($part) != 1 && !fs::get::has_mntpoint("/boot", $all_hds); cdie N("This directory should remain within the root filesystem") if member($mntpoint, qw(/root)); diff --git a/perl-install/lvm.pm b/perl-install/lvm.pm index 5fb17e791..327fe8177 100644 --- a/perl-install/lvm.pm +++ b/perl-install/lvm.pm @@ -80,9 +80,13 @@ sub get_lv_size { to_int(run_program::get_stdout('lvm2', 'lvs', '--noheadings', '--nosuffix', '--units', 's', '-o', 'lv_size', "/dev/$lvm_device")); } -sub lv_nb_segments { +sub lv_to_pvs { my ($lv) = @_; - to_int(run_program::get_stdout('lvm2', 'lvs', '--noheadings', '--nosuffix', '-o', 'seg_count', "/dev/$lv->{device}")); + map { m!(\S+)\(! } run_program::get_stdout('lvm2', 'lvs', '--noheadings', '-o', 'devices', "/dev/$lv->{device}"); +} +sub lv_nb_pvs { + my ($lv) = @_; + listlength(lv_to_pvs($lv)); } sub get_lvs { @@ -155,7 +159,7 @@ sub lv_create { $lv->{device} = "$lvm->{VG_name}/$lv->{lv_name}"; lvm_cmd_or_die('lvcreate', '--size', int($lv->{size} / 2) . 'k', '-n', $lv->{lv_name}, $lvm->{VG_name}); - if ($lv->{mntpoint} eq '/boot' && lv_nb_segments($lv) > 1) { + if ($lv->{mntpoint} eq '/boot' && lv_nb_pvs($lv) > 1) { lvm_cmd_or_die('lvremove', '-f', "/dev/$lv->{device}"); die N("The bootloader can't handle /boot on multiple physicals volumes"); } -- cgit v1.2.1