mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	 3fd3e56cfd
			
		
	
	
		3fd3e56cfd
		
	
	
	
	
		
			
			* Add 'zfs bookmark' coverage (zfs_bookmark_cliargs) * Add OpenZFS 8166 coverage (zpool_scrub_offline_device) * Fix "busy" zfs_mount_remount failures * Fix bootfs_003_pos, bootfs_004_neg, zdb_005_pos local cleanup * Update usage of $KEEP variable, add get_all_pools() function * Enable history_008_pos and rsend_019_pos (non-32bit builders) * Enable zfs_copies_005_neg, update local cleanup * Fix zfs_send_007_pos (large_dnode + OpenZFS 8199) * Fix rollback_003_pos (use dataset name, not mountpoint, to unmount) * Update default_raidz_setup() to work properly with more than 3 disks * Use $TEST_BASE_DIR instead of hardcoded (/var)/tmp for file VDEVs * Update usage of /dev/random to /dev/urandom Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: loli10K <ezomori.nozomu@gmail.com> Issue #6086 Closes #5658 Closes #6143 Closes #6421 Closes #6627 Closes #6632
		
			
				
	
	
		
			155 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # CDDL HEADER START
 | |
| #
 | |
| # The contents of this file are subject to the terms of the
 | |
| # Common Development and Distribution License (the "License").
 | |
| # You may not use this file except in compliance with the License.
 | |
| #
 | |
| # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 | |
| # or http://www.opensolaris.org/os/licensing.
 | |
| # See the License for the specific language governing permissions
 | |
| # and limitations under the License.
 | |
| #
 | |
| # When distributing Covered Code, include this CDDL HEADER in each
 | |
| # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 | |
| # If applicable, add the following below this CDDL HEADER, with the
 | |
| # fields enclosed by brackets "[]" replaced with your own identifying
 | |
| # information: Portions Copyright [yyyy] [name of copyright owner]
 | |
| #
 | |
| # CDDL HEADER END
 | |
| #
 | |
| 
 | |
| #
 | |
| # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 | |
| # Use is subject to license terms.
 | |
| #
 | |
| 
 | |
| #
 | |
| # Copyright (c) 2013, 2016 by Delphix. All rights reserved.
 | |
| #
 | |
| 
 | |
| . $STF_SUITE/include/libtest.shlib
 | |
| 
 | |
| function cleanup
 | |
| {
 | |
| 	if datasetexists $TESTPOOL ; then
 | |
| 		log_must zpool destroy -f $TESTPOOL
 | |
| 	fi
 | |
| 	if datasetexists $TESTPOOL2 ; then
 | |
| 		log_must zpool destroy -f $TESTPOOL2
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| #
 | |
| # Try zpool status/iostat for given pool
 | |
| #
 | |
| # $1 pool
 | |
| #
 | |
| function display_status
 | |
| {
 | |
| 	typeset pool=$1
 | |
| 
 | |
| 	typeset -i ret=0
 | |
| 	zpool status -xv $pool > /dev/null 2>&1
 | |
| 	ret=$?
 | |
| 
 | |
| 	zpool iostat > /dev/null 2>&1
 | |
| 	((ret |= $?))
 | |
| 
 | |
| 	typeset mntpnt=$(get_prop mountpoint $pool)
 | |
| 	dd if=/dev/urandom of=$mntpnt/testfile.$$ &
 | |
| 	typeset pid=$!
 | |
| 
 | |
| 	zpool iostat -v 1 3 > /dev/null
 | |
| 	((ret |= $?))
 | |
| 
 | |
| 	kill -9 $pid
 | |
| 	wait
 | |
| 
 | |
| 	return $ret
 | |
| }
 | |
| 
 | |
| #
 | |
| # Verify the given cache device have correct type and status
 | |
| #
 | |
| # $1 pool name
 | |
| # $2 device name
 | |
| # $3 device status
 | |
| # $4 device type
 | |
| #
 | |
| function verify_cache_device
 | |
| {
 | |
| 	typeset pool=$1
 | |
| 	typeset device=$2
 | |
| 	typeset status=$3
 | |
| 	typeset type=$4
 | |
| 
 | |
| 	if [[ -z $pool || -z $device || -z $status ]]; then
 | |
| 		log_fail "Usage: verify_cache_device <pool> <device> " \
 | |
| 			"<status> [type]"
 | |
| 	fi
 | |
| 
 | |
| 	#
 | |
| 	# Get all the cache devices and status table like below
 | |
| 	#
 | |
| 	# mirror:/disks/d ONLINE mirror:/disks/e ONLINE stripe:/disks/f ONLINE
 | |
| 	#
 | |
| 	set -A dev_stat_tab $(zpool status -v $pool | nawk 'BEGIN {start=0} \
 | |
| 				/\tcache/ {start=1}
 | |
| 				/\tmirror/ || /\tspares/ || /^$/ {start=0}
 | |
| 				(start==1) && /\t  (\/|[a-zA-Z])/ \
 | |
| 					{print "stripe:" $1 " " $2}
 | |
| 				(start==1) && /\t    (\/|[a-zA-Z])/ \
 | |
| 					{print "mirror:" $1 " " $2}
 | |
| 				# When hotspare is replacing
 | |
| 				(start==1) && /\t      (\/|[a-zA-Z])/ \
 | |
| 					{print "mirror:" $1 " " $2}'
 | |
| 			     )
 | |
| 
 | |
| 	typeset -i i=0
 | |
| 	typeset find=0
 | |
| 	while (( i < ${#dev_stat_tab[@]} )); do
 | |
| 		typeset dev=${dev_stat_tab[$i]}
 | |
| 		typeset stat=${dev_stat_tab[((i+1))]}
 | |
| 
 | |
| 		case $dev in
 | |
| 			stripe:$device)
 | |
| 				if [[ "$type" == 'mirror' ]]; then
 | |
| 					log_note "Unexpected type: mirror"
 | |
| 					return 1
 | |
| 				else
 | |
| 					if [[ $stat != $status ]]; then
 | |
| 						log_note "Status($stat) " \
 | |
| 							"!= Expected stat($status)"
 | |
| 						return 1
 | |
| 					fi
 | |
| 					return 0
 | |
| 				fi
 | |
| 				;;
 | |
| 			mirror:$device)
 | |
| 				if [[ -z "$type" || $type == 'stripe' ]]; then
 | |
| 					log_note "Unexpected type: stripe"
 | |
| 					return 1
 | |
| 				else
 | |
| 					if [[ $stat != $status ]]; then
 | |
| 						log_note "Status($stat) " \
 | |
| 							"!= Expected stat($status)"
 | |
| 						return 1
 | |
| 					fi
 | |
| 					return 0
 | |
| 				fi
 | |
| 				;;
 | |
| 		esac
 | |
| 		((i += 2))
 | |
| 	done
 | |
| 
 | |
| 	log_note "Can not find device: $device"
 | |
| 	return 1
 | |
| }
 | |
| 
 | |
| function verify_cache_support
 | |
| {
 | |
| 	zpool upgrade -v | grep "Cache devices" > /dev/null 2>&1
 | |
| 	return $?
 | |
| }
 |