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