Fix 'unknown filesystem' warnings in old inspection code (RHBZ#678231 RHBZ#666578).
[libguestfs.git] / perl / lib / Sys / Guestfs / Lib.pm
index 97d0e8e..007db64 100644 (file)
@@ -892,23 +892,29 @@ sub _find_filesystem
 
     if (/^LABEL=(.*)/) {
         my $label = $1;
-        foreach (sort keys %$fses) {
-            if (exists $fses->{$_}->{label} &&
-                $fses->{$_}->{label} =~ /$label/i) {
-                return ($_, $fses->{$_});
-            }
-        }
-        warn __x("unknown filesystem label {label}\n", label => $label);
+        my $dev;
+        eval {
+            $dev = $g->findfs_label ($label);
+        };
+        warn "unknown filesystem LABEL=$label in /etc/fstab: $@\n" if $@;
+        return () if !defined $dev;
+        $dev = _canonical_dev ($dev);
+        return ($dev, $fses->{$dev}) if exists $fses->{$dev};
+        # Otherwise return nothing.  It's just a filesystem that we are
+        # ignoring, eg. swap.
         return ();
     } elsif (/^UUID=(.*)/) {
         my $uuid = $1;
-        foreach (sort keys %$fses) {
-            if (exists $fses->{$_}->{uuid} &&
-                $fses->{$_}->{uuid} eq $uuid) {
-                return ($_, $fses->{$_});
-            }
-        }
-        warn __x("unknown filesystem UUID {uuid}\n", uuid => $uuid);
+        my $dev;
+        eval {
+            $dev = $g->findfs_uuid ($uuid);
+        };
+        warn "unknown filesystem UUID=$uuid in /etc/fstab: $@\n" if $@;
+        return () if !defined $dev;
+        $dev = _canonical_dev ($dev);
+        return ($dev, $fses->{$dev}) if exists $fses->{$dev};
+        # Otherwise return nothing.  It's just a filesystem that we are
+        # ignoring, eg. swap.
         return ();
     } else {
         return ($_, $fses->{$_}) if exists $fses->{$_};
@@ -922,6 +928,9 @@ sub _find_filesystem
         if (m{^/dev/hd(.*)} && exists $fses->{"/dev/sd$1"}) {
             return ("/dev/sd$1", $fses->{"/dev/sd$1"});
         }
+        if (m{^/dev/vd(.*)} && exists $fses->{"/dev/sd$1"}) {
+            return ("/dev/sd$1", $fses->{"/dev/sd$1"});
+        }
         if (m{^/dev/xvd(.*)} && exists $fses->{"/dev/sd$1"}) {
             return ("/dev/sd$1", $fses->{"/dev/sd$1"});
         }
@@ -1105,7 +1114,7 @@ sub _find_grub_prefix
     die(__"Can't find grub on guest") unless($g->exists('/boot/grub/menu.lst'));
 
     # Look for the most specific mount point in mounts
-    foreach my $path qw(/boot/grub /boot /) {
+    foreach my $path (qw(/boot/grub /boot /)) {
         if(exists($mounts->{$path})) {
             return "" if($path eq '/');
             return $path;
@@ -1336,10 +1345,10 @@ sub _find_modprobe_aliases
 
     my %modprobe_aliases;
 
-    for my $pattern qw(/files/etc/conf.modules/alias
-                       /files/etc/modules.conf/alias
-                       /files/etc/modprobe.conf/alias
-                       /files/etc/modprobe.d/*/alias) {
+    for my $pattern (qw(/files/etc/conf.modules/alias
+                        /files/etc/modules.conf/alias
+                        /files/etc/modprobe.conf/alias
+                        /files/etc/modprobe.d/*/alias)) {
         for my $path ( $g->aug_match($pattern) ) {
             $path =~ m{^/files(.*)/alias(?:\[\d*\])?$}
                 or die __x("{path} doesn't match augeas pattern",