diff options
Diffstat (limited to 'fs/ext2')
-rwxr-xr-x | fs/ext2/genext2fs.sh | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/fs/ext2/genext2fs.sh b/fs/ext2/genext2fs.sh index b315ec30a..7a518aea7 100755 --- a/fs/ext2/genext2fs.sh +++ b/fs/ext2/genext2fs.sh @@ -10,24 +10,11 @@ while getopts x:d:D:b:i:N:m:g:e:zfqUPhVv f do case $f in b) CALC_BLOCKS=0 ;; - N) CALC_INODES=0 ;; + N) CALC_INODES=0; INODES=$OPTARG ;; d) TARGET_DIR=$OPTARG ;; esac done -# calculate needed blocks -if [ $CALC_BLOCKS -eq 1 ]; -then - BLOCKS=$(du -s -c -k $TARGET_DIR | grep total | sed -e "s/total//") - if [ $BLOCKS -ge 20000 ]; - then - BLOCKS=$(expr $BLOCKS + 16384) - else - BLOCKS=$(expr $BLOCKS + 2400) - fi - set -- $@ -b $BLOCKS -fi - # calculate needed inodes if [ $CALC_INODES -eq 1 ]; then @@ -36,4 +23,14 @@ then set -- $@ -N $INODES fi +# calculate needed blocks +if [ $CALC_BLOCKS -eq 1 ]; +then + # size ~= superblock, block+inode bitmaps, inodes (8 per block), blocks + # we scale inodes / blocks with 10% to compensate for bitmaps size + slack + BLOCKS=$(du -s -c -k $TARGET_DIR | grep total | sed -e "s/total//") + BLOCKS=$(expr 500 + \( $BLOCKS + $INODES / 8 \) \* 11 / 10) + set -- $@ -b $BLOCKS +fi + exec genext2fs $@ |