]>
Commit | Line | Data |
---|---|---|
0ee8118b BB |
1 | #!/bin/bash |
2 | # | |
3 | # 4 loopback devices using the md faulty level for easy | |
4 | # fault injection on top of which is layered raid10 (mirrored). | |
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 | # <--------------------- raid10 zpool ---------------------> | |
10 | # | |
11 | ||
ea04106b AX |
12 | FILEDIR=${FILEDIR:-/var/tmp} |
13 | FILES_M1=${FILES_M1:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1"} | |
14 | FILES_M2=${FILES_M2:-"$FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} | |
15 | FILES="${FILES_M1} ${FILES_M2}" | |
0ee8118b BB |
16 | LODEVICES="" |
17 | MDDEVICES="" | |
18 | MDDEVICES_M1="" | |
19 | MDDEVICES_M2="" | |
20 | ||
21 | zpool_create() { | |
22 | local COUNT=0 | |
23 | ||
24 | check_loop_utils | |
25 | check_md_utils | |
26 | check_md_partitionable || die "Error non-partitionable md devices" | |
27 | ||
28 | for FILE in ${FILES}; do | |
29 | LODEVICE=`unused_loop_device` | |
30 | MDDEVICE=`unused_md_device` | |
31 | let COUNT=${COUNT}+1 | |
32 | ||
33 | rm -f ${FILE} || exit 1 | |
34 | dd if=/dev/zero of=${FILE} bs=1M count=0 seek=256 \ | |
35 | &>/dev/null || die "Error $? creating ${FILE}" | |
36 | ||
37 | # Setup the loopback device on the file. | |
38 | msg "Creating ${LODEVICE} using ${FILE}" | |
39 | ${LOSETUP} ${LODEVICE} ${FILE} || \ | |
40 | die "Error $? creating ${LODEVICE} using ${FILE}" | |
41 | ||
42 | LODEVICES="${LODEVICES} ${LODEVICE}" | |
43 | ||
44 | # Setup the md device on the loopback device. | |
45 | msg "Creating ${MDDEVICE} using ${LODEVICE}" | |
46 | ${MDADM} --build ${MDDEVICE} --level=faulty \ | |
47 | --raid-devices=1 ${LODEVICE} &>/dev/null || \ | |
48 | (destroy_md_devices "${MDDEVICES}" && \ | |
49 | destroy_loop_devices "${LODEVICES}" && \ | |
50 | die "Error $? creating ${MDDEVICE} using ${LODEVICE}") | |
51 | wait_udev ${MDDEVICE} 30 || \ | |
52 | (destroy_md_devices "${MDDEVICES}" && \ | |
53 | destroy_loop_devices "${LODEVICES}" && \ | |
54 | die "Error udev never created ${MDDEVICE}") | |
55 | ||
56 | # Create empty GPT/EFI partition table. | |
57 | ${PARTED} --script ${MDDEVICE} mklabel gpt | |
58 | MDDEVICES="${MDDEVICES} ${MDDEVICE}" | |
59 | if [ $((COUNT % 2)) -eq 0 ]; then | |
60 | MDDEVICES_M2="${MDDEVICES_M2} ${MDDEVICE}" | |
61 | else | |
62 | MDDEVICES_M1="${MDDEVICES_M1} ${MDDEVICE}" | |
63 | fi | |
64 | done | |
65 | ||
ea04106b | 66 | msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ |
0ee8118b | 67 | mirror ${MDDEVICES_M1} mirror ${MDDEVICES_M2} |
ea04106b | 68 | ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ |
0ee8118b BB |
69 | mirror ${MDDEVICES_M1} mirror ${MDDEVICES_M2} || \ |
70 | (destroy_md_devices "${MDDEVICES}" && \ | |
71 | destroy_loop_devices "${LODEVICES}" && exit 1) | |
72 | ||
73 | echo "$LODEVICES" >/tmp/zpool-lo.txt | |
74 | echo "$MDDEVICES" >/tmp/zpool-md.txt | |
75 | } | |
76 | ||
77 | zpool_destroy() { | |
78 | msg ${ZPOOL} destroy ${ZPOOL_NAME} | |
79 | ${ZPOOL} destroy ${ZPOOL_NAME} | |
80 | destroy_md_devices "`cat /tmp/zpool-md.txt`" | |
81 | destroy_loop_devices "`cat /tmp/zpool-lo.txt`" | |
82 | ||
83 | rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt | |
84 | } |