在qemu kvm虚拟机中挂载硬盘分区的方法总结

时间:2023-01-02 16:24:23

转载注明:http://blog.csdn.net/hubbybob1/article/details/76889846
通过qemu创建的虚拟机之后想对虚拟机进行扩充或者添加几个新的硬盘,因此在此总结一下我尝试的方法,

方法一,通过对qemu的系统镜像直接扩充容量

qemu-img resize 你的镜像.img +10G

然后通过qemu-system-x86_64命令启动你的虚拟机(或者virsh),到磁盘管理下面,就可以看到有一个为初始化的磁盘,就可以分配给c盘。
这个方法就是给原有的img添加容量,在使用虚拟机的过程中如果镜像出问题,那么数据也会跟着丢失(如果没有快照的话)。因此下面几个方法,就脱离的系统镜像,直接挂载分区或者卷。

方法二、新建镜像或者本地分区直接加载

这个方法是两种操作,一是利用qemu-img创建一个磁盘镜像,挂载到虚拟机里面去,二是直接将本地的真实分区挂载进去
A。挂载真实分区,在qemu-sys tem-x86_64启动虚拟机的命令里面直接添加参数

-hdb /dev/sda4  //不能使用hda,这个已经被虚拟机的系统盘使用,目前可以使用的是好的hdc hdd,在虚拟机内对应的就是DE、F盘

启动虚拟机后,如果是第一次连接这个分区,则需要右击“我的电脑”-> “管理” -> “磁盘管理”,找到新建的磁盘,右击格式化,如下所示在qemu kvm虚拟机中挂载硬盘分区的方法总结
注意要使用NTFS格式记性格式化,这样windows和linux是兼容的,即同一个磁盘无论是在linux还是windows下操作的东西都能看的到
这样两边都可以使用这块分区了。也可以通过ssh远程挂载如下:

这里写代码片

这种方法的缺点就是这块分区不能移动,因为是真实的分区,下面的方法就可以将创建的虚拟磁盘镜像随便移动到其他pc

B。创建虚拟磁盘镜像,这种方法类似上面的方法,就是创建一个img文件,方便移动。

qemu-img create -f qcow2 disk.img 10G //创建一个10G的虚拟磁盘镜像,只有真正用完10G,这个镜像的大小彩绘师10G
//或者

dd if=/dev/zero of=test.img bs=1M count 128
//bs=bytes #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。

在虚拟机启动命令里面添加参数:

-hdc /你的路径/disk.img // hdb 已经被上面的方法用过了,因此此处就使用hdc

启动虚拟机加载硬盘的过程和上面的方法一样,请参考A
导致此虚拟机里面硬盘是整理好了,那么需要吧这个img文件挂载到本地才能在宿主机上使用,把创建好的disk.img文件进行本挂载和格式化

mkfs.ext3 -q disk.img //格式化为ext3的格式,不能是NTFS,会报错
mount -o loop disk.img /mnt //这样就把disk.img挂载到mnt下面了

方法可以查看网址:http://blog.csdn.net/wh8_2011/article/details/51543755

方法三,使用iSCSI来挂载远程硬盘

使用iSCSI来挂载分区有很多方法,网上也很多,在这里我使用的是iscsitarget服务和iscsi initiator客户端

  1. 首先就是服务器端的安装与配置,.搭建iscsitarget服务 (target)

a.安装iscsitarget

sudo apt-get install iscsitarget

b.启动服务

vim /etc/default/iscsitarget //编辑配置文件
ISCSITARGET_ENABLE=true //默认是false,修改为使能
//重新启动iscsitarget 服务
service iscsitarget restart
//查看状态
service iscsitarget status

当执行完上面两个命令后就会看到如下状态,则是运行成功:
在qemu kvm虚拟机中挂载硬盘分区的方法总结

c.创建分卷,用于共享磁盘

mkdir -p /media/volume0 //创建分卷位置
dd if=/dev/zero of=/media/volume0/vmlun0.bin count=0 obs=1 seek=1G
//dd命令需要学习一下,不然不知道这是在干嘛

if=file 输入文件名,缺省为标准输入
of=file 输出文件名,缺省为标准输出
obs=bytes 一次写 bytes 个字节(即一个块大小为 bytes 个字节)
seek=blocks 从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)也就是你开辟的空间大小,在虚拟机里面会显示的大小,此处开辟1G
count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数
dd命令有很多内容,也很有用,可以系统的学习一下

d.创建好卷后,开始配置target

添加LUN配置到配置文件:
关于这个文件的配置说明都在:http://manpages.ubuntu.com/manpages/xenial/en/man5/ietd.conf.5.html

vim /etc/iet/ietd.conf //打开编辑配置文件
//找到Target这一行
Target iqn.2017-05.local.mynet:storage.sys0
//iqn(iSCSI Qualified Name)指定名字,而且iqn必须在全局是唯一的
//格式 iqn.<日期>.<域名要颠倒写>:<设备字符串> 域名内可以包含点,设备自负也可以包括点
//例如上面时间是2017-05 , 域名是mynet.local ,设备名是storage.sys0
//找到LUN 0行
Lun 0 Path=/media/volume0/vmlun0.bin,Type=fileio,ScsiId=lun0,ScsiSN=lun0
//如果是有一个分区如/dev/sdc也可以直接取消掉本文件中该行的注释
//Type为接口类型,主要是两种fileio和blockio,可以查看上面的网站
//然后重启服务。
sudo service iscsitarget restart

到此服务器端酒配置好了,下面配置客户端

2.iscsi initiator客户端(也就是虚拟机里面),这个配置有两种不同的平台,linux和windows
A。linux(Ubuntu)下的配置,不一定是虚拟机,在远程的其他机器上也能使用
安装安装open-scsi

sudo  apt-get install open-iscsi open-iscsi-utils

查询接口,发现iscsi target

sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.9

就会找到如下图所示目标ip上的iscsi target:
在qemu kvm虚拟机中挂载硬盘分区的方法总结

显示上面的信息后就可以使用这个Target了默认端口为3260

sudo iscsiadm -m node --targetname iqn.2017-05.local.mynet:storage.sys0 -p 192.168.1.9 --login
//其实 -p 192.168.1.9可以去掉
//删除这个分区
sudo iscsiadm -m node --targetname iqn.2017-05.local.mynet:storage.sys0 -p 192.168.1.9 -u

如果想要开机西气东输加载,则需要一下命令:

iscsiadm -m node -T iqn.* -p 192.168.1.9 --op update -n node.startup -v automatic

执行完上面的加载分区的操作后就会在你的ubuntu右边栏出现一个硬盘,就可以在硬盘里面操作了。
B。在windows下使用这个target,其操作如下
打开iSCSI发起程序
在qemu kvm虚拟机中挂载硬盘分区的方法总结
打开之后以此点击 发现->发现门户->输入ip地址和端口号
在qemu kvm虚拟机中挂载硬盘分区的方法总结
然后选择 目标选项卡,选中目标,然后点击连接
在qemu kvm虚拟机中挂载硬盘分区的方法总结
出现对话框点击确定,上图的“不活动”就会变成“已链接”
在qemu kvm虚拟机中挂载硬盘分区的方法总结
如果是第一次连接这个分区,则需要右击“我的电脑”-> “管理” -> “磁盘管理”,找到新建的磁盘,右击格式化,如下所示
在qemu kvm虚拟机中挂载硬盘分区的方法总结
需要注意的是格式化的格式一定要NTFS,不然在linux就没办法看到windows下操作读写的东西。这样每次开启windows的时候这个分区就会自动加载。