]> git.proxmox.com Git - mirror_zfs-debian.git/blame - scripts/zpool-config/lo-faulty-raid10.sh
Imported Upstream version 0.6.4.2
[mirror_zfs-debian.git] / scripts / zpool-config / lo-faulty-raid10.sh
CommitLineData
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
12FILEDIR=${FILEDIR:-/var/tmp}
13FILES_M1=${FILES_M1:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1"}
14FILES_M2=${FILES_M2:-"$FILEDIR/file-vdev2 $FILEDIR/file-vdev3"}
15FILES="${FILES_M1} ${FILES_M2}"
0ee8118b
BB
16LODEVICES=""
17MDDEVICES=""
18MDDEVICES_M1=""
19MDDEVICES_M2=""
20
21zpool_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
77zpool_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}