From ddde6a059aa9a84cb65694488aa8f1839b361bf3 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Mon, 8 Sep 2014 16:13:35 -0700 Subject: [PATCH] tests: test how e2fsck recovers from corrupt journal superblocks Test e2fsck' ability to deal with corrupt journal superblock checksum and a bad magic. Signed-off-by: Darrick J. Wong Signed-off-by: Theodore Ts'o --- tests/j_corrupt_sb_csum/expect | 21 ++++++++++++ tests/j_corrupt_sb_csum/image.gz | Bin 0 -> 3030 bytes tests/j_corrupt_sb_csum/name | 1 + tests/j_corrupt_sb_csum/script | 51 ++++++++++++++++++++++++++++++ tests/j_corrupt_sb_magic/expect | 42 ++++++++++++++++++++++++ tests/j_corrupt_sb_magic/image.gz | Bin 0 -> 3036 bytes tests/j_corrupt_sb_magic/name | 1 + tests/j_corrupt_sb_magic/script | 51 ++++++++++++++++++++++++++++++ 8 files changed, 167 insertions(+) create mode 100644 tests/j_corrupt_sb_csum/expect create mode 100644 tests/j_corrupt_sb_csum/image.gz create mode 100644 tests/j_corrupt_sb_csum/name create mode 100644 tests/j_corrupt_sb_csum/script create mode 100644 tests/j_corrupt_sb_magic/expect create mode 100644 tests/j_corrupt_sb_magic/image.gz create mode 100644 tests/j_corrupt_sb_magic/name create mode 100644 tests/j_corrupt_sb_magic/script diff --git a/tests/j_corrupt_sb_csum/expect b/tests/j_corrupt_sb_csum/expect new file mode 100644 index 000000000..0493500ce --- /dev/null +++ b/tests/j_corrupt_sb_csum/expect @@ -0,0 +1,21 @@ +Journal superblock is corrupt. +Fix? yes + +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 12/128 files (8.3% non-contiguous), 1092/2048 blocks +Exit status is 1 +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 12/128 files (8.3% non-contiguous), 1092/2048 blocks +Exit status is 0 +debugfs: cat /a +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff --git a/tests/j_corrupt_sb_csum/image.gz b/tests/j_corrupt_sb_csum/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..ee92f6b10a68ac7bb761e645969f612af7598b8b GIT binary patch literal 3030 zc-rmJ{WIHl0KoAS*Kq8(dPr}qE&6c1*@aP*Ry>^1V!dK$Dso*$UF4x98WKc@)|rQD zJ*^^bR}tE%bu=0e3GEs+kF{Yz#KS@&BN3Mnk?&_e?5F**-?#Jn6W;Hm-)q;ZhPog8;Z2o`dCmf;P3>?Z`JIg z$L5XqejHGT1|2UAcX2K(X+C}?Jhm7^d35OEsF)7d;r8-JM45R)8ACNkANzBdp8>XU zE5l5i{99-04o=$aF3Gdb7T)$96(QtWXndbghc)f|B7vLukYq=kYkOLkfCxJk z;Y?^NRBOe(uJOFyovqdBDTz>CvBnx4!|BVR+luLwjjFSgH#=*YsEnPywWwMhwSv{{ z-JuDuX|--(=UjOfwvIm=E2>7?Pa^F>_RZ34k2}k>HRA3L#23hN#AA``#%|?l)q!%bNZZcc{m(0#B*w>~EUXtcwdPMO;*zSF`JJuH)2W4@2ssH*~q zp=`*MN`=Vhx|H=4dIupluv-Q^RY%aLK@eoBIeHJ|@4^2-9RmmS*6$gCkf|pUT;gK3 zE;HR|PhWVEnn=%wu6-T9U^(&l0&3p2>ox0w1kF*Q#D`L^he8N_l6brhtSX4sUw(!W zABMkDBFU{M4JQ};;*4m=XJZYtNVA!@-mu5(cGG~pWE8k-R>T7&%E&l9o09P{GI#e$ zd}2^PW)qTfms$<*l5M?rg69pY!LV=_A^HRi1a#4%N&QvQ`VJ5|q}inK`n{U(j3dIZ zqEGWB*Cyb*=d&Br>%)-SP49zy=lz*w)e*mz{ZMAew6j$%$-kLvC$!D&wew~EyYMD# zJwIk8c0iJp4h=7wKKH@QNYB$YX2ySUy}}Ei)M%1hj=Xvfd $EXP1 +else + EXP=$test_dir/expect +fi + +cp /dev/null $OUT + +gzip -d < $IMAGE > $TMPFILE + +$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1 +status=$? +echo Exit status is $status >> $OUT.new +sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT +rm -f $OUT.new + +$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1 +status=$? +echo Exit status is $status >> $OUT.new +sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT +rm -f $OUT.new + +echo "cat /a" > $TMPFILE.cmd +$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT +rm -f $TMPFILE.cmd + +rm -f $TMPFILE + +cmp -s $OUT $EXP +status=$? + +if [ "$status" = 0 ] ; then + echo "$test_name: $test_description: ok" + touch $test_name.ok +else + echo "$test_name: $test_description: failed" + diff $DIFF_OPTS $EXP $OUT > $test_name.failed + rm -f $test_name.tmp +fi + +unset IMAGE FSCK_OPT OUT EXP + +else #if test -x $DEBUGFS_EXE; then + echo "$test_name: $test_description: skipped" +fi diff --git a/tests/j_corrupt_sb_magic/expect b/tests/j_corrupt_sb_magic/expect new file mode 100644 index 000000000..a23303387 --- /dev/null +++ b/tests/j_corrupt_sb_magic/expect @@ -0,0 +1,42 @@ +Superblock has an invalid journal (inode 8). +Clear? yes + +*** ext3 journal has been deleted - filesystem is now ext2 only *** + +Superblock has_journal flag is clear, but a journal is present. +Clear? yes + +Pass 1: Checking inodes, blocks, and sizes +Journal inode is not in use, but contains data. Clear? yes + +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +Block bitmap differences: -(32--33) -(35--49) -(83--1089) +Fix? yes + +Free blocks count wrong for group #0 (956, counted=1980). +Fix? yes + +Free blocks count wrong (956, counted=1980). +Fix? yes + +Recreate journal? yes + +Creating journal (1024 blocks): Done. + +*** journal has been re-created - filesystem is now ext3 again *** + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 12/128 files (0.0% non-contiguous), 1092/2048 blocks +Exit status is 1 +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 12/128 files (8.3% non-contiguous), 1092/2048 blocks +Exit status is 0 +debugfs: cat /a +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff --git a/tests/j_corrupt_sb_magic/image.gz b/tests/j_corrupt_sb_magic/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..5d895e78beaf49dd8e53370b85d7a7e5ce1afe82 GIT binary patch literal 3036 zc-rmJYd4z*0KoAS-5hl6Y=_n@%E75p%_zDwby+ROn7S7^T8_DtR!TxDL|j|6?lme% z)hV6IXfYXyGPKlvLm#-jqlOlV_BaCFu*L4hc@@V}m#O}8V^#9J>AF>gR(7azpo?3Odgc~gJJYz>rQdKs z=Xl9^8vUvbIS<)M|H{P8HCrfA-ZOm2b zaVMTRV^z5;>nW&gy2JQ}`mUg4MD|^%u3JgY9ny8nAIm*vI-YbK5d6*O2B+S-sB%3{ zlP@rn4}rNgihOf}nX02$Zi@o=L9B>`Xn98!I?@ZfBsN_e*T4MJ-I+l}?`Khrhb@;% zBSl{&pALJpF-2-T=}r)+&u-{Ehe`NC5^89Ls2k0MYIB=&wykgaJTDh;Rf2_!&6v80 zBEBoiknsWbUgYc;>|UYLkg1nrB1L$nb81nCL5zi!U?QGV8lw^Vd`CcjY| zb%D_KOLXs`PD}Vi-SXtM6vA37y^%|l7?Mq`)c<%K{wN+lpMA<|6}X*uZsH8la|Bi& zyaZFxXxQFxNk(8|uD-(5F9C3Km*$Id*a$xMr{)`q6Qm3vi{XsJk3TpX!PKfsScrDQ zw=d`snu#`q5S+#X9M#$_%S@4CpM=MhF+0-1aIgtOB@)BM)tc}aIGww2=;(F3ml7+S z9&%Xk*#qWc@5Cv!-k7zfnFzWc?2t`#7ls26^tOH)gBR0+gg0id2;gSBpiQQkPgwn|zkR)xqtLlbk~Vza zu|~)3b(^QhOKbGf8hS;JKxit55`h&V2ew!aL02t2F;HYh=fuoi&+gX%oAZ>w-cSmWw^iUc+D<4iUrok=IM98-({nV>Y z*uEA{8eXTZGAmhCd$2S;S^&X9R!{yIz)qs=u**TcTL4-gTQn9n9S03Z`6?!gIODL- zQyFLc_%X!4%a}Vm $EXP1 +else + EXP=$test_dir/expect +fi + +cp /dev/null $OUT + +gzip -d < $IMAGE > $TMPFILE + +$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1 +status=$? +echo Exit status is $status >> $OUT.new +sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT +rm -f $OUT.new + +$FSCK -fy -N test_filesys $TMPFILE > $OUT.new 2>&1 +status=$? +echo Exit status is $status >> $OUT.new +sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT +rm -f $OUT.new + +echo "cat /a" > $TMPFILE.cmd +$DEBUGFS_EXE -f $TMPFILE.cmd $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT +rm -f $TMPFILE.cmd + +rm -f $TMPFILE + +cmp -s $OUT $EXP +status=$? + +if [ "$status" = 0 ] ; then + echo "$test_name: $test_description: ok" + touch $test_name.ok +else + echo "$test_name: $test_description: failed" + diff $DIFF_OPTS $EXP $OUT > $test_name.failed + rm -f $test_name.tmp +fi + +unset IMAGE FSCK_OPT OUT EXP + +else #if test -x $DEBUGFS_EXE; then + echo "$test_name: $test_description: skipped" +fi -- 2.47.3