home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd2.bin / suse / inst-sys / usr / lib / YaST / create_yast_partfiles < prev    next >
Text File  |  2000-03-30  |  2KB  |  66 lines

  1. #!/bin/bash
  2. #
  3. # Copyright (c) 1999 S.u.S.E. Gmbh Fuerth, Germany.  All rights reserved.
  4. #
  5. # Author: Thomas Fehr      <fehr@suse.de>, 1999
  6. #
  7. TMPDIR=/tmp/`basename $0`.$$
  8. mkdir -p $TMPDIR
  9. cd $TMPDIR
  10. fdisk -l | sed "s/[*+-]//g" | egrep "Disk|^/dev" | grep -v Extended |\
  11.     csplit -z - "/^Disk/" "{*}" > /dev/null
  12. df -P | sort | awk '{ printf "%s %s free=%d\n", $1, $6, int($4/1024) }' > size
  13. for i in xx??
  14. do
  15.     SEC_CYL=`head -1 $i | awk '{ print $3, "*", $5 }' | bc`
  16.     DISK=`head -1 $i | awk '{ print $2 }' | sed s/://`
  17.     DISK_LEN=`echo -n $DISK | wc -c`
  18.     cat size | grep ^$DISK | sort -n -k1.`expr $DISK_LEN + 1` > size.1
  19.     cat $i | sed 1d |\
  20.         awk "{ printf \"%s size=%d id=%s\n\", \$1, \
  21.                   int((((\$3-\$2+1)*$SEC_CYL+1)/2+1023)/1024), \$5 }" > info
  22.     rm -f info.1
  23.     for i in `awk '{ if ( $3=="id=83" ) print $1 }' < info`
  24.         do
  25.         echo -n "$i " >> info.1
  26.         dumpe2fs $i 2>/dev/null | head -30 |\
  27.         awk 'BEGIN {maxm=-1; rb=-1}
  28.              /Errors behavior:/ { err=$3 }
  29.              /Block size:/ { bs=$3 }
  30.              /Maximum mount count:/ { maxm=$4 }
  31.              /Inode count:/ { ic=$3 }
  32.              /Block count:/ { bc=$3 }
  33.              /Reserved block count:/ { rb=$4 }
  34.              END { if (bs!=0) printf( "bs=%d", bs );
  35.                    if (length(err)>0) 
  36.                    printf( " err=%s", tolower(substr(err,0,1))); 
  37.                    if (maxm!=-1) printf( " maxm=%d", maxm ); 
  38.                    if (bs!=0&&ic!=0) 
  39.                    printf( " idns=%d", 
  40.                            2^int(log(bc/ic)/log(2)+0.5)*bs ); 
  41.                    if (bc!=0&&rb!=-1) {
  42.                    diff = int(100/bc*rb+0.1) - 100/bc*rb
  43.                    if (diff<0)
  44.                    diff=-diff;
  45.                    if( diff <= 0.1 )
  46.                        printf( " respc=%d", int(100/bc*rb+0.1) );
  47.                    else
  48.                        printf( " resbl=%d", rb ); \
  49.                    }
  50.                printf( "\n" );
  51.              }' >> info.1
  52.         done
  53.     cat info | join -a 1 - info.1 |\
  54.         join -a 2 size.1 - | sed s:$DISK:num=: |\
  55.         awk '{ if(substr($2,0,1)!="/") $2="NONE " $2 ;
  56.            if(substr($3,0,5)=="free=") { $(NF+1)=$3 ; $3="" } ;
  57.            print $0 }' | sed "s/  / /g" | sort -n -k 1.5 |\
  58.     awk '{ if( $2=="NONE" && $4=="id=82" ) $2="SWAP" ;
  59.            tmp=$2 ; $2=$1; $1=tmp ; print $0 }' > $i.1
  60.     MAX=`awk '{ print $3 }' $i.1 | sort -nr -k 1.6 | head -1`
  61.      sed "s/ $MAX / size=0 /" $i.1 > part`echo $DISK | sed "s:/:.:g"`
  62. done
  63. cd -
  64. mv $TMPDIR/part.* .
  65. rm -rf $TMPDIR
  66.