Skip to content

Instantly share code, notes, and snippets.

@terrelln terrelln/btrfs-progs-test.sh Secret

Created Aug 30, 2017
Embed
What would you like to do?
# !/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
You can’t perform that action at this time.