virt-manager 桥接功能修复

在为某台虚拟机增加一个“共享网络设备时”(新建一台虚拟机,为其选择网络时也会出现该情况),virt-manager 残掉了。如下图,导致只能添加一个“虚拟网络”。不得已先选择添加一个“虚拟网络”,然后修改对应的 xml 文件。

将网络类型由 network 修改为 bridge:

# vi /etc/libvirt/qemu/centos.xml
<interface type='network'>
  <mac address='54:52:00:4a:30:c6'/>
  <source network='default'/>
  <model type='virtio'/>
</interface>

<interface type='bridge'>
  <mac address='54:52:00:4a:30:c6'/>
  <source bridge='br0'/>
</interface>

关闭 virt-manager,重启:

# /etc/init.d/libvirtd restart

KVM 备份(二)

考虑使用 KVM 的好吃之一就是备份比较方便,除了可以使用之前做 snapshots 的那种通用的方法之外,其实还有一种更简便的方法,KVM 本身就提供了强大的备份机制,使用 virt-clone 这个工具可以帮我们复制一套完整的系统。

# virt-clone –connect qemu:///system -o centos-5.5 -n centos-5.5.bk -f /var/lib/libvirt/images/centos-5.5.bk.img

-o:需要备份的主机的名字
-n:备份的产生的主机名
-f:备份产生的文件存放位置

注意:备份之前先关闭主机。
Continue reading

利用 snapshots 实现 KVM 备份

目前通行的对 KVM 包括 Xen 之类的 VM 做备份的方法就是使用 LVM 的 snapshots .

这里需要备份一个跑在 KVM 上的 20G 的 CentOS 镜像文件 , 路径位于/var/lib/libvirt/images/centos/centos.img 下 , 该文件是创建在 /dev/vg/centos 上的 .

悲剧的是我的 / 目录已经划分不出这么大的空间了 , 喜剧的是我的硬盘还有没有被划分的空间 . 所以接下来要做的是先划分一块硬盘空间 /dev/sda8 .

# vgextend vg /dev/sda8
# lvcreate -n backup  -L 20G vg
# mkfs.ext3 /dev/vg/backup

新建一个用来存储备份文件的目录 /backup
# mkdir /backup

将文件系统挂载至 backup
# mount /dev/vg/backup /backup

可以修改 /etc/fstab 使得每次开机自动挂载 .
Continue reading

KVM 桥接(二)

先前写的一篇总结只是说了下原理 , 对于实际的生产应用并不可行 . 下面我将分 Ubuntu(10.04) 和 CentOS(5.5) 来分别说明如何在启动时加载 .
二者的原理是相同的 , 只不过实现的方式有些小差异 :

Ubuntu

下面是我的 /etc/network/interfaces 文件 , 根据你的实际情况修改即可
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static

auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user root

auto br0
iface br0 inet static
       address 10.20.156.203
       netmask 255.255.255.0
       gateway 10.20.156.20
       bridge_ports eth0
       bridge_stp off
       bridge_maxwait 5
       bridge_fd 5

注意 : 开机后要将 network-manager 关闭
# service network-manager stop
Continue reading

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 .
Continue reading