home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / lib / YaST2 / bin / examine_mbr.pl < prev    next >
Perl Script  |  2006-11-29  |  795b  |  41 lines

  1. #!/usr/bin/perl
  2.  
  3. use Compress::Zlib;
  4.  
  5. die "must specify 1 device file to examine" unless @ARGV == 1;
  6.  
  7. open(FD, "<" . $ARGV[0]) || die "cannot open " . $ARGV[0];
  8.  
  9. die "cannot read 512 bytes from $1" unless sysread(FD, $MBR, 512, 0) == 512;
  10.  
  11. ($d, $status) = deflateInit( -Level => Z_BEST_COMPRESSION );
  12.  
  13. ($out, $status) = $d->deflate($MBR) ;
  14. ($out2, $status) = $d->flush() ;
  15.  
  16. $out .= $out2;
  17.  
  18. if (length($out) < 70) {
  19.   print "Definitely invalid\n";
  20.   exit 1;
  21. }
  22.  
  23. if (substr($MBR, 320, 126) =~ 
  24.     m,invalid partition table.*no operating system,i) {
  25.   print "Generic MBR\n";
  26.   exit 0;
  27. }
  28.  
  29. if (substr($MBR, 346, 100) =~ m,GRUB .Geom.Hard Disk.Read. Error,) {
  30.   print "Grub stage1\n";
  31.   exit 1;
  32. }
  33.  
  34. if (substr($MBR, 4, 20) =~ m,LILO,) {
  35.   print "LILO stage1\n";
  36.   exit 1;
  37. }
  38.  
  39. print "unknown\n";
  40. exit 0;
  41.