]> git.proxmox.com Git - mirror_zfs-debian.git/blame - scripts/zpool-config/lo-faulty-raidz2.sh
Imported Upstream version 0.6.5.3
[mirror_zfs-debian.git] / scripts / zpool-config / lo-faulty-raidz2.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 raidz2.
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# <--------------------- raidz2 zpool -------------------->
10#
11
23d56208
AX
12FILEDIR=${FILEDIR:-/var/tmp}
13FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \
14 $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"}
0ee8118b
BB
15LODEVICES=""
16MDDEVICES=""
17
18zpool_create() {
19 check_loop_utils
20 check_md_utils
21 check_md_partitionable || die "Error non-partitionable md devices"
22
23 for FILE in ${FILES}; do
24 LODEVICE=`unused_loop_device`
25 MDDEVICE=`unused_md_device`
26
27 rm -f ${FILE} || exit 1
28 dd if=/dev/zero of=${FILE} bs=1M count=0 seek=256 \
29 &>/dev/null || die "Error $? creating ${FILE}"
30
31 # Setup the loopback device on the file.
32 msg "Creating ${LODEVICE} using ${FILE}"
33 ${LOSETUP} ${LODEVICE} ${FILE} || \
34 die "Error $? creating ${LODEVICE} using ${FILE}"
35
36 LODEVICES="${LODEVICES} ${LODEVICE}"
37
38 # Setup the md device on the loopback device.
39 msg "Creating ${MDDEVICE} using ${LODEVICE}"
40 ${MDADM} --build ${MDDEVICE} --level=faulty \
41 --raid-devices=1 ${LODEVICE} &>/dev/null || \
42 (destroy_md_devices "${MDDEVICES}" && \
43 destroy_loop_devices "${LODEVICES}" && \
44 die "Error $? creating ${MDDEVICE} using ${LODEVICE}")
45 wait_udev ${MDDEVICE} 30 || \
46 (destroy_md_devices "${MDDEVICES}" && \
47 destroy_loop_devices "${LODEVICES}" && \
48 die "Error udev never created ${MDDEVICE}")
49
50 # Create empty GPT/EFI partition table.
51 ${PARTED} --script ${MDDEVICE} mklabel gpt
52 MDDEVICES="${MDDEVICES} ${MDDEVICE}"
53 done
54
23d56208
AX
55 msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${MDDEVICES}
56 ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${MDDEVICES} || \
0ee8118b
BB
57 (destroy_md_devices "${MDDEVICES}" && \
58 destroy_loop_devices "${LODEVICES}" && exit 1)
59
60 echo "$LODEVICES" >/tmp/zpool-lo.txt
61 echo "$MDDEVICES" >/tmp/zpool-md.txt
62}
63
64zpool_destroy() {
65 msg ${ZPOOL} destroy ${ZPOOL_NAME}
66 ${ZPOOL} destroy ${ZPOOL_NAME}
67 destroy_md_devices "`cat /tmp/zpool-md.txt`"
68 destroy_loop_devices "`cat /tmp/zpool-lo.txt`"
69
70 rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt
71}