Sfoglia il codice sorgente

genext2fs.sh: improve number of blocks calculation

Closes #2929

Instead of just adding a fixed amount to the blocks used, try to
estimate the real space needed according to the filesystem structure
(bitmaps, inodes, blocks).

The side effect of this is that we no longer significantly overestimate
the size needed for small file systems.

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Peter Korsgaard 14 anni fa
parent
commit
eeea3ea6a8
2 ha cambiato i file con 12 aggiunte e 14 eliminazioni
  1. 1 0
      CHANGES
  2. 11 14
      fs/ext2/genext2fs.sh

+ 1 - 0
CHANGES

@@ -24,6 +24,7 @@
 	#1735: [PATCH] mplayer: convert to autotools infrastructure
 	#1735: [PATCH] mplayer: convert to autotools infrastructure
 	#2371: QT MYSQL Module does not build when MySQL installed on the host
 	#2371: QT MYSQL Module does not build when MySQL installed on the host
 	#2905: Qt: Speed up compilation, if gui-module isn't selected
 	#2905: Qt: Speed up compilation, if gui-module isn't selected
+	#2929: genext2fs: couldn't allocate a block (no free space)
 	#2965: Broken linkage to xkbcomp (blocking X server startup)
 	#2965: Broken linkage to xkbcomp (blocking X server startup)
 	#2983: xlib_libX11 build failed
 	#2983: xlib_libX11 build failed
 
 

+ 11 - 14
fs/ext2/genext2fs.sh

@@ -10,24 +10,11 @@ while getopts x:d:D:b:i:N:m:g:e:zfqUPhVv f
 do
 do
     case $f in
     case $f in
 	b) CALC_BLOCKS=0 ;;
 	b) CALC_BLOCKS=0 ;;
-	N) CALC_INODES=0 ;;
+	N) CALC_INODES=0; INODES=$OPTARG ;;
 	d) TARGET_DIR=$OPTARG ;;
 	d) TARGET_DIR=$OPTARG ;;
     esac
     esac
 done
 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
 # calculate needed inodes
 if [ $CALC_INODES -eq 1 ];
 if [ $CALC_INODES -eq 1 ];
 then
 then
@@ -36,4 +23,14 @@ then
     set -- $@ -N $INODES
     set -- $@ -N $INODES
 fi
 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 $@
 exec genext2fs $@