summaryrefslogtreecommitdiffstats
path: root/scripts/zpool-config/lo-faulty-raidz2.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/zpool-config/lo-faulty-raidz2.sh')
-rw-r--r--scripts/zpool-config/lo-faulty-raidz2.sh72
1 files changed, 72 insertions, 0 deletions
diff --git a/scripts/zpool-config/lo-faulty-raidz2.sh b/scripts/zpool-config/lo-faulty-raidz2.sh
new file mode 100644
index 000000000..2522fa7e7
--- /dev/null
+++ b/scripts/zpool-config/lo-faulty-raidz2.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+#
+# 4 loopback devices using the md faulty level for easy
+# fault injection on top of which is layered raidz2.
+#
+# zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3
+# loop0 loop1 loop2 loop3
+# md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty)
+# <--------------------- raidz2 zpool -------------------->
+#
+
+FILES="/tmp/zpool-vdev0 \
+ /tmp/zpool-vdev1 \
+ /tmp/zpool-vdev2 \
+ /tmp/zpool-vdev3"
+LODEVICES=""
+MDDEVICES=""
+
+zpool_create() {
+ check_loop_utils
+ check_md_utils
+ check_md_partitionable || die "Error non-partitionable md devices"
+
+ for FILE in ${FILES}; do
+ LODEVICE=`unused_loop_device`
+ MDDEVICE=`unused_md_device`
+
+ rm -f ${FILE} || exit 1
+ dd if=/dev/zero of=${FILE} bs=1M count=0 seek=256 \
+ &>/dev/null || die "Error $? creating ${FILE}"
+
+ # Setup the loopback device on the file.
+ msg "Creating ${LODEVICE} using ${FILE}"
+ ${LOSETUP} ${LODEVICE} ${FILE} || \
+ die "Error $? creating ${LODEVICE} using ${FILE}"
+
+ LODEVICES="${LODEVICES} ${LODEVICE}"
+
+ # Setup the md device on the loopback device.
+ msg "Creating ${MDDEVICE} using ${LODEVICE}"
+ ${MDADM} --build ${MDDEVICE} --level=faulty \
+ --raid-devices=1 ${LODEVICE} &>/dev/null || \
+ (destroy_md_devices "${MDDEVICES}" && \
+ destroy_loop_devices "${LODEVICES}" && \
+ die "Error $? creating ${MDDEVICE} using ${LODEVICE}")
+ wait_udev ${MDDEVICE} 30 || \
+ (destroy_md_devices "${MDDEVICES}" && \
+ destroy_loop_devices "${LODEVICES}" && \
+ die "Error udev never created ${MDDEVICE}")
+
+ # Create empty GPT/EFI partition table.
+ ${PARTED} --script ${MDDEVICE} mklabel gpt
+ MDDEVICES="${MDDEVICES} ${MDDEVICE}"
+ done
+
+ msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${MDDEVICES}
+ ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz2 ${MDDEVICES} || \
+ (destroy_md_devices "${MDDEVICES}" && \
+ destroy_loop_devices "${LODEVICES}" && exit 1)
+
+ echo "$LODEVICES" >/tmp/zpool-lo.txt
+ echo "$MDDEVICES" >/tmp/zpool-md.txt
+}
+
+zpool_destroy() {
+ msg ${ZPOOL} destroy ${ZPOOL_NAME}
+ ${ZPOOL} destroy ${ZPOOL_NAME}
+ destroy_md_devices "`cat /tmp/zpool-md.txt`"
+ destroy_loop_devices "`cat /tmp/zpool-lo.txt`"
+
+ rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt
+}