Host 访问 KVM 的硬盘镜像

不开机访问 KVM Guest 的硬盘镜像 (就是前面虚拟的 .img , 这里是 raw 格式) , 最简单的方法是用 mount -o loop 命令 . 但这个方法只适用于未分区的 .
可以用如下的方式来访问分区的 . 但是需要知道分区的位置 , 这个可以等妳有机会开机了使用 fdisk 来获取 .
# mount -o loop,offset=10000 image.img /mnt/share

Jasey 今天要说的是 losetup 和 kpartx . 他们执行起来就简单多了 .

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

# losetup [loop设备] 文件名
关联 loop 文件到设备

# losetup -d [loop设备]
去除 loop 设备和文件的关联

# losetup -f
找下一个没有关联上文件的 loop 设备

kpartx 命令是让 Linux 内核读取一个设备上的分区表 , 然后生成代表相应分区的设备 .

# kpartx [设备]
列出设备上的分区和刷新后的设备名

# kpartx -a [设备]
刷新分区表和生成设备

# kpartx -d [设备]
删除指定设备上的所有分区设备

对于loop设备 , kpartx命令可以生成 /dev/mapper/loop0p1 这样格式的分区设备 . 这样 , 有了 kpartx 命令 , 就可以用 mount 命令加载映像文件里面的各个分区了.

实例 1.
#  cd ~/ISO/kvm/centos
# losetup /dev/loop0 centos.img
# kpartx -a /dev/loop0
# mount /dev/mapper/loop0p1 /mnt/share

实例 2.
# modprobe loop
# modprobe des              //加载加密模块
# dd if=/dev/zero of=/file bs=1k count=100
# losetup -e des /dev/loop0 /file
Password:
# mkfs -t ext2 /dev/loop0 100
# mount -t ext2 /dev/loop0 /mnt
    做事 ING
# umount /dev/loop0
# losetup -d /dev/loop0
# rmmod loop

实例 2 dd 以后可以不要使用 losetup
# mkfs -t ext2 /file
# mount -o loop /file /mnt/share
也可行 .

参考:
http://lazyhack.net/mount-raw-and-qcow2-kvm-disk-images/
http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=213592

  • http://mucid.me Mucid

    KVM高级货哦!