]> git.proxmox.com Git - mirror_zfs-debian.git/blob - scripts/zpool-config/scsi_debug-raidz3.sh
Imported Upstream version 0.6.4.2
[mirror_zfs-debian.git] / scripts / zpool-config / scsi_debug-raidz3.sh
1 #!/bin/bash
2 #
3 # 1 scsi_debug device for fault injection and 3 loopback devices
4 # on top of which is layered raidz3.
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 ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz3 ${DEVICES}"
61 ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz3 ${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 }