当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [教程]如何让Host访问虚拟机(KVM)的硬盘镜像
帖子发表于 : 2009-07-04 8:36 

注册: 2006-07-30 17:56
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
当使用虚拟机的时候,经常会遇到需要在不开虚拟机的情况下访问某个硬盘镜像的内容。对于KVM来说,基本上,最简单的方法是用mount -o loop命令装载镜像内容。但这个方法有其限制,如果镜像文件带有分区,就不行了。

当然,可以用mount -o loop,offset=的方式,指定一个偏移量,来解决这个问题。但是你必须事先知道分区开始的位置。

经过探索,终于发现使用losetup和kpartx可以解决这个难题。

下面先讲解一下losetup命令。如果你执行如下命令
代码:
ls /dev/loop?

可以看到/dev目录下有许多loop0、loop1等等的东西。这些是Linux的"loop设备"。当设定好之后,loop设备可以模仿磁盘设备,比如sda, hda那些,但实际上对该设备的访问被重定向到一个文件。要设定一个loop设备,要使用losetup命令。该命令需要用root权限运行

代码:
#关联loop文件到设备
losetup [loop设备] 文件名
#去除loop设备和文件的关联
losetup [loop设备] -d
#找下一个没有关联上文件的loop设备
losetup -f


当写脚本的时候,losetup -f特别有用,因为它会返回一个没有使用的loop设备,然后你就可以把该设备名保存在一个变量里面,供后续命令使用。

到现在为止,情况和mount -o loop并没有什么不同,尽管你立马可以mount上那个刚刚关联上文件的loop设备,但这等价于mount -o loop。但是,我们有kpartx。

如果你的系统还没有安装kpartx(默认是不装),先装上。

代码:
sudo apt-get install kpartx


kpartx命令的作用,是让Linux内核读取一个设备上的分区表,然后生成代表相应分区的设备。当然,它也需要root权限来运行。具体用法:

代码:
#列出设备上的分区和刷新后的设备名
kpartx [设备]
#刷新分区表和生成设备
kpartx [设备] -a
#删除指定设备上的所有分区设备
kpartx [设备] -d


对于loop设备,kpartx命令可以生成/dev/mapper/loop0p1这样格式的分区设备。

这样,有了kpartx命令,就可以用mount命令加载映像文件里面的各个分区了。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: [教程]如何让Host访问虚拟机(KVM)的硬盘镜像
帖子发表于 : 2009-10-25 19:05 
头像

注册: 2008-11-16 11:11
帖子: 397
送出感谢: 0 次
接收感谢: 2
其实这篇文章不错 :em09


_________________
等俺有钱了,俺把M$买来好好搓搓


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译