| #!/bin/sh | |
| OPTS="-O bigalloc -C 8192" | |
| SIZE=4096 | |
| IMG=/tmp/foo.img | |
| TMP=$(mktemp) | |
| SIZE_A=15000 | |
| SIZE_B=5000 | |
| SIZE_C=20000 | |
| DEBUGFS=./debugfs/debugfs | |
| MKE2FS=./misc/mke2fs | |
| FSCK=./e2fsck/e2fsck | |
| dd if=/dev/zero of=$IMG bs=1k count=$SIZE | |
| echo $MKE2FS -F -t ext4 -L test $OPTS test.img $SIZE | |
| $MKE2FS -F -t ext4 -L test $OPTS $IMG $SIZE | |
| dd if=/dev/zero of=$TMP bs=$SIZE_A count=1 >& /dev/null | |
| echo Writing $SIZE_A bytes to a | |
| $DEBUGFS -w -R "write $TMP a" $IMG | |
| BLKS=$(./debugfs/debugfs -R "blocks a" $IMG) | |
| cp /dev/null $TMP | |
| echo "Releasing blocks $BLKS" | |
| for i in $BLKS ; do echo "freeb $i" >> $TMP; done | |
| $DEBUGFS -w $IMG < $TMP >& /dev/null | |
| echo Writing $SIZE_B bytes to b | |
| dd if=/dev/zero of=$TMP bs=$SIZE_B count=1 >& /dev/null | |
| $DEBUGFS -w -R "write $TMP b" $IMG | |
| if [ -n "$SIZE_C" ]; then | |
| BLKS=$(./debugfs/debugfs -R "blocks b" $IMG) | |
| cp /dev/null $TMP | |
| echo "Releasing blocks $BLKS" | |
| for i in $BLKS ; do echo "freeb $i" >> $TMP; done | |
| $DEBUGFS -w $IMG < $TMP >& /dev/null | |
| echo Writing $SIZE_C bytes to c | |
| dd if=/dev/zero of=$TMP bs=$SIZE_C count=1 >& /dev/null | |
| $DEBUGFS -w -R "write $TMP c" $IMG | |
| fi | |
| echo "set_inode_field a mtime 201107040000" > $TMP | |
| echo "set_inode_field b mtime 201107050000" >> $TMP | |
| if [ -n "$SIZE_C" ]; then | |
| echo "set_inode_field c mtime 201107060000" >> $TMP | |
| fi | |
| $DEBUGFS -w $IMG < $TMP >& /dev/null | |
| $FSCK -fy $IMG | |
| rm $TMP | |