mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-10-31 13:07:54 +00:00 
			
		
		
		
	 608860b6d0
			
		
	
	
		608860b6d0
		
	
	
	
	
		
			
			Generally I don't approve of just adding an arbitrary delay to avoid a problem but in this case I'm going to let it slide. We may need to delay briefly after 'zpool destroy' returns to ensure the loopback devices are closed. If they aren't closed than losetup -d will not be able to destroy them. Unfortunately, there's no easy state the check so we'll have to make due with a simple delay.
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # 4 Device Loopback Raid-0 Configuration
 | |
| #
 | |
| 
 | |
| FILES="/tmp/zpool-vdev0  \
 | |
|        /tmp/zpool-vdev1  \
 | |
|        /tmp/zpool-vdev2  \
 | |
|        /tmp/zpool-vdev3"
 | |
| DEVICES=""
 | |
| 
 | |
| zpool_create() {
 | |
| 	check_loop_utils
 | |
| 
 | |
| 	for FILE in ${FILES}; do
 | |
| 		DEVICE=`unused_loop_device`
 | |
| 		msg "Creating ${FILE} using loopback device ${DEVICE}"
 | |
| 		rm -f ${FILE} || exit 1
 | |
| 		dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \
 | |
| 			&>/dev/null || die "Error $? creating ${FILE}"
 | |
| 		${LOSETUP} ${DEVICE} ${FILE} ||
 | |
| 			die "Error $? creating ${FILE} -> ${DEVICE} loopback"
 | |
| 		DEVICES="${DEVICES} ${DEVICE}"
 | |
| 	done
 | |
| 
 | |
| 	msg ${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${DEVICES}
 | |
| 	${ZPOOL} create ${FORCE_FLAG} ${ZPOOL_NAME} raidz ${DEVICES} || exit 1
 | |
| }
 | |
| 
 | |
| zpool_destroy() {
 | |
| 	msg ${ZPOOL} destroy ${ZPOOL_NAME}
 | |
| 	${ZPOOL} destroy ${ZPOOL_NAME}
 | |
| 
 | |
| 	# Delay to ensure device is closed before removing loop device
 | |
| 	sleep 1
 | |
| 
 | |
| 	for FILE in ${FILES}; do
 | |
| 		DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:`
 | |
| 		msg "Removing ${FILE} using loopback device ${DEVICE}"
 | |
| 		${LOSETUP} -d ${DEVICE} ||
 | |
| 			die "Error $? destroying ${FILE} -> ${DEVICE} loopback"
 | |
| 		rm -f ${FILE} || exit 1
 | |
| 	done
 | |
| }
 |