Last active
May 11, 2022 01:50
-
-
Save dlitz/d25128dbc40e7b9f7578c77a3210234b to your computer and use it in GitHub Desktop.
btrfstune -m breaks btrfs scrub
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# dlitz 2022 | |
# This tests 'btrfstune -m' (change metadata_uuid) followed by 'btrfs scrub'. | |
# Apparently, changing the metadata_uuid causes btrfs scrub to spew | |
# uncorrectable errors, even on an empty filesystem. | |
# Changing the metadata_uuid back to the old value makes 'btrfs scrub' happy | |
# again. | |
set -eu | |
verbose() { | |
printf >&2 '#' | |
printf >&2 ' %q' "$@" | |
printf >&2 '\n' | |
"$@" | |
} | |
shverbose() { | |
printf >&2 '# %s\n' "$1" | |
eval "$1" | |
} | |
#verbose lsb_release -a | |
#shverbose 'dpkg -s btrfs-progs | grep ^Version' | |
verbose uname -srvmo | |
verbose mkfs.btrfs --version | |
tmp_dir=$(mktemp -d) | |
cd "$tmp_dir" | |
image="./fsimage.bin" | |
mountpoint="./mnt" | |
# create filesystem image | |
verbose truncate -s 8G "$image" | |
# Set up loop device | |
shverbose 'loopdev=$(losetup --find --show "$image" | tee /dev/fd/2)' | |
verbose mkfs.btrfs --quiet "$loopdev" | |
verbose mkdir "$mountpoint" | |
verbose mount -t btrfs "$loopdev" "$mountpoint" | |
verbose btrfs scrub start -B "$mountpoint" | |
verbose umount "$mountpoint" | |
shverbose 'old_uuid=$(blkid -o value -s UUID "$loopdev" | tee /dev/fd/2)' | |
verbose btrfstune -m "$loopdev" | |
shverbose 'new_uuid=$(blkid -o value -s UUID "$loopdev" | tee /dev/fd/2)' | |
verbose mount -t btrfs "$loopdev" "$mountpoint" | |
verbose btrfs scrub start -B "$mountpoint" || true | |
umount "$mountpoint" | |
shverbose "btrfstune -M \"\$old_uuid\" $loopdev" | |
verbose mount -t btrfs "$loopdev" "$mountpoint" | |
verbose btrfs scrub start -B "$mountpoint" || true | |
umount "$mountpoint" | |
# cleanup | |
rmdir "$mountpoint" | |
losetup -d "$loopdev" | |
rm -f "$image" | |
cd / | |
rmdir "$tmp_dir" | |
echo "# " |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# uname -srvmo | |
Linux 5.17.0-1-amd64 #1 SMP PREEMPT Debian 5.17.3-1 (2022-04-18) x86_64 GNU/Linux | |
# mkfs.btrfs --version | |
mkfs.btrfs, part of btrfs-progs v5.17 | |
# truncate -s 8G ./fsimage.bin | |
# loopdev=$(losetup --find --show "$image" | tee /dev/fd/2) | |
/dev/loop5 | |
# mkfs.btrfs --quiet /dev/loop5 | |
NOTE: several default settings have changed in version 5.15, please make sure | |
this does not affect your deployments: | |
- DUP for metadata (-m dup) | |
- enabled no-holes (-O no-holes) | |
- enabled free-space-tree (-R free-space-tree) | |
# mkdir ./mnt | |
# mount -t btrfs /dev/loop5 ./mnt | |
# btrfs scrub start -B ./mnt | |
scrub done for 3ba6ccff-a888-400a-9d89-19eed3bea7ae | |
Scrub started: Tue May 10 18:50:18 2022 | |
Status: finished | |
Duration: 0:00:00 | |
Total to scrub: 536.00MiB | |
Rate: 0.00B/s | |
Error summary: no errors found | |
# umount ./mnt | |
# old_uuid=$(blkid -o value -s UUID "$loopdev" | tee /dev/fd/2) | |
3ba6ccff-a888-400a-9d89-19eed3bea7ae | |
# btrfstune -m /dev/loop5 | |
# new_uuid=$(blkid -o value -s UUID "$loopdev" | tee /dev/fd/2) | |
2e8822a7-560e-46f1-ba57-a7ff52dd5162 | |
# mount -t btrfs /dev/loop5 ./mnt | |
# btrfs scrub start -B ./mnt | |
ERROR: there are uncorrectable errors | |
scrub done for 2e8822a7-560e-46f1-ba57-a7ff52dd5162 | |
Scrub started: Tue May 10 18:50:18 2022 | |
Status: finished | |
Duration: 0:00:00 | |
Total to scrub: 536.00MiB | |
Rate: 0.00B/s | |
Error summary: verify=18 | |
Corrected: 0 | |
Uncorrectable: 18 | |
Unverified: 0 | |
# btrfstune -M "$old_uuid" /dev/loop5 | |
# mount -t btrfs /dev/loop5 ./mnt | |
# btrfs scrub start -B ./mnt | |
scrub done for 3ba6ccff-a888-400a-9d89-19eed3bea7ae | |
Scrub started: Tue May 10 18:50:19 2022 | |
Status: finished | |
Duration: 0:00:00 | |
Total to scrub: 536.00MiB | |
Rate: 0.00B/s | |
Error summary: no errors found | |
# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment