无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6865|回复: 10
打印 上一主题 下一主题

2017.05.10 qemu-nbd 全自动挂载/卸载 虚拟硬盘中所有可用分区 的 脚本

  [复制链接]
跳转到指定楼层
1#
发表于 2017-5-10 07:58:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dos时代菜鸟 于 2017-5-10 08:38 编辑

qemu-nbd 全自动挂载/卸载 虚拟硬盘 脚本
vhd5.sh
  1. #!/bin/sh
  2. # 通过 qemu-nbd 实现 vhd 的挂载 ,事先需要安装 qemu-utils , name:vhd5.sh
  3. # 需要事先 sudo apt-get install qemu-utils
  4. # 在vhd所在目录新建名为 "v_disk.vhd文件名" 的目录
  5. # 把 vhd 文件 虚拟到 /dev/nbdX ,并把虚拟硬盘的各分区 /dev/nbdXpY 挂载到目录 "vhd文件名.v_disk/nbdXpY"

  6. #用法 vhd5.sh vhd文件名 

  7. #判断是否存在vhd文件
  8. if ! [ -f "$1" ] ;then
  9.         echo 文件没找到!
  10.         exit
  11. fi

  12. #根据vhd文件路径和名称 确定变量 VhdPath 用于建立挂载目录 和分区
  13. VhdPath=$(realpath "$1").v_disk

  14. #判断虚拟硬盘文件是否已经被挂载了
  15. 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
  16.         echo 不可重复挂载!
  17.         exit
  18. fi

  19. #找出16个nbd设备中第一个可用于虚拟 vhd 的设备 赋值给变量 x
  20. #如果16个设备 均已被占用 ,那么 x=16
  21. for x in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  16 ; do
  22.         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}'`
  23.         if [ "$zj" = "true" ] ; then
  24.                 break
  25.         fi
  26. done
  27. #如果 变量 x 不等于 16 就将第一个可用的 nbd 设备 挂载 vhd 文件.
  28. if [ $x -ne 16 ] ;then
  29.         echo 正在挂载......          
  30.         echo "`realpath "$1"` ==> /dev/nbd${x}"
  31.         sudo modprobe nbd
  32.         sudo qemu-nbd -c /dev/nbd${x} "`realpath "$1"`"
  33.         #10秒内 循环判断 虚拟硬盘可用分区数量,用已明确 虚拟硬盘是否已经被挂载且有可用于挂载的分区,如果否,就卸之并退出。
  34.         #挂载需要时间,而且15秒 都不能 挂上,也就可以不用挂了。       
  35.         for n in  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  ; do                
  36.                 echo -n .
  37.                 sleep 1
  38.                 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}'`
  39.                 if [ ${px} -ge 1 ] ;then
  40.                         break
  41.                 fi
  42.         done
  43.         if  [ $px -eq 0 ] ;then
  44.                 echo 虚拟硬盘文件不可用,或者没有可用分区!
  45.                 sudo qemu-nbd -d /dev/nbd${x}
  46.                 exit
  47.         else
  48.                 echo 发现可用分区! $px
  49.         fi

  50.         #创建挂载目录
  51.         sudo mkdir "$VhdPath" -p
  52.         #找出虚拟硬盘的各个 可用分区并 逐一挂载。
  53.         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
  54.                 sudo mkdir "${VhdPath}/${x}" -p
  55.                 echo "/dev/${x} ==> ${VhdPath}/${x}"
  56.                 #循环判断分区是否成功挂载 挂载成功就进行下一分区的挂载。               
  57.                 while [ `df --output=target | awk -v a=0 -v pl="${VhdPath}/${x}" '$0~"^"pl"$" {a+=1} END {print a}'` -eq 0 ] ; do
  58.                         echo -n ..
  59.                         sudo mount /dev/${x} "${VhdPath}/${x}"
  60.                         sleep 1
  61.                 done
  62.                 echo .
  63.         done
  64. else
  65.         echo 没有可用的'"qemu-nbd"'设备来挂载虚拟硬盘!
  66. fi
  67. echo End ....

复制代码



vhd5.png (52.27 KB, 下载次数: 21)

vhd5.png

qemu-nbd-sh.mount.5.2.zip

3.37 KB, 下载次数: 60, 下载积分: 无忧币 -2

评分

参与人数 2无忧币 +10 收起 理由
海市蜃楼 + 5 很给力!
freesoft00 + 5

查看全部评分

2#
 楼主| 发表于 2017-5-10 08:00:55 | 只看该作者
用到  awk ,正则,df,fdisk 等
还有 核心软件 qemu-nbd
回复

使用道具 举报

3#
发表于 2017-5-10 08:56:06 | 只看该作者
顶一下 , 谢谢分享   ,感谢 .
回复

使用道具 举报

4#
发表于 2017-5-10 08:59:27 | 只看该作者
转到linux了,研究bash了。

点评

没 ,只是 偶尔,看看,动动脑筋而已。  详情 回复 发表于 2017-5-10 11:10
回复

使用道具 举报

5#
 楼主| 发表于 2017-5-10 11:10:23 | 只看该作者
freesoft00 发表于 2017-5-10 08:59
转到linux了,研究bash了。

没 ,只是 偶尔,看看,动动脑筋而已。

点评

老大好久没更新软件了。  详情 回复 发表于 2017-5-10 11:28
回复

使用道具 举报

6#
发表于 2017-5-10 11:28:54 | 只看该作者
dos时代菜鸟 发表于 2017-5-10 11:10
没 ,只是 偶尔,看看,动动脑筋而已。

老大好久没更新软件了。

点评

你是指。。。。。。 呵呵,给 后来人 发挥吧。  详情 回复 发表于 2017-5-11 08:53
回复

使用道具 举报

7#
 楼主| 发表于 2017-5-11 08:53:18 | 只看该作者
海市蜃楼 发表于 2017-5-10 11:28
老大好久没更新软件了。

你是指。。。。。。
呵呵,给 后来人 发挥吧。

点评

噢。明白了  详情 回复 发表于 2017-5-11 23:05
回复

使用道具 举报

8#
发表于 2017-5-11 23:05:30 | 只看该作者
dos时代菜鸟 发表于 2017-5-11 08:53
你是指。。。。。。
呵呵,给 后来人 发挥吧。

噢。明白了
回复

使用道具 举报

9#
发表于 2017-5-12 08:11:18 来自手机 | 只看该作者
收藏了,不错!!
回复

使用道具 举报

10#
发表于 2017-6-26 20:33:58 | 只看该作者
有没有试过把linux系统装到vhd文件中,然后通过在initrd中增加qemu-nbd   ,用grub启动内核,initrd挂载vhd文件并启动vhd文件中的linux系统?

点评

可以的,在UBUNTU下成功,不过系统比较卡顿。  详情 回复 发表于 2017-9-30 11:04
回复

使用道具 举报

11#
发表于 2017-9-30 11:04:33 | 只看该作者
本帖最后由 2011niumao 于 2017-10-4 11:25 编辑
helloxixi 发表于 2017-6-26 20:33
有没有试过把linux系统装到vhd文件中,然后通过在initrd中增加qemu-nbd   ,用grub启动内核,initrd挂载vhd ...


可以的,并且可以挂载动态VHD。在UBUNTU下成功,不过系统比较卡顿。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-12-11 06:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表