#!/bin/bash # SPDX-License-Identifier: GPL-2.0 export NBDSRV=127.0.0.1 export NBD_SIZE=2G export _NBDS_PID=${UBLK_TMP_DIR}/nbds_pid _kill_nbdkit() { if [ -f ${_NBDS_PID} ]; then local nbds_pid=`cat ${_NBDS_PID}` kill -9 ${nbds_pid} > /dev/null 2>&1 local count=0 while [ $count -lt 32 ]; do kill -0 ${nbds_pid} > /dev/null 2>&1 [ $? -ne 0 ] && break let count++ sleep 1 done fi } _create_nbd_image() { local type=$1 local my_size=$2 local my_file=`mktemp -p ${UBLK_TMP_DIR} ublk_nbd_${type}_${my_size}_XXXXX` which nbdkit > /dev/null 2>&1 [ $? -ne 0 ] && echo "please install nbdkit package" && exit -1 if [ $type == "none" ]; then nbdkit -P ${_NBDS_PID} memory $my_size else truncate -s ${my_size} ${my_file} my_size=`stat --printf="%s" ${my_file}` local my_count=`expr ${my_size} / 1048576` dd if=/dev/zero of=$my_file bs=1M count=${my_count} oflag=direct > /dev/null 2>&1 nbdkit -P ${_NBDS_PID} file $my_file fi sleep 1 echo $my_file } _remove_nbd_image() { local file=$1 _kill_nbdkit [ -f ${_NBDS_PID} ] && rm -f ${_NBDS_PID} [ -f "$file" ] && rm -f $file }