From a6ba2f19bd2dd6d99185cb0f5ba0dd97baaf130d Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Fri, 31 Aug 2007 16:33:16 +0000 Subject: - support for UUID (including UUID=xxx in fstab) (not by default for now) --- perl-install/NEWS | 3 +++ perl-install/diskdrake/interactive.pm | 4 ++++ perl-install/fs.pm | 6 +++++- perl-install/fs/format.pm | 4 ++++ perl-install/fs/get.pm | 1 + perl-install/fs/mount.pm | 2 +- perl-install/fs/type.pm | 1 + perl-install/fs/wild_device.pm | 7 +++++++ perl-install/fsedit.pm | 4 +++- perl-install/install/NEWS | 1 + 10 files changed, 30 insertions(+), 3 deletions(-) diff --git a/perl-install/NEWS b/perl-install/NEWS index ff8f6a396..c51679a49 100644 --- a/perl-install/NEWS +++ b/perl-install/NEWS @@ -1,3 +1,6 @@ +- diskdrake + o support for UUID in filesystems (and UUID=... in fstab) + Version 10.4.183 - 31 August 2007, by Pascal "Pixel" Rigaux - bootloader-config diff --git a/perl-install/diskdrake/interactive.pm b/perl-install/diskdrake/interactive.pm index 9f3413dae..6bc390f0f 100644 --- a/perl-install/diskdrake/interactive.pm +++ b/perl-install/diskdrake/interactive.pm @@ -35,7 +35,10 @@ struct part { int part_number # 1 for hda1... string device # 'hda5', 'sdc1' ... string device_LABEL # volume label. LABEL=xxx or /dev/disk/by-label/xxx can be used in fstab instead of the device + string device_UUID # volume UUID. UUID=xxx or /dev/disk/by-uuid/xxx can be used in fstab instead of the device bool prefer_device_LABEL # should the {device_LABEL} or the {device} be used in fstab + bool prefer_device_UUID # should the {device_UUID} or the {device} be used in fstab + bool prefer_device # should the {device} be used in fstab bool faked_device # false if {device} is a real device, true for nfs/smb/dav/none devices. If the field does not exist, we do not know string rootDevice # 'sda', 'hdc' ... (can also be a VG_name) @@ -1235,6 +1238,7 @@ sub format_part_info { $info .= N("Mount point: ") . "$part->{mntpoint}\n" if $part->{mntpoint}; $info .= N("Device: ") . "$part->{device}\n" if $part->{device} && !isLoopback($part); $info .= N("Volume label: ") . "$part->{device_LABEL}\n" if $part->{device_LABEL} && $::expert; + $info .= N("UUID: ") . "$part->{device_UUID}\n" if $::expert && $part->{device_UUID}; $info .= N("DOS drive letter: %s (just a guess)\n", $part->{device_windobe}) if $part->{device_windobe}; if (arch() eq "ppc") { my $pType = $part->{pType}; diff --git a/perl-install/fs.pm b/perl-install/fs.pm index 15de5228d..bdb364896 100644 --- a/perl-install/fs.pm +++ b/perl-install/fs.pm @@ -22,7 +22,7 @@ sub read_fstab { my ($prefix, $file, @reading_options) = @_; if (member('keep_default', @reading_options)) { - push @reading_options, 'freq_passno', 'keep_device_LABEL'; + push @reading_options, 'freq_passno', 'keep_device_LABEL', 'keep_device_UUID'; } my %comments; @@ -85,6 +85,10 @@ sub read_fstab { if ($h->{device_LABEL} && !$h->{device_alias} && member('keep_device_LABEL', @reading_options)) { $h->{prefer_device_LABEL} = 1; + } elsif ($h->{device_UUID} && !$h->{device_alias} && member('keep_device_UUID', @reading_options)) { + $h->{prefer_device_UUID} = 1; + } else { + $h->{prefer_device} = 1; } if ($h->{options} =~ /credentials=/ && !member('verbatim_credentials', @reading_options)) { diff --git a/perl-install/fs/format.pm b/perl-install/fs/format.pm index 136581583..42a92335b 100644 --- a/perl-install/fs/format.pm +++ b/perl-install/fs/format.pm @@ -128,6 +128,10 @@ sub part_raw { disable_forced_fsck($dev); } + delete $part->{UUID_from_magic}; + fs::type::type_subpart_from_magic($part); + $part->{device_UUID} = $part->{UUID_from_magic}; + set_isFormatted($part, 1); } diff --git a/perl-install/fs/get.pm b/perl-install/fs/get.pm index 0cdb55969..aa23d1c61 100644 --- a/perl-install/fs/get.pm +++ b/perl-install/fs/get.pm @@ -143,6 +143,7 @@ sub is_same_hd { $s1 eq $s2; } else { $hd1->{device_LABEL} && $hd2->{device_LABEL} && $hd1->{device_LABEL} eq $hd2->{device_LABEL} + || $hd1->{device_UUID} && $hd2->{device_UUID} && $hd1->{device_UUID} eq $hd2->{device_UUID} || $hd1->{device} && $hd2->{device} && $hd1->{device} eq $hd2->{device}; } } diff --git a/perl-install/fs/mount.pm b/perl-install/fs/mount.pm index f22283573..950eb1715 100644 --- a/perl-install/fs/mount.pm +++ b/perl-install/fs/mount.pm @@ -125,7 +125,7 @@ sub umount { sub part { my ($part, $b_rdonly, $o_wait_message) = @_; - log::l("mount_part: " . join(' ', map { "$_=$part->{$_}" } 'device', 'mntpoint', 'isMounted', 'real_mntpoint')); + log::l("mount_part: " . join(' ', map { "$_=$part->{$_}" } 'device', 'mntpoint', 'isMounted', 'real_mntpoint', 'device_UUID')); return if $part->{isMounted} && !($part->{real_mntpoint} && $part->{mntpoint}); diff --git a/perl-install/fs/type.pm b/perl-install/fs/type.pm index 79a89e819..40e3db41e 100644 --- a/perl-install/fs/type.pm +++ b/perl-install/fs/type.pm @@ -280,6 +280,7 @@ sub type_subpart_from_magic { my $ids = call_vol_id($part); $part->{LABEL_from_magic} = $ids->{ID_FS_LABEL} if $ids->{ID_FS_LABEL}; + $part->{UUID_from_magic} = $ids->{ID_FS_UUID} if $ids->{ID_FS_UUID}; my $p; if ($ids->{ID_FS_USAGE} eq 'raid') { diff --git a/perl-install/fs/wild_device.pm b/perl-install/fs/wild_device.pm index dea15a4d3..ebb391cdf 100644 --- a/perl-install/fs/wild_device.pm +++ b/perl-install/fs/wild_device.pm @@ -15,6 +15,8 @@ sub analyze { 'dev', "/dev/$dev"; } elsif ($dev =~ /^LABEL=(.*)/) { 'label', $1; + } elsif ($dev =~ /^UUID=(.*)/) { + 'uuid', $1; } elsif ($dev eq 'none' || $dev eq 'rootfs') { 'virtual'; } elsif ($dev =~ m!^(\S+):/\w!) { @@ -34,6 +36,8 @@ sub to_subpart { if (my ($kind, $val) = analyze($dev)) { if ($kind eq 'label') { $part->{device_LABEL} = $val; + } elsif ($kind eq 'label') { + $part->{device_UUID} = $val; } elsif ($kind eq 'dev') { my %part = (faked_device => 0); if (my $rdev = (stat "$::prefix$dev")[6]) { @@ -51,6 +55,7 @@ sub to_subpart { } if ($keep) { $part{device_LABEL} = $1 if $dev =~ m!^disk/by-label/(.*)!; + $part{device_UUID} = $1 if $dev =~ m!^disk/by-uuid/(.*)!; $part{device_alias} = $dev; $dev = $symlink; } @@ -78,6 +83,8 @@ sub from_part { 'LABEL=' . $part->{device_LABEL}; } elsif ($part->{device_alias}) { "/dev/$part->{device_alias}"; + } elsif ($part->{prefer_device_UUID} && $part->{device_UUID}) { + 'UUID=' . $part->{device_UUID}; } else { my $faked_device = exists $part->{faked_device} ? $part->{faked_device} : diff --git a/perl-install/fsedit.pm b/perl-install/fsedit.pm index 64e57c345..f202d0ef4 100644 --- a/perl-install/fsedit.pm +++ b/perl-install/fsedit.pm @@ -260,6 +260,7 @@ Do you agree to lose all the partitions? $_->{bad_fs_type_magic} = 1; } $_->{device_LABEL} = $_->{LABEL_from_magic} if $_->{LABEL_from_magic}; + $_->{device_UUID} = $_->{UUID_from_magic} if $_->{UUID_from_magic}; } if ($hd->{usb_media_type}) { @@ -380,7 +381,8 @@ sub suggest_part { $part->{mntpoint} = $best->{mntpoint}; fs::type::set_type_subpart($part, $best) if !isTrueFS($best) || !isTrueFS($part); $part->{size} = computeSize($part, $best, $all_hds, \@local_suggestions); - foreach ('options', 'lv_name', 'encrypt_key', 'device_LABEL', 'prefer_device_LABEL', 'primaryOrExtended') { + foreach ('options', 'lv_name', 'encrypt_key', 'primaryOrExtended', + 'device_LABEL', 'prefer_device_LABEL', 'device_UUID', 'prefer_device_UUID', 'prefer_device') { $part->{$_} = $best->{$_} if $best->{$_}; } $best; diff --git a/perl-install/install/NEWS b/perl-install/install/NEWS index a2eb1d548..53d96e34e 100644 --- a/perl-install/install/NEWS +++ b/perl-install/install/NEWS @@ -1,3 +1,4 @@ +- support for UUID (including UUID=xxx in fstab) - do not set relatime option for mounting nfs - nicely adjust mtime of fontconfig cache files -- cgit v1.2.1