3 # ZFS/ZPOOL configuration test script.
5 basedir
="$(dirname $0)"
7 SCRIPT_COMMON
=common.sh
8 if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then
9 .
"${basedir}/${SCRIPT_COMMON}"
11 echo "Missing helper script ${SCRIPT_COMMON}" && exit 1
22 ZFS/ZPOOL configuration tests
27 -c Cleanup lo+file devices at start
28 -t <#> Run listed tests
29 -s <#> Skip listed tests
34 while getopts 'hvct:s:?' OPTION
; do
59 if [ $
(id
-u) != 0 ]; then
60 die
"Must run as root"
63 # Initialize the test suite
66 # Perform pre-cleanup is requested
67 if [ ${CLEANUP} ]; then
71 rm -f /tmp
/zpool.cache.
*
74 # Check if we need to skip the tests that require scsi_debug and lsscsi.
76 ${INFOMOD} scsi_debug
&>/dev
/null
&& SCSI_DEBUG
=1
78 test -f ${LSSCSI} && HAVE_LSSCSI
=1
79 if [ ${SCSI_DEBUG} -eq 0 ] ||
[ ${HAVE_LSSCSI} -eq 0 ]; then
80 echo "Skipping test 10 which requires the scsi_debug " \
81 "module and the ${LSSCSI} utility"
84 # Validate persistent zpool.cache configuration.
87 local TMP_FILE1
=`mktemp`
88 local TMP_FILE2
=`mktemp`
89 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
91 # Create a pool save its status for comparison.
92 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
93 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail
2
94 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE1} || fail
3
96 # Unload/load the module stack and verify the pool persists.
97 ${ZFS_SH} -u || fail
4
98 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
5
99 ${ZPOOL} import -c ${TMP_CACHE} ${POOL_NAME} || fail
5
100 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE2} || fail
6
101 cmp ${TMP_FILE1} ${TMP_FILE2} || fail
7
103 # Cleanup the test pool and temporary files
104 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
8
105 rm -f ${TMP_FILE1} ${TMP_FILE2} ${TMP_CACHE} || fail
9
106 ${ZFS_SH} -u || fail
10
110 run_test
1 "persistent zpool.cache"
112 # Validate ZFS disk scanning and import w/out zpool.cache configuration.
114 local POOL_NAME
=test2
115 local TMP_FILE1
=`mktemp`
116 local TMP_FILE2
=`mktemp`
117 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
119 # Create a pool save its status for comparison.
120 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
121 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail
2
122 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE1} || fail
3
124 # Unload the module stack, remove the cache file, load the module
125 # stack and attempt to probe the disks to import the pool. As
126 # a cross check verify the old pool state against the imported.
127 ${ZFS_SH} -u || fail
4
128 rm -f ${TMP_CACHE} || fail
5
129 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
6
130 ${ZPOOL} import
-d /dev
${POOL_NAME} || fail
8
131 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE2} || fail
9
132 cmp ${TMP_FILE1} ${TMP_FILE2} || fail
10
134 # Cleanup the test pool and temporary files
135 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
11
136 rm -f ${TMP_FILE1} ${TMP_FILE2} || fail
12
137 ${ZFS_SH} -u || fail
13
141 run_test
2 "scan disks for pools to import"
143 zconfig_zvol_device_stat
() {
145 local POOL_NAME
=/dev
/zvol
/$2
146 local ZVOL_NAME
=/dev
/zvol
/$3
147 local SNAP_NAME
=/dev
/zvol
/$4
148 local CLONE_NAME
=/dev
/zvol
/$5
151 # Briefly delay for udev
155 stat
${POOL_NAME} &>/dev
/null
&& let COUNT
=$COUNT+1
157 # Volume and partitions
158 stat
${ZVOL_NAME} &>/dev
/null
&& let COUNT
=$COUNT+1
159 stat
${ZVOL_NAME}-part1 &>/dev
/null
&& let COUNT
=$COUNT+1
160 stat
${ZVOL_NAME}-part2 &>/dev
/null
&& let COUNT
=$COUNT+1
162 # Snapshot with partitions
163 stat
${SNAP_NAME} &>/dev
/null
&& let COUNT
=$COUNT+1
164 stat
${SNAP_NAME}-part1 &>/dev
/null
&& let COUNT
=$COUNT+1
165 stat
${SNAP_NAME}-part2 &>/dev
/null
&& let COUNT
=$COUNT+1
167 # Clone with partitions
168 stat
${CLONE_NAME} &>/dev
/null
&& let COUNT
=$COUNT+1
169 stat
${CLONE_NAME}-part1 &>/dev
/null
&& let COUNT
=$COUNT+1
170 stat
${CLONE_NAME}-part2 &>/dev
/null
&& let COUNT
=$COUNT+1
172 if [ $EXPECT -ne $COUNT ]; then
179 # zpool import/export device check
180 # (1 volume, 2 partitions, 1 snapshot, 1 clone)
183 local ZVOL_NAME
=volume
185 local CLONE_NAME
=clone
186 local FULL_ZVOL_NAME
=${POOL_NAME}/${ZVOL_NAME}
187 local FULL_SNAP_NAME
=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME}
188 local FULL_CLONE_NAME
=${POOL_NAME}/${CLONE_NAME}
189 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
191 # Create a pool, volume, partition, snapshot, and clone.
192 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
193 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail
2
194 ${ZFS} create
-V 100M
${FULL_ZVOL_NAME} || fail
3
195 ${ZFS} set snapdev
=visible
${FULL_ZVOL_NAME} || fail
3
196 label
/dev
/zvol
/${FULL_ZVOL_NAME} msdos || fail
4
197 partition
/dev
/zvol
/${FULL_ZVOL_NAME} primary
1% 50% || fail
4
198 partition
/dev
/zvol
/${FULL_ZVOL_NAME} primary
51% -1 || fail
4
199 ${ZFS} snapshot
${FULL_SNAP_NAME} || fail
5
200 ${ZFS} clone ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
6
202 # Verify the devices were created
203 zconfig_zvol_device_stat
10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
204 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
7
207 ${ZPOOL} export ${POOL_NAME} || fail
8
209 # verify the devices were removed
210 zconfig_zvol_device_stat
0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
211 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
9
213 # Import the pool, wait 1 second for udev
214 ${ZPOOL} import
${POOL_NAME} || fail
10
216 # Verify the devices were created
217 zconfig_zvol_device_stat
10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
218 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
11
220 # Toggle the snapdev and observe snapshot device links toggled
221 ${ZFS} set snapdev
=hidden
${FULL_ZVOL_NAME} || fail
12
223 zconfig_zvol_device_stat
7 ${POOL_NAME} ${FULL_ZVOL_NAME} \
224 "invalid" ${FULL_CLONE_NAME} || fail
13
226 ${ZFS} set snapdev
=visible
${FULL_ZVOL_NAME} || fail
14
228 zconfig_zvol_device_stat
10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
229 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
15
231 # Destroy the pool and consequently the devices
232 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
16
234 # verify the devices were removed
235 zconfig_zvol_device_stat
0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
236 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
17
238 ${ZFS_SH} -u || fail
18
239 rm -f ${TMP_CACHE} || fail
19
243 run_test
3 "zpool import/export device"
245 # zpool insmod/rmmod device check (1 volume, 1 snapshot, 1 clone)
251 FULL_ZVOL_NAME
=${POOL_NAME}/${ZVOL_NAME}
252 FULL_SNAP_NAME
=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME}
253 FULL_CLONE_NAME
=${POOL_NAME}/${CLONE_NAME}
254 TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
256 # Create a pool, volume, snapshot, and clone
257 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
258 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail
2
259 ${ZFS} create
-V 100M
${FULL_ZVOL_NAME} || fail
3
260 ${ZFS} set snapdev
=visible
${FULL_ZVOL_NAME} || fail
3
261 label
/dev
/zvol
/${FULL_ZVOL_NAME} msdos || fail
4
262 partition
/dev
/zvol
/${FULL_ZVOL_NAME} primary
1% 50% || fail
4
263 partition
/dev
/zvol
/${FULL_ZVOL_NAME} primary
51% -1 || fail
4
264 ${ZFS} snapshot
${FULL_SNAP_NAME} || fail
5
265 ${ZFS} clone ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
6
267 # Verify the devices were created
268 zconfig_zvol_device_stat
10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
269 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
7
272 ${ZFS_SH} -u || fail
8
274 # Verify the devices were removed
275 zconfig_zvol_device_stat
0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
276 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
9
278 # Load the modules, list the pools to ensure they are opened
279 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
10
280 ${ZPOOL} import -c ${TMP_CACHE} ${POOL_NAME} || fail
10
281 ${ZPOOL} list
&>/dev
/null
283 # Verify the devices were created
284 zconfig_zvol_device_stat
10 ${POOL_NAME} ${FULL_ZVOL_NAME} \
285 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
11
287 # Destroy the pool and consequently the devices
288 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
12
290 # Verify the devices were removed
291 zconfig_zvol_device_stat
0 ${POOL_NAME} ${FULL_ZVOL_NAME} \
292 ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
13
294 ${ZFS_SH} -u || fail
14
295 rm -f ${TMP_CACHE} || fail
15
299 run_test
4 "zpool insmod/rmmod device"
301 # ZVOL volume sanity check
305 local FULL_NAME
=${POOL_NAME}/${ZVOL_NAME}
306 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
308 # Create a pool and volume.
309 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
310 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raid0 || fail
2
311 ${ZFS} create
-V 800M
${FULL_NAME} || fail
3
312 label
/dev
/zvol
/${FULL_NAME} msdos || fail
4
313 partition
/dev
/zvol
/${FULL_NAME} primary
1 -1 || fail
4
314 format
/dev
/zvol
/${FULL_NAME}-part1 ext2 || fail
5
316 # Mount the ext2 filesystem and copy some data to it.
317 mkdir
-p /tmp
/${ZVOL_NAME}-part1 || fail
6
318 mount
/dev
/zvol
/${FULL_NAME}-part1 /tmp
/${ZVOL_NAME}-part1 || fail
7
319 cp -RL ${SRC_DIR} /tmp
/${ZVOL_NAME}-part1 || fail
8
322 # Verify the copied files match the original files.
323 diff -ur ${SRC_DIR} /tmp/${ZVOL_NAME}-part1/${SRC_DIR##*/} \
324 &>/dev
/null || fail
9
326 # Remove the files, umount, destroy the volume and pool.
327 rm -Rf /tmp
/${ZVOL_NAME}-part1/${SRC_DIR##*/} || fail
10
328 umount
/tmp
/${ZVOL_NAME}-part1 || fail
11
329 rmdir /tmp
/${ZVOL_NAME}-part1 || fail
12
331 ${ZFS} destroy
${FULL_NAME} || fail
13
332 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
14
333 ${ZFS_SH} -u || fail
15
334 rm -f ${TMP_CACHE} || fail
16
338 run_test
5 "zvol+ext2 volume"
340 # ZVOL snapshot sanity check
344 local SNAP_NAME
=pristine
345 local FULL_ZVOL_NAME
=${POOL_NAME}/${ZVOL_NAME}
346 local FULL_SNAP_NAME
=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME}
347 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
349 # Create a pool and volume.
350 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
351 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raid0 || fail
2
352 ${ZFS} create
-V 800M
${FULL_ZVOL_NAME} || fail
3
353 ${ZFS} set snapdev
=visible
${FULL_ZVOL_NAME} || fail
3
354 label
/dev
/zvol
/${FULL_ZVOL_NAME} msdos || fail
4
355 partition
/dev
/zvol
/${FULL_ZVOL_NAME} primary
1 -1 || fail
4
356 format
/dev
/zvol
/${FULL_ZVOL_NAME}-part1 ext2 || fail
5
358 # Mount the ext2 filesystem and copy some data to it.
359 mkdir
-p /tmp
/${ZVOL_NAME}-part1 || fail
6
360 mount
/dev
/zvol
/${FULL_ZVOL_NAME}-part1 /tmp
/${ZVOL_NAME}-part1 \
363 # Snapshot the pristine ext2 filesystem and mount it read-only.
364 ${ZFS} snapshot
${FULL_SNAP_NAME} || fail
8
365 wait_udev
/dev
/zvol
/${FULL_SNAP_NAME}-part1 30 || fail
8
366 mkdir
-p /tmp
/${SNAP_NAME}-part1 || fail
9
367 mount
/dev
/zvol
/${FULL_SNAP_NAME}-part1 /tmp
/${SNAP_NAME}-part1 \
368 &>/dev
/null || fail
10
370 # Copy to original volume
371 cp -RL ${SRC_DIR} /tmp
/${ZVOL_NAME}-part1 || fail
11
374 # Verify the copied files match the original files,
375 # and the copied files do NOT appear in the snapshot.
376 diff -ur ${SRC_DIR} /tmp/${ZVOL_NAME}-part1/${SRC_DIR##*/} \
377 &>/dev
/null || fail
12
378 diff -ur ${SRC_DIR} /tmp/${SNAP_NAME}-part1/${SRC_DIR##*/} \
379 &>/dev
/null
&& fail
13
381 # umount, destroy the snapshot, volume, and pool.
382 umount
/tmp
/${SNAP_NAME}-part1 || fail
14
383 rmdir /tmp
/${SNAP_NAME}-part1 || fail
15
384 ${ZFS} destroy
${FULL_SNAP_NAME} || fail
16
386 umount
/tmp
/${ZVOL_NAME}-part1 || fail
17
387 rmdir /tmp
/${ZVOL_NAME}-part1 || fail
18
388 ${ZFS} destroy
${FULL_ZVOL_NAME} || fail
19
390 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
20
391 ${ZFS_SH} -u || fail
21
392 rm -f ${TMP_CACHE} || fail
22
396 run_test
6 "zvol+ext2 snapshot"
398 # ZVOL clone sanity check
402 local SNAP_NAME
=pristine
403 local CLONE_NAME
=clone
404 local FULL_ZVOL_NAME
=${POOL_NAME}/${ZVOL_NAME}
405 local FULL_SNAP_NAME
=${POOL_NAME}/${ZVOL_NAME}@${SNAP_NAME}
406 local FULL_CLONE_NAME
=${POOL_NAME}/${CLONE_NAME}
407 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
409 # Create a pool and volume.
410 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
411 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail
2
412 ${ZFS} create
-V 300M
${FULL_ZVOL_NAME} || fail
3
413 ${ZFS} set snapdev
=visible
${FULL_ZVOL_NAME} || fail
3
414 label
/dev
/zvol
/${FULL_ZVOL_NAME} msdos || fail
4
415 partition
/dev
/zvol
/${FULL_ZVOL_NAME} primary
1 -1 || fail
4
416 format
/dev
/zvol
/${FULL_ZVOL_NAME}-part1 ext2 || fail
5
418 # Snapshot the pristine ext2 filesystem.
419 ${ZFS} snapshot
${FULL_SNAP_NAME} || fail
6
420 wait_udev
/dev
/zvol
/${FULL_SNAP_NAME}-part1 30 || fail
7
422 # Mount the ext2 filesystem so some data can be copied to it.
423 mkdir
-p /tmp
/${ZVOL_NAME}-part1 || fail
7
424 mount
/dev
/zvol
/${FULL_ZVOL_NAME}-part1 \
425 /tmp
/${ZVOL_NAME}-part1 || fail
8
427 # Mount the pristine ext2 snapshot.
428 mkdir
-p /tmp
/${SNAP_NAME}-part1 || fail
9
429 mount
/dev
/zvol
/${FULL_SNAP_NAME}-part1 \
430 /tmp
/${SNAP_NAME}-part1 &>/dev
/null || fail
10
432 # Copy to original volume.
433 cp -RL ${SRC_DIR} /tmp
/${ZVOL_NAME}-part1 || fail
11
436 # Verify the copied files match the original files,
437 # and the copied files do NOT appear in the snapshot.
438 diff -ur ${SRC_DIR} /tmp/${ZVOL_NAME}-part1/${SRC_DIR##*/} \
439 &>/dev
/null || fail
12
440 diff -ur ${SRC_DIR} /tmp/${SNAP_NAME}-part1/${SRC_DIR##*/} \
441 &>/dev
/null
&& fail
13
443 # Clone from the original pristine snapshot
444 ${ZFS} clone ${FULL_SNAP_NAME} ${FULL_CLONE_NAME} || fail
14
445 wait_udev
/dev
/zvol
/${FULL_CLONE_NAME}-part1 30 || fail
14
446 mkdir
-p /tmp
/${CLONE_NAME}-part1 || fail
15
447 mount
/dev
/zvol
/${FULL_CLONE_NAME}-part1 \
448 /tmp
/${CLONE_NAME}-part1 || fail
16
450 # Verify the clone matches the pristine snapshot,
451 # and the files copied to the original volume are NOT there.
452 diff -ur /tmp
/${SNAP_NAME}-part1 /tmp
/${CLONE_NAME}-part1 \
453 &>/dev
/null || fail
17
454 diff -ur /tmp
/${ZVOL_NAME}-part1 /tmp
/${CLONE_NAME}-part1 \
455 &>/dev
/null
&& fail
18
457 # Copy to cloned volume.
458 cp -RL ${SRC_DIR} /tmp
/${CLONE_NAME}-part1 || fail
19
461 # Verify the clone matches the modified original volume.
462 diff -ur /tmp
/${ZVOL_NAME}-part1 /tmp
/${CLONE_NAME}-part1 \
463 &>/dev
/null || fail
20
465 # umount, destroy the snapshot, volume, and pool.
466 umount
/tmp
/${CLONE_NAME}-part1 || fail
21
467 rmdir /tmp
/${CLONE_NAME}-part1 || fail
22
468 ${ZFS} destroy
${FULL_CLONE_NAME} || fail
23
470 umount
/tmp
/${SNAP_NAME}-part1 || fail
24
471 rmdir /tmp
/${SNAP_NAME}-part1 || fail
25
472 ${ZFS} destroy
${FULL_SNAP_NAME} || fail
26
474 umount
/tmp
/${ZVOL_NAME}-part1 || fail
27
475 rmdir /tmp
/${ZVOL_NAME}-part1 || fail
28
476 ${ZFS} destroy
${FULL_ZVOL_NAME} || fail
29
478 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
30
479 ${ZFS_SH} -u || fail
31
480 rm -f ${TMP_CACHE} || fail
32
484 run_test
7 "zvol+ext2 clone"
486 # Send/Receive sanity check
488 local POOL_NAME1
=tank1
489 local POOL_NAME2
=tank2
492 local FULL_ZVOL_NAME1
=${POOL_NAME1}/${ZVOL_NAME}
493 local FULL_ZVOL_NAME2
=${POOL_NAME2}/${ZVOL_NAME}
494 local FULL_SNAP_NAME1
=${POOL_NAME1}/${ZVOL_NAME}@${SNAP_NAME}
495 local FULL_SNAP_NAME2
=${POOL_NAME2}/${ZVOL_NAME}@${SNAP_NAME}
496 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
498 # Create two pools and a volume
499 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
500 ${ZPOOL_CREATE_SH} -p ${POOL_NAME1} -c lo-raidz2 || fail
2
501 ${ZPOOL_CREATE_SH} -p ${POOL_NAME2} -c lo-raidz2 || fail
2
502 ${ZFS} create
-V 300M
${FULL_ZVOL_NAME1} || fail
3
503 ${ZFS} set snapdev
=visible
${FULL_ZVOL_NAME1} || fail
3
504 label
/dev
/zvol
/${FULL_ZVOL_NAME1} msdos || fail
4
505 partition
/dev
/zvol
/${FULL_ZVOL_NAME1} primary
1 -1 || fail
4
506 format
/dev
/zvol
/${FULL_ZVOL_NAME1}-part1 ext2 || fail
5
508 # Mount the ext2 filesystem and copy some data to it.
509 mkdir
-p /tmp
/${FULL_ZVOL_NAME1}-part1 || fail
6
510 mount
/dev
/zvol
/${FULL_ZVOL_NAME1}-part1 \
511 /tmp
/${FULL_ZVOL_NAME1}-part1 || fail
7
512 cp -RL ${SRC_DIR} /tmp
/${FULL_ZVOL_NAME1}-part1 || fail
8
514 # Unmount, snapshot, mount the ext2 filesystem so it may be sent.
515 # We only unmount to ensure the ext2 filesystem is clean.
516 umount
/tmp
/${FULL_ZVOL_NAME1}-part1 || fail
9
517 ${ZFS} snapshot
${FULL_SNAP_NAME1} || fail
10
518 wait_udev
/dev
/zvol
/${FULL_SNAP_NAME1} 30 || fail
10
519 mount
/dev
/zvol
/${FULL_ZVOL_NAME1}-part1 \
520 /tmp
/${FULL_ZVOL_NAME1}-part1 ||
11
522 # Send/receive the snapshot from POOL_NAME1 to POOL_NAME2
523 (${ZFS} send
${FULL_SNAP_NAME1} | \
524 ${ZFS} receive
${FULL_ZVOL_NAME2}) || fail
12
525 wait_udev
/dev
/zvol
/${FULL_ZVOL_NAME2}-part1 30 || fail
12
527 # Mount the sent ext2 filesystem.
528 mkdir
-p /tmp
/${FULL_ZVOL_NAME2}-part1 || fail
13
529 mount
/dev
/zvol
/${FULL_ZVOL_NAME2}-part1 \
530 /tmp
/${FULL_ZVOL_NAME2}-part1 || fail
14
532 # Verify the contents of the volumes match
533 diff -ur /tmp
/${FULL_ZVOL_NAME1}-part1 /tmp
/${FULL_ZVOL_NAME2}-part1 \
534 &>/dev
/null || fail
15
536 # Umount, destroy the volume and pool.
537 umount
/tmp
/${FULL_ZVOL_NAME1}-part1 || fail
16
538 umount
/tmp
/${FULL_ZVOL_NAME2}-part1 || fail
17
539 rmdir /tmp
/${FULL_ZVOL_NAME1}-part1 || fail
18
540 rmdir /tmp
/${FULL_ZVOL_NAME2}-part1 || fail
19
541 rmdir /tmp
/${POOL_NAME1} || fail
20
542 rmdir /tmp
/${POOL_NAME2} || fail
21
544 ${ZFS} destroy
${FULL_SNAP_NAME1} || fail
22
545 ${ZFS} destroy
${FULL_SNAP_NAME2} || fail
23
546 ${ZFS} destroy
${FULL_ZVOL_NAME1} || fail
24
547 ${ZFS} destroy
${FULL_ZVOL_NAME2} || fail
25
548 ${ZPOOL_CREATE_SH} -p ${POOL_NAME1} -c lo-raidz2
-d || fail
26
549 ${ZPOOL_CREATE_SH} -p ${POOL_NAME2} -c lo-raidz2
-d || fail
27
550 ${ZFS_SH} -u || fail
28
551 rm -f ${TMP_CACHE} || fail
29
555 run_test
8 "zfs send/receive"
557 # zpool event sanity check
561 local FULL_NAME
=${POOL_NAME}/${ZVOL_NAME}
562 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
563 local TMP_EVENTS
=`mktemp -p /tmp zpool.events.XXXXXXXX`
565 # Create a pool and volume.
566 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
567 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail
2
568 ${ZFS} create
-V 300M
${FULL_NAME} || fail
3
571 # Dump the events, there should be at least 5 lines.
572 ${ZPOOL} events
>${TMP_EVENTS} || fail
4
573 EVENTS
=`wc -l ${TMP_EVENTS} | cut -f1 -d' '`
574 [ $EVENTS -lt 5 ] && fail
5
576 # Clear the events and ensure there are none.
577 ${ZPOOL} events
-c >/dev
/null || fail
6
578 ${ZPOOL} events
>${TMP_EVENTS} || fail
7
579 EVENTS
=`wc -l ${TMP_EVENTS} | cut -f1 -d' '`
580 [ $EVENTS -gt 1 ] && fail
8
582 ${ZFS} destroy
${FULL_NAME} || fail
9
583 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
10
584 ${ZFS_SH} -u || fail
11
585 rm -f ${TMP_CACHE} || fail
12
586 rm -f ${TMP_EVENTS} || fail
13
590 run_test
9 "zpool events"
596 local TMP_FILE1
=`mktemp`
597 local TMP_FILE2
=`mktemp`
598 local TMP_FILE3
=`mktemp`
600 BASE_DEVICE
=`basename ${DEVICE}`
602 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE1}
603 ${ZPOOL} add -f ${POOL_NAME} ${TYPE} ${DEVICE} 2>/dev
/null ||
return 1
604 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE2}
605 diff ${TMP_FILE1} ${TMP_FILE2} > ${TMP_FILE3}
607 [ `wc -l ${TMP_FILE3}|${AWK} '{print $1}'` -eq 3 ] ||
return 1
609 PARENT_VDEV
=`tail -2 ${TMP_FILE3} | head -1 | ${AWK} '{print $NF}'`
612 [ "${PARENT_VDEV}" = "${TYPE}" ] ||
return 1
615 [ "${PARENT_VDEV}" = "logs" ] ||
return 1
619 if ! tail -1 ${TMP_FILE3} |
620 egrep -q "^>[[:space:]]+${BASE_DEVICE}[[:space:]]+ONLINE" ; then
623 rm -f ${TMP_FILE1} ${TMP_FILE2} ${TMP_FILE3}
628 # zpool add and remove sanity check
631 local TMP_CACHE
=`mktemp -p /tmp zpool.cache.XXXXXXXX`
632 local TMP_FILE1
=`mktemp`
633 local TMP_FILE2
=`mktemp`
635 if [ ${SCSI_DEBUG} -eq 0 ] ||
[ ${HAVE_LSSCSI} -eq 0 ] ; then
640 test `${LSMOD} | grep -c scsi_debug` -gt 0 && \
641 (${RMMOD} scsi_debug ||
exit 1)
643 /sbin
/modprobe scsi_debug dev_size_mb
=128 ||
644 die
"Error $? creating scsi_debug device"
647 SDDEVICE
=`${LSSCSI}|${AWK} '/scsi_debug/ { print $6; exit }'`
648 BASE_SDDEVICE
=`basename $SDDEVICE`
651 ${ZFS_SH} zfs
="spa_config_path=${TMP_CACHE}" || fail
1
652 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2 || fail
2
653 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE1} || fail
3
655 # Add and remove a cache vdev by full path
656 zconfig_add_vdev
${POOL_NAME} cache
${SDDEVICE} || fail
4
657 ${ZPOOL} remove ${POOL_NAME} ${SDDEVICE} || fail
5
658 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE2} || fail
6
659 cmp ${TMP_FILE1} ${TMP_FILE2} || fail
7
662 # Add and remove a cache vdev by shorthand path
663 zconfig_add_vdev
${POOL_NAME} cache
${BASE_SDDEVICE} || fail
8
664 ${ZPOOL} remove ${POOL_NAME} ${BASE_SDDEVICE} || fail
9
665 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE2} || fail
10
666 cmp ${TMP_FILE1} ${TMP_FILE2} || fail
11
669 # Add and remove a log vdev
670 zconfig_add_vdev
${POOL_NAME} log
${BASE_SDDEVICE} || fail
12
671 ${ZPOOL} remove ${POOL_NAME} ${BASE_SDDEVICE} || fail
13
672 ${ZPOOL} status ${POOL_NAME} >${TMP_FILE2} || fail
14
673 cmp ${TMP_FILE1} ${TMP_FILE2} || fail
15
675 ${ZPOOL_CREATE_SH} -p ${POOL_NAME} -c lo-raidz2
-d || fail
16
676 ${ZFS_SH} -u || fail
17
677 ${RMMOD} scsi_debug || fail
18
679 rm -f ${TMP_FILE1} ${TMP_FILE2} ${TMP_CACHE} || fail
19
683 run_test
10 "zpool add/remove vdev"