Changeset 1565 in MondoRescue for branches/2.2.5/mindi/parted2fdisk.pl


Ignore:
Timestamp:
Jul 25, 2007, 3:38:42 PM (17 years ago)
Author:
Bruno Cornec
Message:
  • arch => uname -m everywhere
  • parted2fdisk adapted for parted differences on SLES 10 ia64
  • reiserfs support added for parted2fdisk
  • decode_Bsuf function added for parted2fdisk
  • README.ia64 improved for SLES 10
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.5/mindi/parted2fdisk.pl

    r725 r1565  
    77#
    88# Aims to be architecture independant (i386/ia64)
    9 # Tested on RHAS 2.1 ia64 - Mandrake 9.0 ia64 - RHAS 3.0 ia64
     9# Tested on RHAS 2.1 ia64 - Mandrake 9.0 ia64 - RHAS 3.0 ia64 - SLES 10
    1010#
    1111# (c) Bruno Cornec <Bruno.Cornec@hp.com>
     
    3636my %end;
    3737my %type;
    38 my %flags;
    3938my $arch;
    4039my $fake = 0;
     
    7473        "ext2" => "83",
    7574        "ext3" => "83",
     75        "reiserfs" => "83",
    7676        "linux-swap" => "82",
    7777        "LVM" => "8e",
     
    194194                    if ($cylend =~ /^\+/) {
    195195                        $cylend =~ s/^\+//;
    196                         if ($cylend =~ /K$/) {
    197                             $cylend =~ s/K$//;
    198                             $cylend *= 1024;
    199                         } elsif ($cylend =~ /M$/) {
    200                             $cylend =~ s/M$//;
    201                             $cylend *= 1048576;
    202                         } elsif ($cylend =~ /G$/) {
    203                             $cylend =~ s/G$//;
    204                             $cylend *= 1073741824;
    205                         }
     196                        # Handles suffixes; return bytes
     197                        $cylend = decode_Bsuf($cylend,1);
    206198                        # This gives the number of cyl
    207199                        $cylend /= $un;
     
    342334        "ext2" => "Linux",
    343335        "ext3" => "Linux",
     336        "reiserfs" => "Linux",
    344337        "linux-swap" => "Linux swap",
    345338        "LVM" => "Linux LVM",
     
    356349my $cmt;
    357350format FLOG1 =
    358 @<<<<<<<<<<<< @>>>>>>>> @>>>>>>>> @>>>>>>>> @>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     351@<<<<<<<<<<<< @>>>>>>>>>> @>>>>>>>>>> @>>>>>>>>>> @>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    359352$part,        $mstart,   $mend,   $length,  $pid, $cmt
    360353.
     
    362355@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    363356$part,
    364               @>>>>>>>> @>>>>>>>> @>>>>>>>> @>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     357              @>>>>>>>>>> @>>>>>>>>>> @>>>>>>>>>> @>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    365358              $mstart,   $mend,   $length,  $pid, $cmt
    366359.
    367360format STDOUT1 =
    368 @<<<<<<<<<<<< @>>>>>>>> @>>>>>>>> @>>>>>>>> @>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     361@<<<<<<<<<<<< @>>>>>>>>>> @>>>>>>>>>> @>>>>>>>>>> @>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    369362$part,        $mstart,   $mend,   $length,  $pid, $cmt
    370363.
     
    372365@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    373366$part,
    374               @>>>>>>>> @>>>>>>>> @>>>>>>>> @>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     367              @>>>>>>>>>> @>>>>>>>>>> @>>>>>>>>>> @>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    375368              $mstart,   $mend,   $length,  $pid, $cmt
    376369.
    377 #/dev/hda1             1     77579  39099374+  ee  EFI GPT
     370#   Device Boot      Start         End      Blocks   Id  System
     371#/dev/hda1               1       77579    39099374+  ee  EFI GPT
     372
    378373
    379374#
     
    386381
    387382# This will return MB
    388 get_parted ($device,$start,$end,\%type,\%flags);
     383get_parted ($device,$start,$end,\%type);
    389384
    390385while (($n,$d) = each %type) {
     
    395390    $mstart = sprintf("%d",$$start{$n}*1048576/$un);
    396391    $mstart = 1 if ($mstart < 1);
     392    $mstart = $endmax if ($mstart > $endmax);
    397393    $mend = sprintf("%d",$$end{$n}*1048576/$un - 1);
    398394    $mend = $endmax if ($mend > $endmax);
     395    $mend = 1 if ($mend < 1);
    399396    # length is in 1K blocks
    400397    $length = sprintf("%d",($mend-$mstart+1)*$un/1024);
     
    486483#
    487484# Parted gives info in MB
     485# (depending on versions - 1.6.25.1 provides suffixes)
    488486#
    489487sub get_parted {
     
    493491my $end = shift;
    494492my $type = shift;
    495 my $flags = shift;
     493my $void;
    496494my $d;
    497495my $n;
     496my $ret;
     497my $mode;
     498my $size;
     499
     500open (PARTED, "$parted -v |") || die "Unable to read from $parted";
     501$d = <PARTED>;
     502print FLOG "$d";
     503close(PARTED);
    498504
    499505open (PARTED, "$parted -s $device print |") || die "Unable to read from $parted";
     
    502508$d = <PARTED>;
    503509$d = <PARTED>;
     510
     511# depending on parted version, information given change:
     512if ($d =~ /\bSize\b/) {
     513    # SLES 10 parted >= 1.6.25
     514    $mode=1;
     515} else {
     516    # RHEL 3 parted <= 1.6.3
     517    $mode=0;
     518}
     519print FLOG "mode: $mode\n";
    504520print FLOG "Got from parted: \n";
    505 print FLOG "Minor    Start       End     Filesystem                        Flags\n";
     521print FLOG "Minor    Start       End     Filesystem\n";
    506522# Get info from each partition line
    507523while (($n,$d) = split(/\s/, <PARTED>,2)) {
     
    510526    $d =~ s/^\s*//;
    511527    $d =~ s/\s+/ /g;
    512     ($$start{$n},$$end{$n},$$type{$n},$$flags{$n}) = split(/ /,$d);
     528    if ($mode == 0) {
     529        ($$start{$n},$$end{$n},$$type{$n},$void) = split(/ /,$d);
     530    } elsif ($mode == 1) {
     531        ($$start{$n},$$end{$n},$size,$$type{$n},$void) = split(/ /,$d);
     532    } else {
     533        die "Undefined mode $mode";
     534    }
    513535    $$start{$n} = "" if (not defined $$start{$n});
    514536    $$end{$n} = "" if (not defined $$end{$n});
    515537    $$type{$n} = "" if (not defined $$type{$n});
    516     $$flags{$n} = "" if (not defined $$flags{$n});
    517     print FLOG "$n      $$start{$n}      $$end{$n}     $$type{$n}  $$flags{$n}\n";
     538    # Handles potential suffixes in latest parted version. Return MB
     539    $ret = decode_Bsuf($$start{$n},1048576);
     540    $$start{$n} = $ret;
     541    $ret = decode_Bsuf($$end{$n},1048576);
     542    $$end{$n} = $ret;
     543    print FLOG "$n      $$start{$n}      $$end{$n}     $$type{$n}\n";
    518544}
    519545close(PARTED);
    520546}
     547
     548sub decode_Bsuf {
     549
     550my $size  = shift;
     551my $unit  = shift;
     552my $ret = 0;
     553
     554#print FLOG "decode_Bsuf input: $size / $unit ";
     555if ($size =~ /KB$/i) {
     556    $size =~ s/KB$//i;
     557    $size *= 1024;
     558} elsif ($size =~ /MB$/i) {
     559    $size =~ s/MB$//i;
     560    $size *= 1048576;
     561} elsif ($size =~ /GB$/i) {
     562    $size =~ s/GB$//i;
     563    $size *= 1073741824;
     564} elsif ($size =~ /TB$/i) {
     565    $size =~ s/TB$//i;
     566    $size *= 1099511627776;
     567} else {
     568    # Nothing to do
     569}
     570$ret = $size / $unit;
     571#print FLOG " - output : $size => $ret\n";
     572return($ret);
     573}
     574
    521575
    522576# Based on Version 2.4  27-Sep-1996  Charles Bailey  bailey@genetics.upenn.edu
Note: See TracChangeset for help on using the changeset viewer.