Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- run_quiet () {
- shift
- "$@"
- }
- test_zero_corruption () {
- local disk="/dev/dm-21"
- local table_fe="0 2000000 linear $disk 0"
- local table_be1="0 8000000 linear $disk 2000000"
- local table_be2="0 4000000 linear $disk 10000000"
- local table_be3="0 4000000 linear $disk 14000000"
- dmsetup create fe <<< $table_fe
- dmsetup create be1 <<< $table_be1
- dmsetup create be2 <<< $table_be2
- dmsetup create be3 <<< $table_be3
- run_quiet "" bcachefs format \
- --error_action=panic \
- --data_replicas=2 \
- --metadata_replicas=3 \
- --group ssd /dev/mapper/fe \
- --group hdd /dev/mapper/be*
- mount -t bcachefs /dev/mapper/fe:/dev/mapper/be1:/dev/mapper/be2:/dev/mapper/be3 /mnt
- echo ssd > /sys/fs/bcachefs/*/options/foreground_target
- echo ssd > /sys/fs/bcachefs/*/options/promote_target
- echo hdd > /sys/fs/bcachefs/*/options/background_target
- pushd /mnt > /dev/null
- # Initial test
- dd if=/dev/urandom of=test0 bs=1M count=10 oflag=direct
- sha256sum test0 > test0.sha256
- sync
- # I/O error test
- dmsetup suspend be1
- dmsetup reload be1 <<< "0 8000000 error"
- dmsetup resume be1
- dd if=/dev/urandom of=test1 bs=1M count=10 oflag=direct
- sha256sum test1 > test1.sha256
- sync
- # Zero test
- dmsetup suspend be2
- dmsetup reload be2 <<< "0 4000000 zero"
- dmsetup resume be2
- dd if=/dev/urandom of=test2 bs=1M count=10 oflag=direct
- sha256sum test2 > test2.sha256
- sync
- # Second I/O error test
- dmsetup suspend be3
- dmsetup reload be3 <<< "0 4000000 error"
- dmsetup resume be3
- dd if=/dev/urandom of=test3 bs=1M count=10 oflag=direct
- sha256sum test3 > test3.sha256
- sync
- # Un-mount
- popd > /dev/null
- umount /mnt
- # Restore original tables
- dmsetup suspend be1
- dmsetup reload be1 <<< $table_be1
- dmsetup resume be1
- dmsetup suspend be2
- dmsetup reload be2 <<< $table_be2
- dmsetup resume be2
- dmsetup suspend be3
- dmsetup reload be3 <<< $table_be3
- dmsetup resume be3
- # Mount without be1 and files test0 + test0.sha256 are unreadable.
- pushd /mnt > /dev/null
- mount -t bcachefs -o degraded /dev/mapper/fe:/dev/mapper/be2:/dev/mapper/be3 /mnt
- bcachefs fs usage /mnt
- sha256sum -c *.sha256
- popd > /dev/null
- # Remove device with corruption, causes kernel bug + freeze FS: https://pastebin.com/gD3MsE5R
- bcachefs device remove /dev/mapper/be2
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement