Linux怎么删除虚拟硬盘,2017.05.10 qemu-nbd 全自动挂载/卸载 虚拟硬盘中所有可用分区 的 脚本...

#!/bin/sh

# 通过 qemu-nbd 实现 vhd 的挂载 ,事先需要安装 qemu-utils , name:vhd5.sh

# 需要事先 sudo apt-get install qemu-utils

# 在vhd所在目录新建名为 "v_disk.vhd文件名" 的目录

# 把 vhd 文件 虚拟到 /dev/nbdX ,并把虚拟硬盘的各分区 /dev/nbdXpY 挂载到目录 "vhd文件名.v_disk/nbdXpY"

#用法 vhd5.sh vhd文件名

#判断是否存在vhd文件

if ! [ -f "$1" ] ;then

echo 文件没找到!

exit

fi

#根据vhd文件路径和名称 确定变量 VhdPath 用于建立挂载目录 和分区

VhdPath=$(realpath "$1").v_disk

#判断虚拟硬盘文件是否已经被挂载了

if [ `df --output=target | awk -v pl="${VhdPath}" -v a=0 '$0~"^" pl "/nbd[0-9]+p[0-9]+$" {a+=1} END {print a}'` -ge 1 ] ; then

echo 不可重复挂载!

exit

fi

#找出16个nbd设备中第一个可用于虚拟 vhd 的设备 赋值给变量 x

#如果16个设备 均已被占用 ,那么 x=16

for x in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  16 ; do

zj=`df --output=source | awk -v x=${x} -v a="true" '$1~"^/dev/nbd[0-9]+p[0-9]+$" {if (substr($1,9,length(x))==x) { a="false" }} END {print a}'`

if [ "$zj" = "true" ] ; then

break

fi

done

#如果 变量 x 不等于 16 就将第一个可用的 nbd 设备 挂载 vhd 文件.

if [ $x -ne 16 ] ;then

echo 正在挂载......

echo "`realpath "$1"` ==> /dev/nbd${x}"

sudo modprobe nbd

sudo qemu-nbd -c /dev/nbd${x} "`realpath "$1"`"

#10秒内 循环判断 虚拟硬盘可用分区数量,用已明确 虚拟硬盘是否已经被挂载且有可用于挂载的分区,如果否,就卸之并退出。

#挂载需要时间,而且15秒 都不能 挂上,也就可以不用挂了。

for n in  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  ; do

echo -n .

sleep 1

px=`sudo fdisk -l /dev/nbd${x}|awk -v a=0 '$1~"^/dev/nbd[0-9]+p[0-9]+$"&&$6!~"^[5f]$"&&$6!="85" {a+=1} END {print a}'`

if [ ${px} -ge 1 ] ;then

break

fi

done

if  [ $px -eq 0 ] ;then

echo 虚拟硬盘文件不可用,或者没有可用分区!

sudo qemu-nbd -d /dev/nbd${x}

exit

else

echo 发现可用分区! $px

fi

#创建挂载目录

sudo mkdir "$VhdPath" -p

#找出虚拟硬盘的各个 可用分区并 逐一挂载。

for x in `sudo fdisk -l /dev/nbd${x}|awk '$1~"^/dev/nbd[0-9]+p[0-9]+$"&&$6!~"^[5f]$"&&$6!="85" {print substr($1,6)}'` ; do

sudo mkdir "${VhdPath}/${x}" -p

echo "/dev/${x} ==> ${VhdPath}/${x}"

#循环判断分区是否成功挂载 挂载成功就进行下一分区的挂载。

while [ `df --output=target | awk -v a=0 -v pl="${VhdPath}/${x}" '$0~"^"pl"$" {a+=1} END {print a}'` -eq 0 ] ; do

echo -n ..

sudo mount /dev/${x} "${VhdPath}/${x}"

sleep 1

done

echo .

done

else

echo 没有可用的'"qemu-nbd"'设备来挂载虚拟硬盘!

fi

echo End ....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值