#!/bin/bash # # This file is part of util-linux. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # TS_TOPDIR="${0%/*}/../.." TS_DESC="fsck images" . $TS_TOPDIR/functions.sh ts_init "$*" # inode contains UID and GID, use always UID=0 to get the same checksum # TODO any mkfs should use UID=0 per default (custom uid optionally) like mk2fs ts_skip_nonroot ts_check_test_command "$TS_CMD_FSCKMINIX" ts_check_test_command "$TS_HELPER_MKFS_MINIX" ts_check_test_command "$TS_CMD_HEXDUMP" # on big endian systems some of the subtests have different expected output BYTE_ORDER=$($TS_HELPER_SYSINFO byte-order) BE_EXT=$(test "$BYTE_ORDER" = "BE" && echo ".BE") export MKFS_MINIX_TEST_SECOND_SINCE_EPOCH='1438460212' check_minix_fs_type() { ts_init_subtest $1 TS_EXPECTED+=$BE_EXT img=${TS_OUTPUT}.img dd if=/dev/zero bs=1024 count=16 of=$img >/dev/null 2>&1 $TS_HELPER_MKFS_MINIX $2 $img >> $TS_OUTPUT 2>&1 echo "mkfs return value: $?" >> $TS_OUTPUT $TS_CMD_FSCKMINIX $img >> $TS_OUTPUT 2>&1 echo "fsck return value: $?" >> $TS_OUTPUT $TS_CMD_HEXDUMP -C $img >> $TS_OUTPUT 2>&1 rm -f $img ts_finalize_subtest } check_minix_fs_type 'v1c14' '-1 -n 14' check_minix_fs_type 'v1c30' '-1 -n 30' check_minix_fs_type 'v2c14' '-2 -n 14' check_minix_fs_type 'v2c30' '-2 -n 30' check_minix_fs_type 'v3c60' '-3 -n 60' bad="$TS_OUTDIR/${TS_TESTNAME}.badlist" # TODO seems that mkfs produces non-sense if badblocks are greater than device. echo -e "8\n9" > $bad # NOTE, -c with -l ignores -l. check_minix_fs_type 'check-blocks' "-l $bad -c" check_minix_fs_type 'badblocks' "-l $bad" rm -f $bad # no more big endian tests below if test "$BYTE_ORDER" = "BE"; then ts_finalize fi # NOTE this seems odd: a 2nd fsck run would again modify the FS ts_init_subtest "auto-fix" img=${TS_OUTPUT}.img cp "$TS_SELF/broken-root" $img $TS_CMD_FSCKMINIX -sav $img >> $TS_OUTPUT 2>&1 echo "fsck reports changed and uncorrected: $?" >> $TS_OUTPUT $TS_CMD_HEXDUMP -C $img >> $TS_OUTPUT 2>&1 sed -i 's/Filesystem on .* is dirty/Filesystem auto-fix is dirty/' $TS_OUTPUT ts_finalize_subtest ts_init_subtest "bug.773892" "$TS_CMD_FSCKMINIX" -f "$TS_SELF/debian.bug.773892" >>$TS_OUTPUT 2>&1 >/dev/null echo "fsck reports uncorrected: $?" >> $TS_OUTPUT ts_finalize_subtest ts_init_subtest "broken-root" "$TS_CMD_FSCKMINIX" "$TS_SELF/broken-root" > $TS_OUTPUT 2>&1 echo "fsck reports uncorrected: $?" >> $TS_OUTPUT ts_finalize_subtest ts_finalize