104 lines
3.0 KiB
Bash
Executable File
104 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# test various blockgroup profile combinations, use loop devices as block
|
|
# devices
|
|
|
|
source "$TEST_TOP/common" || exit
|
|
|
|
check_prereq mkfs.btrfs
|
|
check_prereq btrfs
|
|
|
|
setup_root_helper
|
|
setup_loopdevs 4
|
|
prepare_loopdevs
|
|
dev1=${loopdevs[1]}
|
|
|
|
test_get_info()
|
|
{
|
|
local tmp_out
|
|
|
|
tmp_out=$(_mktemp mkfs-get-info)
|
|
run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super "$dev1"
|
|
run_check $SUDO_HELPER "$TOP/btrfs" check "$dev1"
|
|
|
|
# Work around for kernel bug that will treat SINGLE and single
|
|
# device RAID0 as the same.
|
|
# Thus kernel may create new SINGLE chunks, causing extra warning
|
|
# when testing single device RAID0.
|
|
cond_wait_for_loopdevs
|
|
run_check $SUDO_HELPER mount -o ro "$dev1" "$TEST_MNT"
|
|
run_check_stdout "$TOP/btrfs" filesystem df "$TEST_MNT" > "$tmp_out"
|
|
if grep -q "Multiple block group profiles detected" "$tmp_out"; then
|
|
rm -- "$tmp_out"
|
|
_fail "temporary chunks are not properly cleaned up"
|
|
fi
|
|
rm -- "$tmp_out"
|
|
run_check $SUDO_HELPER "$TOP/btrfs" filesystem usage "$TEST_MNT"
|
|
run_check $SUDO_HELPER "$TOP/btrfs" device usage "$TEST_MNT"
|
|
run_check $SUDO_HELPER umount "$TEST_MNT"
|
|
}
|
|
test_do_mkfs()
|
|
{
|
|
run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$@"
|
|
if run_check_stdout "$TOP/btrfs" check "$dev1" | grep -iq warning; then
|
|
_fail "warnings found in check output"
|
|
fi
|
|
}
|
|
|
|
test_mkfs_single()
|
|
{
|
|
test_do_mkfs "$@" "$dev1"
|
|
test_get_info
|
|
}
|
|
test_mkfs_multi()
|
|
{
|
|
test_do_mkfs "$@" ${loopdevs[@]}
|
|
test_get_info
|
|
}
|
|
|
|
test_mkfs_single
|
|
test_mkfs_single -d single -m single
|
|
test_mkfs_single -d single -m single --mixed
|
|
test_mkfs_single -d single -m dup
|
|
test_mkfs_single -d dup -m single
|
|
test_mkfs_single -d dup -m dup
|
|
test_mkfs_single -d dup -m dup --mixed
|
|
|
|
test_mkfs_multi
|
|
test_mkfs_multi -d single -m single
|
|
test_mkfs_multi -d single -m single --mixed
|
|
test_mkfs_multi -d raid0 -m raid0
|
|
test_mkfs_multi -d raid0 -m raid0 --mixed
|
|
test_mkfs_multi -d raid1 -m raid1
|
|
test_mkfs_multi -d raid1 -m raid1 --mixed
|
|
test_mkfs_multi -d raid10 -m raid10
|
|
test_mkfs_multi -d raid10 -m raid10 --mixed
|
|
test_mkfs_multi -d raid5 -m raid5
|
|
test_mkfs_multi -d raid5 -m raid5 --mixed
|
|
test_mkfs_multi -d raid6 -m raid6
|
|
test_mkfs_multi -d raid6 -m raid6 --mixed
|
|
test_mkfs_multi -d dup -m dup
|
|
test_mkfs_multi -d dup -m dup --mixed
|
|
|
|
if [ -f "/sys/fs/btrfs/features/raid1c34" ]; then
|
|
test_mkfs_multi -d raid1c3 -m raid1c3
|
|
test_mkfs_multi -d raid1c3 -m raid1c3 --mixed
|
|
test_mkfs_multi -d raid1c4 -m raid1c4
|
|
test_mkfs_multi -d raid1c4 -m raid1c4 --mixed
|
|
else
|
|
_log "skip mount test, missing support for raid1c34"
|
|
test_do_mkfs -d raid1c3 -m raid1c3 ${loopdevs[@]}
|
|
test_do_mkfs -d raid1c4 -m raid1c4 ${loopdevs[@]}
|
|
fi
|
|
|
|
# Non-standard profile/device combinations
|
|
|
|
# Single device raid0, two device raid10 (simple mount works on older kernels too)
|
|
if check_min_kernel_version 5.13; then
|
|
test_do_mkfs -d raid0 -m raid0 "$dev1"
|
|
test_get_info
|
|
test_do_mkfs -d raid10 -m raid10 "${loopdevs[1]}" "${loopdevs[2]}"
|
|
test_get_info
|
|
fi
|
|
|
|
cleanup_loopdevs
|