Whamcloud - gitweb
file loop-sync-2.4.21-suse.patch was initially added on branch b1_2_smallfix.
[fs/lustre-release.git] / lustre / tests / lfscktest.sh
1 #!/bin/bash
2 set -vx
3 set -e
4
5 . ./lfscktest_config.sh
6
7 #Create mount points on target OST and MDS
8 #Create test directory 
9
10 mkdir -p $OST_MOUNTPT
11 mkdir -p $MDS_MOUNTPT
12 mkdir -p $TEST_DIR
13
14 export PATH=$E2FSCK_PATH/e2fsck:$PATH
15
16 # Create some files on the filesystem
17 for i in `seq 0 3`; do
18         mkdir -p ${MOUNT}/d$i
19         for j in `seq 0 5`; do
20                 mkdir -p  ${MOUNT}/d$i/d$j
21                 for k in `seq 1 5`; do
22                         FILE="${MOUNT}/d$i/d$j/test$k"
23                         echo "creating $FILE"
24                         dd if=/dev/zero bs=4k count=1 of=$FILE
25                 done
26         done
27 done
28 # Create Files to be modified
29
30 file_name=${TESTNAME}
31
32 for FILE in `seq -f ${TEST_DIR}/${file_name}.%g 0 40`; do
33         dd if=/dev/zero count=1 bs=64k of=$FILE || exit 1
34 done
35
36 #Create some more files
37
38 for i in `seq 21 23`; do
39         mkdir -p ${MOUNT}/d$i
40         for j in `seq 0 5`; do
41                 mkdir -p  ${MOUNT}/d$i/d$j
42                 for k in `seq 0 5`; do
43                         FILE="${MOUNT}/d$i/d$j/test$k"
44                         echo "creating $FILE"
45                         dd if=/dev/zero bs=4k count=1 of=$FILE
46                 done
47         done
48 done
49
50 # Get objids for a file on the OST
51 OST_TEST_FILE_OBJIDS=""
52 for i in `seq 0 19`; do
53         OST_TEST_FILE=${TEST_DIR}/${file_name}.$i
54         ##Get the file OBJID
55         OST_TEST_FILE_OBJID=`$LFIND -v -o $OST_UUID $OST_TEST_FILE|grep '\*$' | awk '{ print $2 }'` || exit 1
56         if [ "$OST_TEST_FILE_OBJID" ]; then
57                 echo "REMOVING OBJID $OST_TEST_FILE_OBJID on $OST_UUID from $OST_TEST_FILE"
58         fi
59         OST_TEST_FILE_OBJIDS="$OST_TEST_FILE_OBJIDS $OST_TEST_FILE_OBJID"
60 done
61
62 MDS_FILES=""
63 for i in `seq 20 39`; do
64         TEST_FILE=${TEST_DIR}/${file_name}.$i
65         echo "REMOVING MDS FILE $TEST_FILE which has info:"
66         $LFIND -v $TEST_FILE  || exit 1
67         MDS_FILES="$MDS_FILES ${TESTNAME}/${file_name}.$i"
68 done
69
70 $LCONF --cleanup ${CONFIGXML} || exit 1
71
72 # Remove objects associated with files
73 echo "removing objects: $OST_TEST_FILE_OBJIDS"
74 for i in $OST_TEST_FILE_OBJIDS; do
75         z=`expr $i % 32`
76         $DEBUGFS -w -R "rm O/0/d$z/$i" "$OSTDEV" || exit 1
77 done
78
79 mount "-o" loop $MDSDEV $MDS_MOUNTPT
80
81 #Remove files from mds
82 for i in $MDS_FILES; do
83         rm $MDS_MOUNTPT/ROOT/$i || (umount $MDS_MOUNTPT && exit 1)
84 done
85
86 #Create EAs on files so objects are referenced twice from different mds files
87 for i in `seq 40 59`; do
88         touch $MDS_MOUNTPT/ROOT/${TESTNAME}/${TESTNAME}.bad.$i
89         ${GPATH}/copy_attr $MDS_MOUNTPT/ROOT/${TESTNAME}/${TESTNAME}.$i $MDS_MOUNTPT/ROOT/${TESTNAME}/${TESTNAME}.bad.$i || (umount $MDS_MOUNTPT && exit 1) 
90         i=`expr $i + 1`
91 done
92         umount $MDS_MOUNTPT 
93         rmdir $MDS_MOUNTPT
94         rmdir $OST_MOUNTPT
95
96 # Run e2fsck to get mds and ost info
97 # a return status of 1 indicates e2fsck successfuly fixed problems found
98
99 e2fsck -d -f -y --mdsdb $GPATH/mdsdb $MDSDEV 
100 RET=$?
101 [ $RET -ne 0 -a $RET -ne 1 ] && exit 1
102 i=0
103 OSTDB_LIST=""
104 while [ $i -lt $NUM_OSTS ]; do
105         e2fsck -d -f -y --mdsdb $GPATH/mdsdb --ostdb $GPATH/ostdb-$i $TMP/ost$i-`hostname`
106         RET=$?
107         [ $RET -ne 0 -a $RET -ne 1 ] && exit 1
108         if [ -z "${OSTDB_LIST}" ]; then
109                 OSTDB_LIST=${GPATH}/ostdb-$i
110         else
111                 OSTDB_LIST=${GPATH}/ostdb-$i,${OSTDB_LIST}
112         fi
113         i=`expr $i + 1`
114 done
115
116 #Mount filesystem
117 ${LCONF} ${CONFIGXML}  || exit 1
118
119 lfsck -l --mdsdb $GPATH/mdsdb --ostdb ${OSTDB_LIST} ${MOUNT} || exit 1  
120
121 #Cleanup 
122 rm $GPATH/mdsdb
123 rm $GPATH/ostdb-*