]> git.proxmox.com Git - mirror_zfs-debian.git/blob - scripts/zpool-config/lo-faulty-raidz.sh
Linux 3.4 compat, d_make_root() replaces d_alloc_root()
[mirror_zfs-debian.git] / scripts / zpool-config / lo-faulty-raidz.sh
1 #!/bin/bash
2 #
3 # 4 loopback devices using the md faulty level for easy
4 # fault injection on top of which is layered raidz.
5 #
6 # zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3
7 # loop0 loop1 loop2 loop3
8 # md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty)
9 # <--------------------- raidz zpool --------------------->
10 #
11
12 FILES="/tmp/zpool-vdev0 \
13 /tmp/zpool-vdev1 \
14 /tmp/zpool-vdev2 \
15 /tmp/zpool-vdev3"
16 LODEVICES=""
17 MDDEVICES=""
18
19 zpool_create() {
20 check_loop_utils
21 check_md_utils
22 check_md_partitionable || die "Error non-partitionable md devices"
23
24 for FILE in ${FILES}; do
25 LODEVICE=`unused_loop_device`
26 MDDEVICE=`unused_md_device`
27
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}"
31
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}"
36
37 LODEVICES="${LODEVICES} ${LODEVICE}"
38
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}")
50
51 # Create empty GPT/EFI partition table.
52 ${PARTED} --script ${MDDEVICE} mklabel gpt
53 MDDEVICES="${MDDEVICES} ${MDDEVICE}"
54 done
55
56 msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${MDDEVICES}
57 ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${MDDEVICES} || \
58 (destroy_md_devices "${MDDEVICES}" && \
59 destroy_loop_devices "${LODEVICES}" && exit 1)
60
61 echo "$LODEVICES" >/tmp/zpool-lo.txt
62 echo "$MDDEVICES" >/tmp/zpool-md.txt
63 }
64
65 zpool_destroy() {
66 msg ${ZPOOL} destroy ${ZPOOL_NAME}
67 ${ZPOOL} destroy ${ZPOOL_NAME}
68 destroy_md_devices "`cat /tmp/zpool-md.txt`"
69 destroy_loop_devices "`cat /tmp/zpool-lo.txt`"
70
71 rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt
72 }