mirror of
https://github.com/kdave/btrfs-progs
synced 2025-03-02 00:40:48 +00:00
There are two utilities that are required for the testsuite but not installed on systems. The path in tests must be INTERNAL_BIN. Fix this issue for below tests: * fsck-tests/013-extent-tree-rebuild * fsck-tests/037-freespacetree-repair * misc-tests/038-backup-root-corruption Issue: #198 Signed-off-by: Long An <lan@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
46 lines
1.5 KiB
Bash
Executable File
46 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Test that a corrupted filesystem will correctly handle writing of backup root
|
|
|
|
source "$TEST_TOP/common"
|
|
|
|
check_prereq mkfs.btrfs
|
|
check_prereq btrfs
|
|
check_prereq btrfs-corrupt-block
|
|
|
|
setup_root_helper
|
|
prepare_test_dev
|
|
|
|
# Create a file and unmount to commit some backup roots
|
|
run_check_mkfs_test_dev
|
|
run_check_mount_test_dev
|
|
run_check $SUDO_HELPER touch "$TEST_MNT/file"
|
|
run_check_umount_test_dev
|
|
|
|
dump_super() {
|
|
run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super -f "$TEST_DEV"
|
|
}
|
|
|
|
# Ensure currently active backup slot is the expected one (slot 3)
|
|
backup2_root_ptr=$(dump_super | grep -A1 "backup 2" | grep backup_tree_root | awk '{print $2}')
|
|
|
|
main_root_ptr=$(dump_super | awk '/^root\t/{print $2}')
|
|
|
|
[ "$backup2_root_ptr" -eq "$main_root_ptr" ] || _fail "Backup slot 2 is not in use"
|
|
|
|
run_check "$INTERNAL_BIN/btrfs-corrupt-block" -m $main_root_ptr -f generation "$TEST_DEV"
|
|
|
|
# Should fail because the root is corrupted
|
|
run_mustfail "Unexpected successful mount" \
|
|
$SUDO_HELPER mount "$TEST_DEV" "$TEST_MNT"
|
|
|
|
# Cycle mount with the backup to force rewrite of slot 3
|
|
run_check_mount_test_dev -o usebackuproot
|
|
run_check_umount_test_dev
|
|
|
|
# Since we've used backup 1 as the usable root, then backup 2 should have been
|
|
# overwritten
|
|
main_root_ptr=$(dump_super | grep root | head -n1 | awk '{print $2}')
|
|
backup2_new_root_ptr=$(dump_super | grep -A1 "backup 2" | grep backup_tree_root | awk '{print $2}')
|
|
|
|
[ "$backup2_root_ptr" -ne "$backup2_new_root_ptr" ] || _fail "Backup 2 not overwritten"
|