人间重晚晴 發表於 2015-7-1 18:11:42

使用guestfish来管理KVM容器的详细教程

<p><strong>1. 虚拟机镜像挂载及w2k8虚拟机启动自检慢问题解决办法</strong></p>
<p>guestfish套件是镜像管理的利器,在没有guestfish这个套件之前,对虚拟机镜像的处理,要么虚拟机运行起来修改,要么使用下面介绍的办法,总之很不方便。</p>
<p>下面介绍的的挂载办法,只适应于块设备镜像的挂载。</p>
<p>在guestfish出来之前,对镜像的处理,只能是先转化成raw格式,raw在转化成裸格式,然后挂载,非常痛苦。</p>
<p>再一次感谢guestfish套件的作者。</p>
<p>w2k8虚拟机启动启动慢问题解决办法</p>
<p>在kvm虚拟机上,经常碰到这样的问题,就是windows 2008 server的虚拟机,有时候重启的时候,磁盘检查需要几个小时,即使新装的系统也是这样,下面我们介绍通过裸设备挂载的方式擦除windows 2008 server磁盘检查标志的方法,绕过这个问题。</p>
<p>操作方法:</p>
<p>第一步 在宿主机上安装最新的ntfs-3g<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode58"><br />wget http://tuxera.com/opensource/ntfs-3g_ntfsprogs-2012.1.15.tgz<br />tar -zxvf ntfs-3g_ntfsprogs-2012.1.15.tgz<br />cd ntfs-3g_ntfsprogs-2012.1.15<br />./configure --bindir=/usr/bin<br />make<br />make install</div></p>
<p><br />第二步 扩展镜像,将镜像挂载,并检查</p>
<p>先使用losetup &ndash;f 得到可用的loop设备<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode59"> <br />losetup -f<br />/dev/loop0</div></p>
<p><br />挂载镜像<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode60"> <br />losetup /dev/loop0 /dev/vmVG/ptyyb-webzb-57_vda</div></p>
<p><br />使用kartx 将镜像分区映射,如果2008镜像是一个分区,默认会挂载到/dev/mapper/loop0p</p>
<p>因为2008默认安装的时候会有一个boot分区,那么c盘就在/dev/mapper/loop0p2上,根据自己实际情况挂载<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode61"> <br />kpartx -av /dev/loop0</div></p>
<p><br />检查镜像,尝试 &ndash;b &ndash;d很重要,只有最新版的ntfs-3g支持<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode62"> <br />ntfsfix -b -d /dev/mapper/loop0p1</div></p>
<p><br />分离镜像映射<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode63"> kpartx -dv /dev/loop0</div></p>
<p><br />分离镜像挂载<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode64"> <br />losetup -d /dev/loop0</div></p>
<p><br /><strong>2. KVM虚拟化与guestfish套件</strong></p>
<p>我们来看看guestfish套件是什么</p>
<p>guestfish是一套虚拟机镜像管理的利器,提供一系列对镜像管理的工具,也提供对外的API。</p>
<p>guestfish主要包含以下工具:</p>
<p>guestfish interactive shell&nbsp; 挂载镜像,并提供一个交互的shell。</p>
<p>guestmount mount guest filesystem in hos 将镜像挂载到指定的目录。</p>
<p>guestumount unmount guest filesystem 卸载镜像目录。</p>
<p>virt-alignment-scan 镜像块对齐扫描。</p>
<p>virt-builder &mdash; quick image builder 快速镜像创建。</p>
<p>virt-cat(1) &mdash; display a file 显示镜像中文件内容。</p>
<p>virt-copy-in(1) &mdash; copy files and directories into a VM 拷贝文件到镜像内部。</p>
<p>virt-copy-out(1) &mdash; copy files and directories out of a VM 拷贝镜像文件出来。</p>
<p>virt-customize(1) &mdash; customize virtual machines 定制虚拟机镜像</p>
<p>virt-df(1) &mdash; free space 查看虚拟机镜像空间使用情况。</p>
<p>virt-diff(1) &mdash; differences 不启动虚拟机的情况下,比较虚拟机内部两份文件差别。</p>
<p>virt-edit(1) &mdash; edit a file 编辑虚拟机内部文件。</p>
<p>virt-filesystems(1) &mdash; display information about filesystems, devices, LVM 显示镜像文件系统信息。</p>
<p>virt-format(1) &mdash; erase and make blank disks 格式化镜像内部磁盘。</p>
<p>virt-inspector(1) &mdash; inspect VM images 镜像信息测试。</p>
<p>virt-list-filesystems(1) &mdash; list filesystems 列出镜像文件系统。</p>
<p>virt-list-partitions(1) &mdash; list partitions 列出镜像分区信息。</p>
<p>virt-log(1) &mdash; display log files 显示镜像日志。</p>
<p>virt-ls(1) &mdash; list files 列出镜像文件。</p>
<p>virt-make-fs(1) &mdash; make a filesystem 镜像中创建文件系统。</p>
<p>virt-p2v(1) &mdash; convert physical machine to run on KVM 物理机转虚拟机。</p>
<p>virt-p2v-make-disk(1) &mdash; make P2V ISO 创建物理机转虚拟机ISO光盘。</p>
<p>virt-p2v-make-kickstart(1) &mdash; make P2V kickstart 创建物理机转虚拟机kickstart文件。</p>
<p>virt-rescue(1) &mdash; rescue shell 进去虚拟机救援模式。</p>
<p>virt-resize(1) &mdash; resize virtual machines 虚拟机分区大小修改。</p>
<p>virt-sparsify(1) &mdash; make virtual machines sparse (thin-provisioned) 镜像稀疏空洞消除。</p>
<p>virt-sysprep(1) &mdash; unconfigure a virtual machine before cloning 镜像初始化。</p>
<p>virt-tar(1) &mdash; archive and upload files 文件打包并传入传出镜像。</p>
<p>virt-tar-in(1) &mdash; archive and upload files 文件打包并传入镜像。</p>
<p>virt-tar-out(1) &mdash; archive and download files 文件打包并传出镜像。</p>
<p>virt-v2v(1) &mdash; convert guest to run on KVM 其他格式虚拟机镜像转KVM镜像。</p>
<p>virt-win-reg(1) &mdash; export and merge Windows Registry keys windows注册表导入镜像。</p>
<p>libguestfs-test-tool(1) &mdash; test libguestfs 测试libguestfs</p>
<p>libguestfs-make-fixed-appliance(1) &mdash; make libguestfs fixed appliance</p>
<p>hivex(3) &mdash; extract Windows Registry hive 解压windows注册表文件。</p>
<p>hivexregedit(1) &mdash; merge and export Registry changes from regedit-format files 合并、并导出注册表文件内容。</p>
<p>hivexsh(1) &mdash; Windows Registry hive shell window注册表修改交互的shell。</p>
<p>hivexml(1) &mdash; convert Windows Registry hive to XML 将window注册表转化为xml</p>
<p>hivexget(1) &mdash; extract data from Windows Registry hive 得到注册表键值。</p>
<p>guestfsd(8) &mdash; guestfs daemon guestfs服务。<br /><strong>3. guestfish安装与注意事项</strong></p>
<p>guestfish套件安装</p>
<p>guestfish套件安装非常简单,一条命令就可以。<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode65"><br />yum install libguestfs-tools</div></p>
<p><br />注意:</p>
<p>默认安装是不安装windows系统支持的,如果需要修改windows系统镜像,需要再运行如下命令。<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode66"> <br />yum install libguestfs-winsupport</div></p>
<p><br /><strong>4. 使用guestfish查看虚拟机信息</strong></p>
<p>虚拟机镜像信息查看,主要通过virt-inspector和virt-inspector2命令</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode67"> &lt;/p&gt;
&lt;p&gt;virt-inspector - Display OS version, kernel, drivers, mount points, applications, etc. in a virtual machine</div></p>
<p>virt-inspector 显示os版本、内核、驱动、挂载点、应用等等。</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode68"> virt-inspector2 - Display operating system version and other information about a virtual machine</div></p>
<p>virt-inspector2 显示os版本和其他信息。</p>
<p>virt-inspector示例<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode69"> virt-inspector centos5332.qcow2<br />linux centos i386 5.3 (CentOS release 5.3 (Final)) on /dev/vmvg/root:<br />Mountpoints:<br />    /dev/vmvg/root /<br />    /dev/sda1 /boot<br />    /dev/vmvg/swap swap<br />Filesystems:<br />    /dev/sda1:<br />      label: /boot<br />      UUID: 152ec813-72cc-4ea1-ad76-71c470feff2f<br />      type: ext3<br />      content: linux-grub<br />    /dev/vmvg/root:<br />      label:<br />      UUID: 9462b99e-04d9-4648-9d5d-2ce50d8ed8f2<br />      type: ext3<br />      content: linux-root<br />    /dev/vmvg/swap:<br />      type: swap<br />Modprobe aliases:<br />    binfmt-204 binfmt_aout<br />    binfmt-263 binfmt_aout<br />    binfmt-264 binfmt_aout<br />    binfmt-267 binfmt_aout<br />    binfmt-387 binfmt_aout</div></p>
<p><br />也可以通过--query输出一些固定内容,方便脚本判断。<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode70"> virt-inspector --query centos5332.qcow2<br />windows=no<br />linux=yes<br />rhel=no<br />fedora=no<br />debian=no<br />fullvirt=yes<br />xen_domU_kernel=no<br />xen_pv_drivers=yes<br />virtio_drivers=yes<br />kernel_arch=i386<br />userspace_arch=i386</div></p>
<p><br />输出也可以是xml格式 加--xml参数就可以</p>
<p>virt-inspector windows虚拟机示例<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode71"> windows i386 5.2 (Microsoft Windows Server 2003) on /dev/sda1:<br />Mountpoints:<br />    /dev/sda1 /<br />Filesystems:<br />    /dev/sda1:<br />      type: ntfs<br />      content: windows-root<br />Applications:</div></p>
<p><br />virt-inspector2 输出为xml格式,系统相关信息比virt-inspector详细</p>
<p>virt-inspector2 示例<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode72"> virt-inspector2 centos5332.qcow2<br />&lt;?xml version="1.0"?&gt;<br />&lt;operatingsystems&gt;<br />&lt;operatingsystem&gt;<br />    &lt;root&gt;/dev/vmvg/root&lt;/root&gt;<br />    &lt;name&gt;linux&lt;/name&gt;<br />    &lt;arch&gt;i386&lt;/arch&gt;<br />    &lt;distro&gt;centos&lt;/distro&gt;<br />    &lt;product_name&gt;CentOS release 5.3 (Final)&lt;/product_name&gt;<br />    &lt;major_version&gt;5&lt;/major_version&gt;<br />    &lt;minor_version&gt;3&lt;/minor_version&gt;<br />    &lt;package_format&gt;rpm&lt;/package_format&gt;<br />    &lt;package_management&gt;yum&lt;/package_management&gt;<br />    &lt;hostname&gt;localhost.localdomain&lt;/hostname&gt;<br />    &lt;format&gt;installed&lt;/format&gt;<br />    &lt;mountpoints&gt;<br />      &lt;mountpoint dev="/dev/vmvg/root"&gt;/&lt;/mountpoint&gt;<br />      &lt;mountpoint dev="/dev/sda1"&gt;/boot&lt;/mountpoint&gt;<br />    &lt;/mountpoints&gt;<br />    &lt;filesystems&gt;</div></p>
<p><br />virt-inspector2 windows虚拟机示例<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode73"> <br />&lt;arch&gt;i386&lt;/arch&gt;<br />    &lt;distro&gt;windows&lt;/distro&gt;<br />    &lt;product_name&gt;Microsoft Windows Server 2003&lt;/product_name&gt;<br />    &lt;major_version&gt;5&lt;/major_version&gt;<br />    &lt;minor_version&gt;2&lt;/minor_version&gt;<br />    &lt;windows_systemroot&gt;/WINDOWS&lt;/windows_systemroot&gt;<br />    &lt;windows_current_control_set&gt;ControlSet001&lt;/windows_current_control_set&gt;<br />    &lt;hostname&gt;ks-55e1e4a74d40&lt;/hostname&gt;<br />    &lt;format&gt;installed&lt;/format&gt;<br />    &lt;mountpoints&gt;<br />      &lt;mountpoint dev="/dev/sda1"&gt;/&lt;/mountpoint&gt;<br />    &lt;/mountpoints&gt;<br />    &lt;filesystems&gt;<br />      &lt;filesystem dev="/dev/sda1"&gt;<br />      &lt;type&gt;ntfs&lt;/type&gt;<br />      &lt;uuid&gt;4A5061F55061E7E1&lt;/uuid&gt;<br />      &lt;/filesystem&gt;<br />    &lt;/filesystems&gt;<br />    &lt;drive_mappings&gt;<br />      &lt;drive_mapping name="C"&gt;/dev/sda1&lt;/drive_mapping&gt;<br />    &lt;/drive_mappings&gt;<br />    &lt;applications&gt;<br />      &lt;application&gt;<br />      &lt;name&gt;Google Chrome&lt;/name&gt;</div></p>
<p><br /><strong>5. 使用guestfish查看虚拟机分区及文件系统</strong></p>
<p>虚拟机分区及文件系统查看主要使用三个命令</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode74"> virt-list-partitions - List partitions in a virtual machine or disk image</div></p>
<p>列出虚拟机镜像文件分区信息</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode75"> virt-filesystems - List filesystems, partitions, block devices, LVM in a virtual machine or disk image</div></p>
<p>列出虚拟机镜像文件文件系统,分区,块设备,lvm信息</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode76"> virt-alignment-scan&lt;/p&gt;
&lt;p&gt;virt-alignment-scan - Check alignment of virtual machine partitions</div></p>
<p>查看虚拟机镜像分区是否块对齐</p>
<p>示例</p>
<p>linux 镜像查看<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode77"> <br />virt-list-partitions centos6232.qcow2<br />/dev/sda1<br />/dev/sda2<br />virt-list-filesystems centos6232.qcow2<br />/dev/sda1<br />/dev/vmvg/root</div></p>
<p><br />windows 镜像查看<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode78"> <br />virt-list-filesystems win2k3.qcow2   <br />/dev/sda1    <br /> virt-list-partitions win2k3.qcow2    <br />/dev/sda1</div></p>
<p><br />检查镜像是否块对齐<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode79"><br />virt-alignment-scan -a win2k3.qcow2<br />/dev/sda1 32256 512 bad (alignment &lt; 4K)<br />virt-alignment-scan -a centos6232.qcow2<br />/dev/sda1 1048576 1024K ok<br />/dev/sda2 210763776 1024K ok</div></p>
<p><br /><strong>6. 去掉磁盘空洞--KVM虚拟镜像的稀疏问题</strong></p>
<p>RAW格式和QCOW2</p>
<p>KVM虚拟化文件系统镜像,一般使用RAW或者QCOW2的方式:</p>
<p>RAW 一次性将要使用的镜像空间分配完。</p>
<p>QCOW2 精简模式,磁盘用多少,才占多少空间。</p>
<p>ext4的稀疏特性</p>
<p>我们使用不通的方式的创建方式几个镜像文件对比下,<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode80"> <br />qemu-img create -f raw test.raw 5G<br />qemu-img create -f qcow2 test.qcow2 5G<br />dd if=/dev/zero of=/root/test.dd bs=1G count=5</div></p>
<p><br />通过ls du查看,我们会发现一个非常有意思的事情<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode81"> ls -l<br />-rw-r--r-- 1 root root 5.0G Oct 13 22:46 test.dd<br />-rw-r--r-- 1 root root 193K Oct 13 22:58 test.qcow2<br />-rw-r--r-- 1 root root 5.0G Oct 13 22:58 test.raw&lt;/p&gt;</div><p><br />会发现raw是5G<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode82"> <br />du test*<br />5242880 test.dd<br />196 test.qcow2<br />0 test.raw</div></p>
<p><br />会发现raw是0G</p>
<p>为什么会这样呢,这是因为ext4文件系统是一个支持稀疏特性的文件系统,当文件内容全部是空的时候,ext4并不分配实际的空间。</p>
<p>那如果想要使用RAW方式,并希望一次占用完所有的空间,可以使用dd命令的方式。</p>
<p>qcow2 的稀疏问题</p>
<p>qcow2方式也有稀疏的问题,在磁盘级别上看,镜像会有大量连续的相同空洞,比如刚创建的镜像的swap分区,通过virt-sparsify 我们可以消除这些空洞,从而缩小磁盘大小,便于我们传输磁盘镜像。</p>
<p>使用virt-sparsify 前,我们需要先创建一个新的同样大小的镜像<br />&nbsp;<br />qemu-img create -f qcow2 test2.qcow2 5G</p>
<p><br />然后使用virt-sparsify,去除镜像空洞,语法为<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode83"> virt-sparsify-x   /root/test.qcow2 --convert qcow2 /root/test2.qcow2</div></p>
<p><br /><strong>7. 用guestfish操作虚拟机内部文件</strong></p>
<p>虚拟机内部文件管理主要使用以下命令:</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode84"> virt-df - Display free space on virtual filesystems</div></p>
<p>镜像磁盘空间使用查看</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode85"> virt-ls - List files in a virtual machine</div></p>
<p>列出指定目录内文件</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode86"> virt-cat - Display files in a virtual machine</div></p>
<p>显示指定文件内容</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode87"> virt-edit - Edit a file in a virtual machine</div></p>
<p>编辑指定文件</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode88"> virt-copy-in - Copy files and directories into a virtual machine disk image.</div></p>
<p>将文件拷贝到虚拟机内部</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode89"> virt-copy-out - Copy files and directories out of a virtual machine disk image.q</div></p>
<p>将虚拟机内部文件拷贝出来</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode90"> virt-tar-in - Unpack a tarball into a virtual machine disk image</div></p>
<p>tar压缩文件拷贝进虚拟机并解压</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode91"> virt-tar-out - Pack a virtual machine disk image directory into a tarball.</div></p>
<p>镜像内指定目录文件拷贝并压缩</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode92"> virt-tar - Extract or upload files to a virtual machine</div></p>
<p>解压或者上传文件到虚拟机</p>
<p>示例</p>
<p>查看镜像磁盘空间<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode93"> <br />virt-df -a centos6364.qcow2<br />Filesystem 1K-blocks Used Available Use%<br />centos6364.qcow2:/dev/sda1 198337 32098 155999 17%<br />centos6364.qcow2:/dev/vmvg/root 16308136 1210172 14269548 8%</div></p>
<p><br />查看镜像/root目录内容<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode94"><br />virt-ls -a centos6364.qcow2 /root<br />.bash_history<br />.bash_logout<br />.bash_profile<br />.bashrc<br />.cshrc<br />.tcshrc<br />anaconda-ks.cfg<br />install.log<br />install.log.syslog</div></p>
<p><br />显示指定文件内容<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode95"> <br />virt-cat -a centos6364.qcow2 /root/anaconda-ks.cfg<br /># Kickstart file automatically generated by anaconda.<br />...</div></p>
<p><br />编辑指导文件<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode96"> <br />virt-edit -a centos6364.qcow2 /root/anaconda-ks.cfg</div></p>
<p><br />文件拷贝进镜像及拷贝出镜像<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode97"><br />touch test.txt<br />virt-copy-in test.txt -a centos6364.qcow2 /root/<br />virt-copy-out -a centos6364.qcow2 /root/test.txt /home</div></p>
<p><br />压缩文件拷贝进虚拟机并解压<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode98"> <br />virt-tar-in -a disk.img data.tar /destination</div></p>
<p><br />压缩文件拷贝进虚拟机并解压<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode99"><br />virt-tar-out -a disk.img /dir files.tar</div></p>
<p><br />将虚拟机的home目录拷贝出来并打包<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode100"> <br />virt-tar -x domname /home home.tar</div></p>
<p><br />上传本地的压缩文件到虚拟机并解压<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode101"><br />virt-tar -u domname uploadstuff.tar /tmp</div></p>
<p><br /><strong>8. guestfish修改镜像格式和大小</strong></p>
<p>修改镜像格式和大小主要使用以下命令</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode102"> virt-convert - convert virtual machines between formats</div></p>
<p>转化虚拟机镜像格式</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode103"> virt-resize - Resize a virtual machine disk</div></p>
<p>修改虚拟机镜像磁盘</p>
<p>示例</p>
<p>raw转qcow2格式</p>
<p>需要先用qemu-img命令创建一个一样大小的空qcow2格式镜像文件,然后使用virt-convert命令</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode104"> virt-convert-i raw -o qcow2 old.img new.qcow2</div></p>
<p>原始镜像可以是 vmware镜像vmx,kvm进行,ovf的镜像。</p>
<p>将指定的分区扩大5G</p>
<p>创建一个新的镜像,比原来大5G,然后扩展<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode105"> virt-resize --expand /dev/sda2 olddisk newdisk</div></p>
<p><br />将boot增加200M,剩下的空间扩充给/dev/sda2<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode106"><br />virt-resize --resize /dev/sda1=+200M --expand /dev/sda2 \<br />olddisk newdisk</div></p>
<p><br />lv扩展<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode107"> virt-resize --expand /dev/sda2 --LV-expand /dev/vg_guest/lv_root \<br />olddisk newdisk</div></p>
<p><br />扩展分区,并将raw格式转化成qcow2格式<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode108"> qemu-img create -f qcow2 newdisk.qcow2 15G<br />virt-resize --expand /dev/sda2 olddisk newdisk.qcow2</div></p>
<p><br />注意:</p>
<p>1 如果是扩展分区,目标磁盘文件必须大于原生磁盘;</p>
<p>2 磁盘缩小比较复杂,一般要求缩小到的空间远大于文件系统的大小。<br />9. guestfish挂载、修改、运行救援方式</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode109"> guestmount - Mount a guest filesystem on the host using FUSE and libguestfs</div></p>
<p>挂载镜像到某个目录</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode110"> guestfish - the libguestfs Filesystem Interactive SHell</div></p>
<p>挂载镜像并得到一个交互的shell</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode111"> virt-rescue - Run a rescue shell on a virtual machine</div></p>
<p>运行一个镜像的救援模式</p>
<p>示例</p>
<p>只读方式将镜像挂载到/mnt目录<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode112"> guestmount -a windows.img -m /dev/sda1 --ro /mnt</div></p>
<p><br />将linux虚拟机的根目录挂载到宿主机的/mnt目录<br />&nbsp;<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode113"> guestmount -a linux.qcow2 -m /dev/sda2/mnt</div></p>
<p><br />guestfish编辑镜像grub文件<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode114"> <br />guestfish --rw --add disk.img \<br />          --mount /dev/vg_guest/lv_root \<br />          --mount /dev/sda1:/boot \<br />          edit /boot/grub/grub.conf</div></p>
<p><br />进入镜像的救援模式<br />&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode115"> <br />$ virt-rescue --suggest -d Fedora15<br />      Inspecting the virtual machine or disk image ...<br />      This disk contains one or more operating systems. You can use these<br />      mount commands in virt-rescue (at the &gt;&lt;rescue&gt; prompt) to mount the<br />      filesystems.<br />      # /dev/vg_f15x32/lv_root is the root of a linux operating system<br />      # type: linux, distro: fedora, version: 15.0<br />      # Fedora release 15 (Lovelock)<br />      mount /dev/vg_f15x32/lv_root /sysroot/<br />      mount /dev/vda1 /sysroot/boot<br />      mount --bind /dev /sysroot/dev<br />      mount --bind /dev/pts /sysroot/dev/pts<br />      mount --bind /proc /sysroot/proc<br />      mount --bind /sys /sysroot/sys<br />       Another way is to list the logical volumes (with lvs(8)) and partitions (with parted(8)) and mount them by hand:<br />      &gt;&lt;rescue&gt; lvs<br />      LV VG Attr LSize Origin Snap% Move Log Copy% Convert<br />      lv_root vg_f15x32 -wi-a- 8.83G<br />      lv_swap vg_f15x32 -wi-a- 992.00M<br />      &gt;&lt;rescue&gt; mount /dev/vg_f15x32/lv_root /sysroot<br />      &gt;&lt;rescue&gt; mount /dev/vda1 /sysroot/boot<br />      &gt;&lt;rescue&gt; ls /sysroot<br />       Another command to list available filesystems is virt-filesystems(1).<br />       To run commands in a Linux guest (for example, grub), you should chroot into the /sysroot directory first:<br />      &gt;&lt;rescue&gt; chroot /sysroot</div><br /></p>
頁: [1]
查看完整版本: 使用guestfish来管理KVM容器的详细教程