3 # 4 loopback devices using the md faulty level for easy
4 # fault injection on top of which is layered raid0 (striped).
6 # zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3
7 # loop0 loop1 loop2 loop3
8 # md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty)
9 # <--------------------- raid0 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 # Check if the md device support partitions
52 ${BLOCKDEV} --rereadpt ${MDDEVICE} 2>/dev
/null || \
53 (destroy_md_devices
"${MDDEVICES}" && \
54 destroy_loop_devices
"${LODEVICES}" && \
55 die
"Error ${MDDEVICE} does not support partitions")
57 # Create a GPT/EFI partition table for ZFS to use.
58 ${PARTED} --script ${MDDEVICE} mklabel gpt
59 MDDEVICES
="${MDDEVICES} ${MDDEVICE}"
62 msg
${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${MDDEVICES}
63 ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} ${MDDEVICES} || \
64 (destroy_md_devices
"${MDDEVICES}" && \
65 destroy_loop_devices
"${LODEVICES}" && exit 1)
67 echo "$LODEVICES" >/tmp
/zpool-lo.txt
68 echo "$MDDEVICES" >/tmp
/zpool-md.txt
72 msg
${ZPOOL} destroy
${ZPOOL_NAME}
73 ${ZPOOL} destroy
${ZPOOL_NAME}
74 destroy_md_devices
"`cat /tmp/zpool-md.txt`"
75 destroy_loop_devices
"`cat /tmp/zpool-lo.txt`"
77 rm -f /tmp
/zpool-md.txt
/tmp
/zpool-lo.txt