]>
git.proxmox.com Git - mirror_zfs.git/blob - tests/zfs-tests/tests/functional/cli_root/zpool_import/zpool_import_missing_003_pos.ksh
7f2d4f4a3010669f6b9bea490a2d0ea53cafc3c9
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.
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.
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]
24 # Copyright 2007 Sun Microsystems, Inc. All rights reserved.
25 # Use is subject to license terms.
29 # Copyright (c) 2012 by Delphix. All rights reserved.
32 .
$STF_SUITE/include
/libtest.shlib
33 .
$STF_SUITE/tests
/functional
/cli_root
/zfs_mount
/zfs_mount.kshlib
34 .
$STF_SUITE/tests
/functional
/cli_root
/zpool_import
/zpool_import.cfg
38 # Once a pool has been exported, but one or more devices are
39 # overlapped with other exported pool, import should handle
40 # this kind of situation properly.
43 # 1. Repeat 1-3, create two test pools upon device files separately.
44 # These two pools should have one or more devices are overlapped.
45 # using the various combinations.
49 # 2. Create necessary filesystem and test files.
50 # 3. Export the test pool.
51 # 4. Verify 'zpool import -d' with these two pools will have results
53 # - Regular, report error while any number of devices failing.
54 # - Mirror could withstand (N-1) devices failing
55 # before data integrity is compromised
56 # - Raidz could withstand one devices failing
57 # before data integrity is compromised
60 verify_runnable
"global"
62 set -A vdevs
"" "mirror" "raidz"
77 log_must poolexists
$pool
79 myhealth
=$
($ZPOOL list
-H -o health
$pool)
81 [[ $myhealth == $health ]] || \
82 log_fail
"$pool: Incorrect health ($myhealth), " \
85 log_must ismounted
$pool/$fs
87 mymtpt
=$
(get_prop mountpoint
$pool/$fs)
88 [[ $mymtpt == $mtpt ]] || \
89 log_fail
"$pool/$fs: Incorrect mountpoint ($mymtpt), " \
92 [[ ! -e $mtpt/$file ]] && \
93 log_fail
"$mtpt/$file missing after import."
95 checksum2
=$
($SUM $mymtpt/$file |
$AWK '{print $1}')
96 [[ "$checksum1" != "$checksum2" ]] && \
97 log_fail
"Checksums differ ($checksum1 != $checksum2)"
105 cd $DEVICE_DIR || log_fail
"Unable change directory to $DEVICE_DIR"
107 for pool
in $TESTPOOL1 $TESTPOOL2; do
108 if poolexists
"$pool" ; then
109 cleanup_filesystem
$pool $TESTFS
114 [[ -e $DEVICE_DIR/$DEVICE_ARCHIVE ]] && \
115 log_must
$TAR xf
$DEVICE_DIR/$DEVICE_ARCHIVE
124 while (( i
< $MAX_NUM )); do
125 typeset
file=${DEVICE_DIR}/${DEVICE_FILE}$i
126 if [[ -e $file ]]; then
129 log_must
$MKFILE $FILE_SIZE $file
133 log_must
$RM -f $DEVICE_DIR/$DEVICE_ARCHIVE
134 cd $CWD || log_fail
"Unable change directory to $CWD"
138 log_onexit cleanup_all
140 log_assert
"Verify that import could handle device overlapped."
144 cd $DEVICE_DIR || log_fail
"Unable change directory to $DEVICE_DIR"
145 log_must
$TAR cf
$DEVICE_DIR/$DEVICE_ARCHIVE ${DEVICE_FILE}*
147 checksum1
=$
($SUM $MYTESTFILE |
$AWK '{print $1}')
157 while (( num
< $GROUP_NUM )); do
158 vdev1
="$vdev1 ${DEVICE_DIR}/${DEVICE_FILE}$num"
162 while (( i
< ${#vdevs[*]} )); do
164 while (( j
< ${#vdevs[*]} )); do
167 log_must
$TAR xf
$DEVICE_DIR/$DEVICE_ARCHIVE
173 while (( overlap
<= $GROUP_NUM )); do
175 (( begin
= $GROUP_NUM - overlap
))
176 (( end
= 2 * $GROUP_NUM - overlap
- 1 ))
178 while (( num
<= end
)); do
179 vdev2
="$vdev2 ${DEVICE_DIR}/${DEVICE_FILE}$num"
183 setup_filesystem
"$vdev1" $TESTPOOL1 $TESTFS $TESTDIR1 \
185 log_must
$CP $MYTESTFILE $TESTDIR1/$TESTFILE0
186 log_must
$ZFS umount
$TESTDIR1
187 poolexists
$TESTPOOL1 && \
188 log_must
$ZPOOL export $TESTPOOL1
190 setup_filesystem
"$vdev2" $TESTPOOL2 $TESTFS $TESTDIR2 \
192 log_must
$CP $MYTESTFILE $TESTDIR2/$TESTFILE0
193 log_must
$ZFS umount
$TESTDIR2
194 poolexists
$TESTPOOL2 && \
195 log_must
$ZPOOL export $TESTPOOL2
198 case "${vdevs[i]}" in
199 'mirror') (( overlap
== $GROUP_NUM )) && \
202 'raidz') (( overlap
> 1 )) && \
205 '') action
=log_mustnot
209 $action $ZPOOL import
-d $DEVICE_DIR $TESTPOOL1
210 log_must
$ZPOOL import
-d $DEVICE_DIR $TESTPOOL2
212 if [[ $action == log_must
]]; then
213 verify
"$TESTPOOL1" "$TESTFS" "$TESTDIR1" \
214 "DEGRADED" "$TESTFILE0" "$checksum1"
217 verify
"$TESTPOOL2" "$TESTFS" "$TESTDIR2" \
218 "ONLINE" "$TESTFILE0" "$checksum1"
222 (( overlap
= overlap
+ 1 ))
232 log_pass
"Import could handle device overlapped."