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 FILEDIR
=${FILEDIR:-/var/tmp}
13 FILES
=$
{FILES
:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \
14 $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"}
21 check_md_partitionable || die
"Error non-partitionable md devices"
23 for FILE
in ${FILES}; do
24 LODEVICE
=`unused_loop_device`
25 MDDEVICE
=`unused_md_device`
27 rm -f ${FILE} ||
exit 1
28 dd if=/dev
/zero of
=${FILE} bs
=1M count
=0 seek
=256 \
29 &>/dev
/null || die
"Error $? creating ${FILE}"
31 # Setup the loopback device on the file.
32 msg
"Creating ${LODEVICE} using ${FILE}"
33 ${LOSETUP} ${LODEVICE} ${FILE} || \
34 die
"Error $? creating ${LODEVICE} using ${FILE}"
36 LODEVICES
="${LODEVICES} ${LODEVICE}"
38 # Setup the md device on the loopback device.
39 msg
"Creating ${MDDEVICE} using ${LODEVICE}"
40 ${MDADM} --build ${MDDEVICE} --level=faulty \
41 --raid-devices=1 ${LODEVICE} &>/dev
/null || \
42 (destroy_md_devices
"${MDDEVICES}" && \
43 destroy_loop_devices
"${LODEVICES}" && \
44 die
"Error $? creating ${MDDEVICE} using ${LODEVICE}")
45 wait_udev
${MDDEVICE} 30 || \
46 (destroy_md_devices
"${MDDEVICES}" && \
47 destroy_loop_devices
"${LODEVICES}" && \
48 die
"Error udev never created ${MDDEVICE}")
50 # Check if the md device support partitions
51 ${BLOCKDEV} --rereadpt ${MDDEVICE} 2>/dev
/null || \
52 (destroy_md_devices
"${MDDEVICES}" && \
53 destroy_loop_devices
"${LODEVICES}" && \
54 die
"Error ${MDDEVICE} does not support partitions")
56 # Create a GPT/EFI partition table for ZFS to use.
57 ${PARTED} --script ${MDDEVICE} mklabel gpt
58 MDDEVICES
="${MDDEVICES} ${MDDEVICE}"
61 msg
${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${MDDEVICES}
62 ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${MDDEVICES} || \
63 (destroy_md_devices
"${MDDEVICES}" && \
64 destroy_loop_devices
"${LODEVICES}" && exit 1)
66 echo "$LODEVICES" >/tmp
/zpool-lo.txt
67 echo "$MDDEVICES" >/tmp
/zpool-md.txt
71 msg
${ZPOOL} destroy
${ZPOOL_NAME}
72 ${ZPOOL} destroy
${ZPOOL_NAME}
73 destroy_md_devices
"`cat /tmp/zpool-md.txt`"
74 destroy_loop_devices
"`cat /tmp/zpool-lo.txt`"
76 rm -f /tmp
/zpool-md.txt
/tmp
/zpool-lo.txt