X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=scripts%2Fzpool-config%2Flo-faulty-raidz3.sh;fp=scripts%2Fzpool-config%2Flo-faulty-raidz3.sh;h=e5adaafc4a09864bf411374636f85bc7b8e3c079;hb=0ee8118bd31d1c160123d0aac9c55455706d5975;hp=0000000000000000000000000000000000000000;hpb=baa40d45cbb336765b2f89d934cd9ea690e4f7c9;p=zfs.git diff --git a/scripts/zpool-config/lo-faulty-raidz3.sh b/scripts/zpool-config/lo-faulty-raidz3.sh new file mode 100644 index 0000000..e5adaaf --- /dev/null +++ b/scripts/zpool-config/lo-faulty-raidz3.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 raidz3. +# +# zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3 +# loop0 loop1 loop2 loop3 +# md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty) +# <--------------------- raidz3 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} raidz3 ${MDDEVICES} + ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz3 ${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 +}