Skip to contentSkip to conversation

btrfs-progs: misc-tests: Superblock corruption and recovery using backup.

PATCH Superseded Lakshmipathi.G 2 participants 3 messages Feb 16, 2017 – Apr 15, 2017 Btrfs file system

v3 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 btrfs-progs: misc-tests: Superblock corruption and recovery using backup.

Test script to recover damaged primary superblock using backup superblock.

---
 .../019-fix-superblock-corruption/test.sh          | 36 ++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100755 tests/misc-tests/019-fix-superblock-corruption/test.sh
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +36 -0
new file mode 100755
index 0000000..95815e4
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# Corrupt primary superblock and restore it using backup superblock.
+#
+
+source $TOP/tests/common
+
+check_prereq btrfs-select-super
+check_prereq btrfs
+
+setup_root_helper
+prepare_test_dev 512M
+
+FIRST_SUPERBLOCK_OFFSET=65536
+
+test_superblock_restore()
+{
+	run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $TEST_DEV
+
+	# Corrupt superblock checksum
+        dd if=/dev/zero of=$TEST_DEV seek=$FIRST_SUPERBLOCK_OFFSET bs=1 \
+        count=4  conv=notrunc &> /dev/null
+	# Run btrfs check to detect corruption
+	$TOP/btrfs check $TEST_DEV >& /dev/null && \
+		_fail "btrfs check should detect corruption"
+	# Copy backup superblock to primary
+	run_check $TOP/btrfs-select-super -s 1 $TEST_DEV
+
+	echo "Performing btrfs check" &>> $RESULTS
+	$TOP/btrfs check $TEST_DEV &>> $RESULTS
+        if [ $? -ne 0 ]; then
+		_fail "Failed to fix superblock."
+        fi
+}
+
+test_superblock_restore
Signature · 1 line
2.7.4
#1 lore raw
Quoted 3 lines · Lakshmipathi.G

Test script to recover damaged primary superblock using backup superblock.

Thanks for the test, a few comments below.

Quoted 26 lines
---
 .../019-fix-superblock-corruption/test.sh          | 36 ++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100755 tests/misc-tests/019-fix-superblock-corruption/test.sh
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +15 -0
new file mode 100755
index 0000000..95815e4
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# Corrupt primary superblock and restore it using backup superblock.
+#
+
+source $TOP/tests/common
+
+check_prereq btrfs-select-super
+check_prereq btrfs
+
+setup_root_helper
+prepare_test_dev 512M
+
+FIRST_SUPERBLOCK_OFFSET=65536
+

tests/misc-tests/019-fix-superblock-corruption/test.sh line 25

Quoted 10 lines
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +10 -0
+test_superblock_restore()
+{
+	run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $TEST_DEV
+
+	# Corrupt superblock checksum
+        dd if=/dev/zero of=$TEST_DEV seek=$FIRST_SUPERBLOCK_OFFSET bs=1 \
+        count=4  conv=notrunc &> /dev/null
+	# Run btrfs check to detect corruption
+	$TOP/btrfs check $TEST_DEV >& /dev/null && \
+		_fail "btrfs check should detect corruption"

No run_check? In general all test output is desired and should be in the test log so you can use 'run_mayfail'. Also, please keep the entier output and don't redirect it to /dev/null .

tests/misc-tests/019-fix-superblock-corruption/test.sh line 29

Quoted 4 lines
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +4 -0
+	# Copy backup superblock to primary
+	run_check $TOP/btrfs-select-super -s 1 $TEST_DEV
+
+	echo "Performing btrfs check" &>> $RESULTS

Use _log for that

tests/misc-tests/019-fix-superblock-corruption/test.sh line 30

Quoted 1 line
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +1 -0
+	$TOP/btrfs check $TEST_DEV &>> $RESULTS

Use run_check

tests/misc-tests/019-fix-superblock-corruption/test.sh line 32

Quoted 2 lines
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +2 -0
+        if [ $? -ne 0 ]; then
+		_fail "Failed to fix superblock."

And this would be unnecessary.

I've added a section to tests/README.md to describe the common coding practices. Feel free to read/update/fix. Older tests could violate the recommendations so at least new tests are in line and we'll update the rest incrementally.

#2 lore raw
Quoted 64 lines · David Sterba
Quoted 3 lines · Lakshmipathi.G

Test script to recover damaged primary superblock using backup superblock.

Thanks for the test, a few comments below.

Quoted 26 lines
---
 .../019-fix-superblock-corruption/test.sh          | 36 ++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100755 tests/misc-tests/019-fix-superblock-corruption/test.sh
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +15 -0
new file mode 100755
index 0000000..95815e4
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# Corrupt primary superblock and restore it using backup superblock.
+#
+
+source $TOP/tests/common
+
+check_prereq btrfs-select-super
+check_prereq btrfs
+
+setup_root_helper
+prepare_test_dev 512M
+
+FIRST_SUPERBLOCK_OFFSET=65536
+

tests/misc-tests/019-fix-superblock-corruption/test.sh line 25

Quoted 10 lines
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +10 -0
+test_superblock_restore()
+{
+	run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $TEST_DEV
+
+	# Corrupt superblock checksum
+        dd if=/dev/zero of=$TEST_DEV seek=$FIRST_SUPERBLOCK_OFFSET bs=1 \
+        count=4  conv=notrunc &> /dev/null
+	# Run btrfs check to detect corruption
+	$TOP/btrfs check $TEST_DEV >& /dev/null && \
+		_fail "btrfs check should detect corruption"

No run_check? In general all test output is desired and should be in the test log so you can use 'run_mayfail'. Also, please keep the entier output and don't redirect it to /dev/null .

tests/misc-tests/019-fix-superblock-corruption/test.sh line 29

Quoted 4 lines
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +4 -0
+	# Copy backup superblock to primary
+	run_check $TOP/btrfs-select-super -s 1 $TEST_DEV
+
+	echo "Performing btrfs check" &>> $RESULTS

Use _log for that

tests/misc-tests/019-fix-superblock-corruption/test.sh line 30

Quoted 1 line
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +1 -0
+	$TOP/btrfs check $TEST_DEV &>> $RESULTS

Use run_check

tests/misc-tests/019-fix-superblock-corruption/test.sh line 32

Quoted 2 lines
tests/misc-tests/019-fix-superblock-corruption/test.sh new file +2 -0
+        if [ $? -ne 0 ]; then
+		_fail "Failed to fix superblock."

And this would be unnecessary.

Quoted 4 lines

I've added a section to tests/README.md to describe the common coding practices. Feel free to read/update/fix. Older tests could violate the recommendations so at least new tests are in line and we'll update the rest incrementally.

Just sent a new patch(v4), addressing above review comments.thanks.

Cheers.
Lakshmipathi.G