| #!/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 |
| } |