3 # 4 loopback devices using the md faulty level for easy
4 # fault injection on top of which is layered raidz3.
6 # zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3
7 # loop0 loop1 loop2 loop3
8 # md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty)
9 # <--------------------- raidz3 zpool -------------------->
12 FILES
="/tmp/zpool-vdev0 \
22 check_md_partitionable || die
"Error non-partitionable md devices"
24 for FILE
in ${FILES}; do
25 LODEVICE
=`unused_loop_device`
26 MDDEVICE
=`unused_md_device`
28 rm -f ${FILE} ||
exit 1
29 dd if=/dev
/zero of
=${FILE} bs
=1M count
=0 seek
=256 \
30 &>/dev
/null || die
"Error $? creating ${FILE}"
32 # Setup the loopback device on the file.
33 msg
"Creating ${LODEVICE} using ${FILE}"
34 ${LOSETUP} ${LODEVICE} ${FILE} || \
35 die
"Error $? creating ${LODEVICE} using ${FILE}"
37 LODEVICES
="${LODEVICES} ${LODEVICE}"
39 # Setup the md device on the loopback device.
40 msg
"Creating ${MDDEVICE} using ${LODEVICE}"
41 ${MDADM} --build ${MDDEVICE} --level=faulty \
42 --raid-devices=1 ${LODEVICE} &>/dev
/null || \
43 (destroy_md_devices
"${MDDEVICES}" && \
44 destroy_loop_devices
"${LODEVICES}" && \
45 die
"Error $? creating ${MDDEVICE} using ${LODEVICE}")
46 wait_udev
${MDDEVICE} 30 || \
47 (destroy_md_devices
"${MDDEVICES}" && \
48 destroy_loop_devices
"${LODEVICES}" && \
49 die
"Error udev never created ${MDDEVICE}")
51 # Create empty GPT/EFI partition table.
52 ${PARTED} --script ${MDDEVICE} mklabel gpt
53 MDDEVICES
="${MDDEVICES} ${MDDEVICE}"
56 msg
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz3 ${MDDEVICES}
57 ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz3 ${MDDEVICES} || \
58 (destroy_md_devices
"${MDDEVICES}" && \
59 destroy_loop_devices
"${LODEVICES}" && exit 1)
61 echo "$LODEVICES" >/tmp
/zpool-lo.txt
62 echo "$MDDEVICES" >/tmp
/zpool-md.txt
66 msg
${ZPOOL} destroy
${ZPOOL_NAME}
67 ${ZPOOL} destroy
${ZPOOL_NAME}
68 destroy_md_devices
"`cat /tmp/zpool-md.txt`"
69 destroy_loop_devices
"`cat /tmp/zpool-lo.txt`"
71 rm -f /tmp
/zpool-md.txt
/tmp
/zpool-lo.txt