]>
Commit | Line | Data |
---|---|---|
6bb24f4d BB |
1 | #!/bin/ksh -p |
2 | # | |
3 | # CDDL HEADER START | |
4 | # | |
5 | # The contents of this file are subject to the terms of the | |
6 | # Common Development and Distribution License (the "License"). | |
7 | # You may not use this file except in compliance with the License. | |
8 | # | |
9 | # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
10 | # or http://www.opensolaris.org/os/licensing. | |
11 | # See the License for the specific language governing permissions | |
12 | # and limitations under the License. | |
13 | # | |
14 | # When distributing Covered Code, include this CDDL HEADER in each | |
15 | # file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
16 | # If applicable, add the following below this CDDL HEADER, with the | |
17 | # fields enclosed by brackets "[]" replaced with your own identifying | |
18 | # information: Portions Copyright [yyyy] [name of copyright owner] | |
19 | # | |
20 | # CDDL HEADER END | |
21 | # | |
22 | ||
23 | # | |
24 | # Copyright 2008 Sun Microsystems, Inc. All rights reserved. | |
25 | # Use is subject to license terms. | |
26 | # | |
27 | ||
d7958b4c MA |
28 | # |
29 | # Copyright (c) 2012, 2015 by Delphix. All rights reserved. | |
30 | # | |
31 | ||
6bb24f4d BB |
32 | . $STF_SUITE/include/libtest.shlib |
33 | ||
34 | # | |
35 | # DESCRIPTION: | |
36 | # | |
37 | # Pools of correct vdev types accept boot property | |
38 | # | |
39 | # STRATEGY: | |
40 | # 1. create pools of each vdev type (raid, raidz, raidz2, mirror + hotspares) | |
41 | # 2. verify we can set bootfs on each pool type according to design | |
42 | # | |
43 | ||
44 | verify_runnable "global" | |
45 | ||
46 | ||
47 | $ZPOOL set 2>&1 | $GREP bootfs > /dev/null | |
48 | if [ $? -ne 0 ] | |
49 | then | |
50 | log_unsupported "bootfs pool property not supported on this release." | |
51 | fi | |
52 | ||
53 | VDEV1=$TESTDIR/bootfs_006_pos_a.$$.dat | |
54 | VDEV2=$TESTDIR/bootfs_006_pos_b.$$.dat | |
55 | VDEV3=$TESTDIR/bootfs_006_pos_c.$$.dat | |
56 | VDEV4=$TESTDIR/bootfs_006_pos_d.$$.dat | |
57 | ||
58 | function verify_bootfs { # $POOL | |
59 | POOL=$1 | |
60 | log_must $ZFS create $POOL/$TESTFS | |
61 | ||
62 | log_must $ZPOOL set bootfs=$POOL/$TESTFS $POOL | |
63 | VAL=$($ZPOOL get bootfs $POOL | $TAIL -1 | $AWK '{print $3}' ) | |
64 | if [ $VAL != "$POOL/$TESTFS" ] | |
65 | then | |
66 | log_must $ZPOOL status -v $POOL | |
67 | log_fail \ | |
68 | "set/get failed on $POOL - expected $VAL == $POOL/$TESTFS" | |
69 | fi | |
70 | log_must $ZPOOL destroy $POOL | |
71 | } | |
72 | ||
73 | function verify_no_bootfs { # $POOL | |
74 | POOL=$1 | |
75 | log_must $ZFS create $POOL/$TESTFS | |
76 | log_mustnot $ZPOOL set bootfs=$POOL/$TESTFS $POOL | |
77 | VAL=$($ZPOOL get bootfs $POOL | $TAIL -1 | $AWK '{print $3}' ) | |
78 | if [ $VAL == "$POOL/$TESTFS" ] | |
79 | then | |
80 | log_must $ZPOOL status -v $POOL | |
81 | log_fail "set/get unexpectedly failed $VAL != $POOL/$TESTFS" | |
82 | fi | |
83 | log_must $ZPOOL destroy $POOL | |
84 | } | |
85 | ||
86 | function cleanup { | |
87 | if poolexists $TESTPOOL | |
88 | then | |
89 | log_must $ZPOOL destroy $TESTPOOL | |
90 | fi | |
91 | log_must $RM $VDEV1 $VDEV2 $VDEV3 $VDEV4 | |
92 | } | |
93 | ||
94 | log_assert "Pools of correct vdev types accept boot property" | |
95 | ||
96 | ||
97 | ||
98 | log_onexit cleanup | |
d7958b4c | 99 | log_must $MKFILE $MINVDEVSIZE $VDEV1 $VDEV2 $VDEV3 $VDEV4 |
6bb24f4d BB |
100 | |
101 | ||
102 | ## the following configurations are supported bootable pools | |
103 | ||
104 | # normal | |
105 | log_must $ZPOOL create $TESTPOOL $VDEV1 | |
106 | verify_bootfs $TESTPOOL | |
107 | ||
108 | # normal + hotspare | |
109 | log_must $ZPOOL create $TESTPOOL $VDEV1 spare $VDEV2 | |
110 | verify_bootfs $TESTPOOL | |
111 | ||
112 | # mirror | |
113 | log_must $ZPOOL create $TESTPOOL mirror $VDEV1 $VDEV2 | |
114 | verify_bootfs $TESTPOOL | |
115 | ||
116 | # mirror + hotspare | |
117 | log_must $ZPOOL create $TESTPOOL mirror $VDEV1 $VDEV2 spare $VDEV3 | |
118 | verify_bootfs $TESTPOOL | |
119 | ||
120 | ## the following configurations are not supported as bootable pools | |
121 | ||
122 | # stripe | |
123 | log_must $ZPOOL create $TESTPOOL $VDEV1 $VDEV2 | |
124 | verify_no_bootfs $TESTPOOL | |
125 | ||
126 | # stripe + hotspare | |
127 | log_must $ZPOOL create $TESTPOOL $VDEV1 $VDEV2 spare $VDEV3 | |
128 | verify_no_bootfs $TESTPOOL | |
129 | ||
130 | # raidz | |
131 | log_must $ZPOOL create $TESTPOOL raidz $VDEV1 $VDEV2 | |
132 | verify_no_bootfs $TESTPOOL | |
133 | ||
134 | # raidz + hotspare | |
135 | log_must $ZPOOL create $TESTPOOL raidz $VDEV1 $VDEV2 spare $VDEV3 | |
136 | verify_no_bootfs $TESTPOOL | |
137 | ||
138 | # raidz2 | |
139 | log_must $ZPOOL create $TESTPOOL raidz2 $VDEV1 $VDEV2 $VDEV3 | |
140 | verify_no_bootfs $TESTPOOL | |
141 | ||
142 | # raidz2 + hotspare | |
143 | log_must $ZPOOL create $TESTPOOL raidz2 $VDEV1 $VDEV2 $VDEV3 spare $VDEV4 | |
144 | verify_no_bootfs $TESTPOOL | |
145 | ||
146 | log_pass "Pools of correct vdev types accept boot property" |