···
189
+
# Approximative percentage of reserved space in an ext4 fs over 512MiB.
190
+
# 0.05208587646484375
191
+
# × 1000, integer part: 52
193
+
echo $(( $1 * 52 / 1000 ))
···
# Compute required space in filesystem blocks
255
-
requiredSpace=$(find . ! -type d -exec 'du' '--apparent-size' '--block-size' "${blockSize}" '{}' ';' | cut -f1 | sum_lines)
257
-
requiredSpace=$(( requiredSpace * ${blockSize} ))
262
+
diskUsage=$(find . ! -type d -exec 'du' '--apparent-size' '--block-size' "${blockSize}" '{}' ';' | cut -f1 | sum_lines)
263
+
# Each inode takes space!
264
+
numInodes=$(find . | wc -l)
265
+
# Convert to bytes, inodes take two blocks each!
266
+
diskUsage=$(( (diskUsage + 2 * numInodes) * ${blockSize} ))
267
+
# Then increase the required space to account for the reserved blocks.
268
+
fudge=$(compute_fudge $diskUsage)
269
+
requiredFilesystemSpace=$(( diskUsage + fudge ))
259
-
diskSize=$(( requiredSpace + additionalSpace ))
271
+
diskSize=$(( requiredFilesystemSpace + additionalSpace ))
truncate -s "$diskSize" $diskImage
printf "Automatic disk size...\n"
263
-
printf " Space needed: %d bytes\n" $requiredSpace
275
+
printf " Closure space use: %d bytes\n" $diskUsage
276
+
printf " fudge: %d bytes\n" $fudge
277
+
printf " Filesystem size needed: %d bytes\n" $requiredFilesystemSpace
printf " Additional space: %d bytes\n" $additionalSpace
printf " Disk image size: %d bytes\n" $diskSize