1 FSCK_OPT=-fn 2 OUT=$test_name.log 3 EXP=$test_dir/expect 4 CONF=$TMPFILE.conf 5 6 if [ $(uname -s) = "Darwin" ]; then 7 # creates a 4TB filesystem 8 echo "$test_name: $DESCRIPTION: skipped for HFS+ (no sparse files)" 9 return 0 10 fi 11 12 if [ $(uname -s) = "FreeBSD" ]; then 13 # creates a 4TB filesystem 14 echo "$test_name: $DESCRIPTION: skipped for FreeBSD (no sparse files)" 15 return 0 16 fi 17 18 cat > $CONF << ENDL 19 [fs_types] 20 hugefile = { 21 features = extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize,^resize_inode,sparse_super2 22 hash_alg = half_md4 23 num_backup_sb = 0 24 packed_meta_blocks = 1 25 make_hugefiles = 1 26 inode_ratio = 4194304 27 hugefiles_dir = /store 28 hugefiles_name = big-data 29 hugefiles_digits = 0 30 hugefiles_size = 0 31 hugefiles_align = 256M 32 num_hugefiles = 1 33 zero_hugefiles = false 34 flex_bg_size = 262144 35 } 36 ENDL 37 38 echo "mke2fs -F -T hugefile test.img 4T" > $OUT 39 MKE2FS_CONFIG=$CONF $MKE2FS -F -T hugefile $TMPFILE 4T >> $OUT 2>&1 40 rm -f $CONF 41 42 # check the file system if we get this far, we succeeded... 43 $FSCK $FSCK_OPT -N test_filesys $TMPFILE >> $OUT 2>&1 44 status=$? 45 echo Exit status is $status >> $OUT 46 47 echo 'debugfs -R "extents /store/big-data" test.img' >> $OUT 48 49 $DEBUGFS -R "extents /store/big-data" $TMPFILE 2>&1 | tr / " " | tr -d - | awk ' 50 BEGIN { 51 expected_logical_start = 0; 52 expected_physical_start = 0; 53 } 54 { 55 if (NR != 1) { 56 level = $1; 57 total_levels = $2; 58 59 if (level == total_levels) { 60 logical_start=$5; 61 logical_end=$6; 62 physical_start=$7; 63 physical_end=$8; 64 len = $9; 65 66 if (logical_end + 1 - logical_start != len) { 67 print logical_end + 1 - logical_start, len; 68 print "UNEXPECTED LENGTH for extent", $0; 69 } 70 if (physical_end + 1 - physical_start != len) { 71 print physical_end + 1 - physical_start, len; 72 print "UNEXPECTED LENGTH for extent", $0; 73 } 74 75 if (logical_start != expected_logical_start) { 76 print "UNEXPECTED LOGICAL DISCONTINUITY between extents:"; 77 print "\t", prev; 78 print "\t", $0; 79 } 80 if (physical_start != expected_physical_start && 81 expected_logical_start != 0) { 82 print "PHYSICAL DISCONTINUITY between extents:"; 83 print "\t", prev; 84 print "\t", $0; 85 } 86 87 expected_logical_start = logical_end + 1; 88 expected_physical_start = physical_end + 1; 89 } 90 } 91 prev=$0; 92 } 93 END { 94 print "Last logical block:", expected_logical_start-1; 95 print "Last physical block:", expected_physical_start-1; 96 } 97 ' >> $OUT 2>&1 98 99 rm $TMPFILE 100 101 # 102 # Do the verification 103 # 104 105 sed -f $cmd_dir/filter.sed $OUT > $OUT.new 106 mv $OUT.new $OUT 107 108 cmp -s $OUT $EXP 109 status=$? 110 111 if [ "$status" = 0 ] ; then 112 echo "$test_name: $test_description: ok" 113 touch $test_name.ok 114 else 115 echo "$test_name: $test_description: failed" 116 diff $DIFF_OPTS $EXP $OUT > $test_name.failed 117 fi 118 119 unset IMAGE FSCK_OPT OUT EXP CONF 120