Add zfault zpool configurations and tests
[zfs.git] / scripts / zpool-config / scsi_debug-raidz2.sh
1 #!/bin/bash
2 #
3 # 1 scsi_debug device for fault injection and 3 loopback devices
4 # on top of which is layered raidz2.
5 #
6
7 SDSIZE=${SDSIZE:-256}
8 SDHOSTS=${SDHOSTS:-1}
9 SDTGTS=${SDTGTS:-1}
10 SDLUNS=${SDLUNS:-1}
11 LDMOD=/sbin/modprobe
12 FILES="/tmp/zpool-vdev0  \
13        /tmp/zpool-vdev1  \
14        /tmp/zpool-vdev2"
15 DEVICES=""
16
17 zpool_create() {
18         check_loop_utils
19         check_sd_utils
20
21         test `${LSMOD} | grep -c scsi_debug` -gt 0 &&                        \
22                 (echo 0 >/sys/module/scsi_debug/parameters/every_nth &&      \
23                 ${RMMOD} scsi_debug || exit 1)
24         udev_trigger
25
26         msg "${LDMOD} scsi_debug dev_size_mb=${SDSIZE} "                     \
27                 "add_host=${SDHOSTS} num_tgts=${SDTGTS} "                    \
28                 "max_luns=${SDLUNS}"
29         ${LDMOD} scsi_debug                                                  \
30                 dev_size_mb=${SDSIZE}                                        \
31                 add_host=${SDHOSTS}                                          \
32                 num_tgts=${SDTGTS}                                           \
33                 max_luns=${SDLUNS} ||                                        \
34                 die "Error $? creating scsi_debug devices"
35         udev_trigger
36
37         SDDEVICE=`${LSSCSI} | ${AWK} '/scsi_debug/ { print $6; exit }'`
38         msg "${PARTED} -s ${SDDEVICE} mklabel gpt"
39         ${PARTED} -s ${SDDEVICE} mklabel gpt ||                              \
40                 (${RMMOD} scsi_debug && die "Error $? creating gpt label")
41
42         for FILE in ${FILES}; do
43                 LODEVICE=`unused_loop_device`
44
45                 rm -f ${FILE} || exit 1
46                 dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256         \
47                         &>/dev/null || (${RMMOD} scsi_debug &&               \
48                         die "Error $? creating ${FILE}")
49
50                 # Setup the loopback device on the file.
51                 msg "Creating ${LODEVICE} using ${FILE}"
52                 ${LOSETUP} ${LODEVICE} ${FILE} || (${RMMOD} scsi_debug       \
53                         die "Error $? creating ${LODEVICE} using ${FILE}")
54
55                 DEVICES="${DEVICES} ${LODEVICE}"
56         done
57
58         DEVICES="${DEVICES} ${SDDEVICE}"
59
60         msg "${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${DEVICES}"
61         ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${DEVICES} ||     \
62                 (${RMMOD} scsi_debug && exit 1)
63 }
64
65 zpool_destroy() {
66         msg ${ZPOOL} destroy ${ZPOOL_NAME}
67         ${ZPOOL} destroy ${ZPOOL_NAME}
68
69         for FILE in ${FILES}; do
70                 LODEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:`
71                 msg "Removing ${LODEVICE} using ${FILE}"
72                 ${LOSETUP} -d ${LODEVICE} ||
73                         die "Error $? destroying ${LODEVICE} using ${FILE}"
74                 rm -f ${FILE} || exit 1
75         done
76
77         msg "${RMMOD} scsi_debug"
78         ${RMMOD} scsi_debug || die "Error $? removing scsi_debug devices"
79 }