Ignore old-style initrd which is a compressed ext2 filesystem.
authorRichard Jones <rjones@trick.home.annexia.org>
Mon, 13 Jul 2009 17:06:10 +0000 (18:06 +0100)
committerRichard Jones <rjones@trick.home.annexia.org>
Mon, 13 Jul 2009 17:06:10 +0000 (18:06 +0100)
'cpio' chokes on these, taking ages to decide that they are
not cpio files, and producing masses of messages.  This was
causing virt-inspector to be very slow (many minutes) on
RHEL 3 guests.  With this fix, speed is back to normal.

perl/lib/Sys/Guestfs/Lib.pm

index 27a7b9e..d5dfb4e 100644 (file)
@@ -1208,14 +1208,20 @@ sub _check_for_initrd
            my $version = $1;
            my @modules;
 
-           eval {
-               @modules = $g->initrd_list ("/boot/$initrd");
-           };
-           unless ($@) {
-               @modules = grep { m,([^/]+)\.ko$, || m,([^/]+)\.o$, } @modules;
-               $initrd_modules{$version} = \@modules
-           } else {
-               warn "/boot/$initrd: could not read initrd format"
+           # Disregard old-style compressed ext2 files, since cpio
+           # takes ages to (fail to) process these.
+           if ($g->file ("/boot/$initrd") !~ /gzip compressed/ ||
+               $g->zfile ("gzip", "/boot/$initrd") !~ /ext2 filesystem/) {
+               eval {
+                   @modules = $g->initrd_list ("/boot/$initrd");
+               };
+               unless ($@) {
+                   @modules = grep { m,([^/]+)\.ko$, || m,([^/]+)\.o$, }
+                   @modules;
+                   $initrd_modules{$version} = \@modules
+               } else {
+                   warn "/boot/$initrd: could not read initrd format";
+               }
            }
        }
     }