Add -p switch to "zpool get"
[zfs.git] / scripts / zpios-sanity.sh
1 #!/bin/bash
2 #
3 # ZFS/ZPOOL configuration test script.
4
5 basedir="$(dirname $0)"
6
7 SCRIPT_COMMON=common.sh
8 if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then
9 . "${basedir}/${SCRIPT_COMMON}"
10 else
11 echo "Missing helper script ${SCRIPT_COMMON}" && exit 1
12 fi
13
14 PROG=zpios-sanity.sh
15 HEADER=
16 FAILS=0
17
18 usage() {
19 cat << EOF
20 USAGE:
21 $0 [hvxfc]
22
23 DESCRIPTION:
24         ZPIOS sanity tests
25
26 OPTIONS:
27         -h      Show this message
28         -v      Verbose
29         -x      Destructive hd/sd/md/dm/ram tests
30         -f      Don't prompt due to -x
31         -c      Cleanup lo+file devices at start
32
33 EOF
34 }
35
36 while getopts 'hvxfc?' OPTION; do
37         case $OPTION in
38         h)
39                 usage
40                 exit 1
41                 ;;
42         v)
43                 VERBOSE=1
44                 ;;
45         x)
46                 DANGEROUS=1
47                 ;;
48         f)
49                 FORCE=1
50                 ;;
51         c)
52                 CLEANUP=1
53                 ;;
54         ?)
55                 usage
56                 exit
57                 ;;
58         esac
59 done
60
61 if [ $(id -u) != 0 ]; then
62         die "Must run as root"
63 fi
64
65 # Initialize the test suite
66 init
67
68 # Perform pre-cleanup is requested
69 if [ ${CLEANUP} ]; then
70         ${ZFS_SH} -u
71         cleanup_md_devices
72         cleanup_loop_devices
73         rm -f /tmp/zpool.cache.*
74 fi
75
76 zpios_test() {
77         CONFIG=$1
78         TEST=$2
79         LOG=`mktemp`
80
81         ${ZPIOS_SH} -f -c ${CONFIG} -t ${TEST} &>${LOG}
82         if [ $? -ne 0 ]; then
83                 FAILS=1
84
85                 if [ ${VERBOSE} ]; then
86                         printf "FAIL:     %-13s\n" ${CONFIG}
87                         cat ${LOG}
88                 else
89                         if [ ! ${HEADER} ]; then
90                                 head -2 ${LOG}
91                                 HEADER=1
92                         fi
93
94                         printf "FAIL:     %-13s" ${CONFIG}
95                         tail -1 ${LOG}
96                 fi
97         else
98                 if [ ${VERBOSE} ]; then
99                         cat ${LOG}
100                 else
101                         if [ ! ${HEADER} ]; then
102                                 head -2 ${LOG}
103                                 HEADER=1
104                         fi
105
106                         tail -1 ${LOG}
107                 fi
108         fi
109
110         rm -f ${LOG}
111 }
112
113 if [ ${DANGEROUS} ] && [ ! ${FORCE} ]; then
114         cat << EOF
115 The -x option was passed which will result in UNRECOVERABLE DATA LOSS
116 on on the following block devices:
117
118   /dev/sd[abcd]
119   /dev/hda
120   /dev/ram0
121   /dev/md0
122   /dev/dm-0
123
124 To continue please confirm by entering YES:
125 EOF
126         read CONFIRM
127         if [ ${CONFIRM} != "YES" ] && [ ${CONFIRM} != "yes" ]; then
128                 exit 0;
129         fi
130 fi
131
132 #
133 # These configurations are all safe and pose no risk to any data on
134 # the system which runs them.  They will confine all their IO to a
135 # file in /tmp or a loopback device configured to use a file in /tmp.
136 #
137 SAFE_CONFIGS=(                                          \
138         file-raid0 file-raid10 file-raidz file-raidz2   \
139         lo-raid0 lo-raid10 lo-raidz lo-raidz2           \
140 )
141
142 #
143 # These configurations are down right dangerous.  They will attempt
144 # to use various real block devices on your system which may contain
145 # data you car about.  You are STRONGLY advised not to run this unless
146 # you are certain there is no data on the system you care about.
147 #
148 DANGEROUS_CONFIGS=(                                     \
149         hda-raid0                                       \
150         sda-raid0                                       \
151         ram0-raid0                                      \
152         md0-raid10 md0-raid5                            \
153         dm0-raid0                                       \
154 )
155
156 TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
157 ${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || die "Unable to load modules"
158
159 for CONFIG in ${SAFE_CONFIGS[*]}; do
160         zpios_test $CONFIG tiny
161 done
162
163 if [ ${DANGEROUS} ]; then
164         for CONFIG in ${DANGEROUS_CONFIGS[*]}; do
165                 zpios_test $CONFIG tiny
166         done
167 fi
168
169 ${ZFS_SH} -u
170
171 exit $FAILS