SI/system.pm
changeset 27 de0a25512844
parent 26 39421a9700c5
--- a/SI/system.pm	Tue Jan 19 23:48:10 2010 +0100
+++ b/SI/system.pm	Wed Jan 20 21:42:28 2010 +0100
@@ -20,23 +20,38 @@
 sub hostname(\%) {
     my $devs = shift;
     my $mnt = tempdir(CLEANUP => 1);
-    my $r;
+    my $h;
 
     foreach my $fs (
-        grep { $devs->{volume}{$_}{type} =~ /^ext/i }
-        grep { exists $devs->{volume}{$_}{type} }
-        keys %{ $devs->{volume} }
+        grep {
+            exists $devs->{volume}{$_}{type}
+              and $devs->{volume}{$_}{type} =~ /^ext/i
+        } @{ $devs->{volumes} }
       )
     {
         run("mount -r $fs $mnt");
         if (-f "$mnt/etc/hostname") {
-            die "ERR: found 2nd hostname" if defined $r;
-            chomp($r = cat("$mnt/etc/hostname"));
+            chomp($h = cat("$mnt/etc/hostname"));
         }
         run("umount $mnt");
+        return $h if defined $h;
     }
 
-    return $r;
+    return $h;
+}
+
+sub fsck(\%) {
+    my $devs = shift;
+
+    foreach
+      my $v (grep { exists $devs->{volume}{type} } keys %{ $devs->{volume} })
+    {
+        my $volume = $devs->{volume}{$v};
+        next if $volume->{type} !~ /^ext/i;
+
+        system("fsck -C0 $v");
+        die "ERR: fsck failed\n" if $? > 2;
+    }
 }
 
 1;