FSCK_OPT=-fn OUT=$test_name.log EXP=$test_dir/expect CONF=$TMPFILE.conf if [ $(uname -s) = "Darwin" ]; then # creates a 4TB filesystem echo "$test_name: $DESCRIPTION: skipped for HFS+ (no sparse files)" return 0 fi if [ $(uname -s) = "FreeBSD" ]; then # creates a 4TB filesystem echo "$test_name: $DESCRIPTION: skipped for FreeBSD (no sparse files)" return 0 fi cat > $CONF << ENDL [fs_types] hugefile = { features = extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize,^resize_inode,sparse_super2 hash_alg = half_md4 num_backup_sb = 0 packed_meta_blocks = 1 make_hugefiles = 1 inode_ratio = 4194304 hugefiles_dir = /store hugefiles_name = big-data hugefiles_digits = 0 hugefiles_size = 0 hugefiles_align = 256M num_hugefiles = 1 zero_hugefiles = false flex_bg_size = 262144 } ENDL echo "mke2fs -F -T hugefile test.img 4T" > $OUT MKE2FS_CONFIG=$CONF $MKE2FS -F -T hugefile $TMPFILE 4T >> $OUT 2>&1 rm -f $CONF # check the file system if we get this far, we succeeded... $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1 status=$? echo Exit status is $status >> $OUT echo 'debugfs -R "extents /store/big-data" test.img' >> $OUT $DEBUGFS -R "extents /store/big-data" $TMPFILE 2>&1 | tr / " " | tr -d - | awk ' BEGIN { expected_logical_start = 0; expected_physical_start = 0; } { if (NR != 1) { level = $1; total_levels = $2; if (level == total_levels) { logical_start=$5; logical_end=$6; physical_start=$7; physical_end=$8; len = $9; if (logical_end + 1 - logical_start != len) { print logical_end + 1 - logical_start, len; print "UNEXPECTED LENGTH for extent", $0; } if (physical_end + 1 - physical_start != len) { print physical_end + 1 - physical_start, len; print "UNEXPECTED LENGTH for extent", $0; } if (logical_start != expected_logical_start) { print "UNEXPECTED LOGICAL DISCONTINUITY between extents:"; print "\t", prev; print "\t", $0; } if (physical_start != expected_physical_start && expected_logical_start != 0) { print "PHYSICAL DISCONTINUITY between extents:"; print "\t", prev; print "\t", $0; } expected_logical_start = logical_end + 1; expected_physical_start = physical_end + 1; } } prev=$0; } END { print "Last logical block:", expected_logical_start-1; print "Last physical block:", expected_physical_start-1; } ' >> $OUT 2>&1 rm $TMPFILE # # Do the verification # sed -f $cmd_dir/filter.sed $OUT > $OUT.new mv $OUT.new $OUT 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 fi unset IMAGE FSCK_OPT OUT EXP CONF