/btrfs-progs-test.sh
Secret
Created Aug 30, 2017
| # !/bin/sh | |
| set -e | |
| # $HOME is on a ext4 filesystem | |
| BENCHMARK_DIR=/tmp/silesia | |
| losetup_btrfs() { | |
| losetup -D | |
| losetup -f /tmp/disk | |
| sleep 1 # yay udev races | |
| } | |
| mount_btrfs() { | |
| losetup_btrfs | |
| mount -ocompress-force=zstd /dev/loop0 /mnt/test | |
| } | |
| umount_btrfs() { | |
| umount /mnt/test ||: | |
| } | |
| rm_btrfs() { | |
| rm -rf /tmp/disk ||: | |
| } | |
| clean_btrfs() { | |
| umount_btrfs | |
| rm_btrfs | |
| } | |
| create_btrfs() { | |
| # Create the BtrFS filesystem | |
| clean_btrfs | |
| dd if=/dev/zero of=/tmp/disk bs=4096 seek=1048575 count=1 | |
| mkfs.btrfs -msingle /tmp/disk | |
| mount_btrfs | |
| cp -r $BENCHMARK_DIR /mnt/test | |
| sync | |
| umount_btrfs | |
| } | |
| # Defrag path $2 and compress with $1 | |
| defrag() { | |
| btrfs filesystem defragment -c$1 $2 && sync | |
| } | |
| dump_tree() { | |
| btrfs inspect-internal dump-tree /dev/loop0 | |
| } | |
| error() { | |
| echo "$@" | |
| return 1 | |
| } | |
| test_filesystem_defrag() { | |
| echo "test_filesystem_defrag" | |
| create_btrfs | |
| mount_btrfs | |
| echo "initial check" | |
| # Expect only zstd compressed blocks | |
| dump_tree | grep zstd > /dev/null || error "no zstd" | |
| dump_tree | grep lzo > /dev/null ||: | |
| dump_tree | grep zlib > /dev/null ||: | |
| echo "make dickens lzo" | |
| defrag lzo /mnt/test/silesia/dickens | |
| # Expect zstd/lzo compressed blocks | |
| dump_tree | grep zstd > /dev/null || error "no zstd" | |
| dump_tree | grep lzo > /dev/null || error "no lzo" | |
| dump_tree | grep zlib > /dev/null ||: | |
| echo "make dickens zstd" | |
| defrag zstd /mnt/test/silesia/dickens | |
| # Expect only zstd compressed blocks | |
| dump_tree | grep zstd > /dev/null || error "no zstd" | |
| dump_tree | grep lzo > /dev/null ||: | |
| dump_tree | grep zlib > /dev/null ||: | |
| echo "test_filesystem_defrag PASS" | |
| } | |
| test_dump_tree() { | |
| echo "test_dump_tree" | |
| create_btrfs | |
| mount_btrfs | |
| # Expect only zstd compressed blocks | |
| dump_tree | grep zstd > /dev/null || error "no zstd" | |
| dump_tree | grep lzo > /dev/null ||: | |
| dump_tree | grep zlib > /dev/null ||: | |
| defrag lzo /mnt/test/silesia/dickens | |
| defrag zlib /mnt/test/silesia/mozilla | |
| btrfs filesystem defragment /mnt/test/silesia/mr && sync | |
| # Expect compressed blocks of all types | |
| dump_tree | grep zstd > /dev/null || error "no zstd" | |
| dump_tree | grep lzo > /dev/null || error "no lzo" | |
| dump_tree | grep zlib > /dev/null || error "no zlib" | |
| dump_tree | grep "extent compression 0 (none)" > /dev/null || error "no none" | |
| echo "test_dump_tree PASS" | |
| } | |
| test_dump_super() { | |
| echo "test_dumper_super" | |
| create_btrfs | |
| losetup_btrfs | |
| btrfs inspect-internal dump-super -f /dev/loop0 | grep COMPRESS_ZSTD || error "no incompat zstd" | |
| echo "test_dumper_super PASS" | |
| } | |
| check_restore() { | |
| rm -rf /restore | |
| mkdir /restore | |
| umount_btrfs | |
| losetup_btrfs | |
| btrfs restore /dev/loop0 /restore | |
| diff /tmp/silesia /restore/silesia || error "/tmp/silesia differs" | |
| mount_btrfs | |
| diff /mnt/test/silesia /restore/silesia || error "/mnt/test/silesia" differs | |
| umount_btrfs | |
| rm -rf /restore | |
| } | |
| test_restore() { | |
| echo "test_restore" | |
| create_btrfs | |
| check_restore | |
| mount_btrfs | |
| defrag lzo /mnt/test/silesia/dickens | |
| check_restore | |
| mount_btrfs | |
| defrag zlib /mnt/test/silesia/mozilla | |
| check_restore | |
| mount_btrfs | |
| btrfs filesystem defragment /mnt/test/silesia/mr && sync | |
| # Expect compressed blocks of all types | |
| dump_tree | grep zstd > /dev/null || error "no zstd" | |
| dump_tree | grep lzo > /dev/null || error "no lzo" | |
| dump_tree | grep zlib > /dev/null || error "no zlib" | |
| dump_tree | grep "extent compression 0 (none)" > /dev/null || error "no none" | |
| check_restore | |
| echo "test_restore PASS" | |
| } | |
| test_restore | |
| test_dump_super | |
| test_dump_tree | |
| test_filesystem_defrag |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment