admin管理员组文章数量:1535248
2024年6月3日发(作者:)
KVM镜像管理利器-guestfish使用详解
1.
2.
3.
4.
5.
6.
7.
8.
9.
虚拟机镜像挂载及w2k8虚拟机启动自检慢问题解决办法
KVM虚拟化与guestfish套件
guestfish安装与注意事项
使用guestfish查看虚拟机信息
使用guestfish查看虚拟机分区及文件系统
去掉磁盘空洞--KVM虚拟镜像的稀疏问题
用guestfish操作虚拟机内部文件
guestfish修改镜像格式和大小
guestfish挂载、修改、运行救援方式
1.虚拟机镜像挂载及w2k8虚拟机启动自检慢问题解决办法
guestfish套件是镜像管理的瑞士军刀,在没有guestfish这个套件之前,对虚拟机镜像的
处理,要么虚拟机运行起来修改,要么使用下面介绍的办法,总之很不方便。
下面介绍的的挂载办法,只适应于块设备镜像的挂载。
在guestfish出来之前,对镜像的处理,只能是先转化成raw格式,raw在转化成裸格式,
然后挂载,非常痛苦。
再一次感谢guestfish套件的作者。
w2k8虚拟机启动启动慢问题解决办法
在kvm虚拟机上,经常碰到这样的问题,就是windows2008server的虚拟机,有时候重启
的时候,磁盘检查需要几个小时,即使新装的系统也是这样,下面我们介绍通过裸设备挂载
的方式擦除windows2008server磁盘检查标志的方法,绕过这个问题。
操作方法:
第一步在宿主机上安装最新的ntfs-3g
wget/opensource/ntfs-3g_
tar-zxvfntfs-3g_
cdntfs-3g_ntfsprogs-2012.1.15
./configure--bindir=/usr/bin
make
makeinstall
第二步扩展镜像,将镜像挂载,并检查
先使用losetup–f得到可用的loop设备
losetup-f
/dev/loop0
挂载镜像
losetup/dev/loop0/dev/vmVG/ptyyb-webzb-57_vda
使用kartx将镜像分区映射,如果2008镜像是一个分区,默认会挂载到
/dev/mapper/loop0p1
因为2008默认安装的时候会有一个boot分区,那么c盘就在/dev/mapper/loop0p2上,根
据自己实际情况挂载
kpartx-av/dev/loop0
检查镜像,尝试–b–d很重要,只有最新版的ntfs-3g支持
ntfsfix-b-d/dev/mapper/loop0p1
分离镜像映射
kpartx-dv/dev/loop0
分离镜像挂载
losetup-d/dev/loop0
虚拟化与guestfish套件
我们来看看guestfish套件是什么
guestfish是一套虚拟机镜像管理的利器,提供一系列对镜像管理的工具,也提供对外的API。
guestfish主要包含以下工具:
guestfishinteractiveshell挂载镜像,并提供一个交互的shell。
guestmountmountguestfilesysteminhos将镜像挂载到指定的目录。
guestumountunmountguestfilesystem卸载镜像目录。
virt-alignment-scan镜像块对齐扫描。
virt-builder—quickimagebuilder快速镜像创建。
virt-cat(1)—displayafile显示镜像中文件内容。
virt-copy-in(1)—copyfilesanddirectoriesintoaVM拷贝文件到镜像内部。
virt-copy-out(1)—copyfilesanddirectoriesoutofaVM拷贝镜像文件出来。
virt-customize(1)—customizevirtualmachines定制虚拟机镜像
virt-df(1)—freespace查看虚拟机镜像空间使用情况。
virt-diff(1)—differences不启动虚拟机的情况下,比较虚拟机内部两份文件差别。
virt-edit(1)—editafile编辑虚拟机内部文件。
virt-filesystems(1)—displayinformationaboutfilesystems,devices,LVM显示镜像文件系统信
息。
virt-format(1)—eraseandmakeblankdisks格式化镜像内部磁盘。
virt-inspector(1)—inspectVMimages镜像信息测试。
virt-list-filesystems(1)—listfilesystems列出镜像文件系统。
virt-list-partitions(1)—listpartitions列出镜像分区信息。
virt-log(1)—displaylogfiles显示镜像日志。
virt-ls(1)—listfiles列出镜像文件。
virt-make-fs(1)—makeafilesystem镜像中创建文件系统。
virt-p2v(1)—convertphysicalmachinetorunonKVM物理机转虚拟机。
virt-p2v-make-disk(1)—makeP2VISO创建物理机转虚拟机ISO光盘。
virt-p2v-make-kickstart(1)—makeP2Vkickstart
virt-rescue(1)—rescueshell进去虚拟机救援模式。
virt-resize(1)—resizevirtualmachines虚拟机分区大小修改。
virt-sparsify(1)—makevirtualmachinessparse(thin-provisioned)镜像稀疏空洞消除。
virt-sysprep(1)—unconfigureavirtualmachinebeforecloning镜像初始化。
virt-tar(1)—archiveanduploadfiles文件打包并传入传出镜像。
virt-tar-in(1)—archiveanduploadfiles文件打包并传入镜像。
virt-tar-out(1)—archiveanddownloadfiles文件打包并传出镜像。
virt-v2v(1)—convertguesttorunonKVM其他格式虚拟机镜像转KVM镜像。
virt-win-reg(1)—exportandmergeWindowsRegistrykeyswindows注册表导入镜像。
libguestfs-test-tool(1)—testlibguestfs测试libguestfs
libguestfs-make-fixed-appliance(1)—makelibguestfsfixedappliance
hivex(3)—extractWindowsRegistryhive解压windows注册表文件。
hivexregedit(1)—mergeandexportRegistrychangesfromregedit-formatfiles合并、并导出注
册表文件内容。
hivexsh(1)—WindowsRegistryhiveshellwindow注册表修改交互的shell。
hivexml(1)—convertWindowsRegistryhivetoXML将window注册表转化为xml
hivexget(1)—extractdatafromWindowsRegistryhive得到注册表键值。
guestfsd(8)—guestfsdaemonguestfs服务。
创建物理机转虚拟机kickstart文件。
ish安装与注意事项
guestfish套件安装
guestfish套件安装非常简单,一条命令就可以。
yuminstalllibguestfs-tools
注意:
默认安装是不安装windows系统支持的,如果需要修改windows系统镜像,需要再运行如下命令。
yuminstalllibguestfs-winsupport
4.使用guestfish查看虚拟机信息
虚拟机镜像信息查看,主要通过virt-inspector和virt-inspector2命令
virt-inspector-DisplayOSversion,kernel,drivers,mountpoints,applications,
virtualmachine
virt-inspector显示os版本、内核、驱动、挂载点、应用等等。
virt-inspector2-Displayoperatingsystemversionandotherinformationaboutavirtualmachine
virt-inspector2显示os版本和其他信息。
virt-inspector示例
2
linuxcentosi3865.3(CentOSrelease5.3(Final))on/dev/vmvg/root:
Mountpoints:
/dev/vmvg/root/
/dev/sda1/boot
/dev/vmvg/swapswap
Filesystems:
/dev/sda1:
label:/boot
UUID:152ec813-72cc-4ea1-ad76-71c470feff2f
type:ext3
content:linux-grub
/dev/vmvg/root:
label:
UUID:9462b99e-04d9-4648-9d5d-2ce50d8ed8f2
type:ext3
content:linux-root
/dev/vmvg/swap:
type:swap
Modprobealiases:
binfmt-204binfmt_aout
binfmt-263binfmt_aout
binfmt-264binfmt_aout
binfmt-267binfmt_aout
binfmt-387binfmt_aout
也可以通过--query输出一些固定内容,方便脚本判断。
2
windows=no
linux=yes
rhel=no
fedora=no
debian=no
fullvirt=yes
xen_domU_kernel=no
xen_pv_drivers=yes
virtio_drivers=yes
kernel_arch=i386
userspace_arch=i386
输出也可以是xml格式加--xml参数就可以
virt-inspectorwindows虚拟机示例
indowsi3865.2(MicrosoftWindowsServer2003)on/dev/sda1:
Mountpoints:
/dev/sda1/
Filesystems:
/dev/sda1:
type:ntfs
content:windows-root
Applications:
virt-inspector2输出为xml格式,系统相关信息比virt-inspector详细
virt-inspector2示例
2
virt-inspector2windows虚拟机示例
5.使用guestfish查看虚拟机分区及文件系统
虚拟机分区及文件系统查看主要使用三个命令
virt-list-partitions-Listpartitionsinavirtualmachineordiskimage
列出虚拟机镜像文件分区信息
virt-filesystems-Listfilesystems,partitions,blockdevices,LVMinavirtualmachineordisk
image
列出虚拟机镜像文件文件系统,分区,块设备,lvm信息
virt-alignment-scan
virt-alignment-scan-Checkalignmentofvirtualmachinepartitions
查看虚拟机镜像分区是否块对齐
示例
linux镜像查看
2
/dev/sda1
/dev/sda2
2
/dev/sda1
/dev/vmvg/root
windows镜像查看
2
/dev/sda1
2
/dev/sda1
检查镜像是否块对齐
2
/dev/sda132256512bad(alignment<4K)
2
/dev/sda11Kok
/dev/sda221Kok
6.去掉磁盘空洞--KVM虚拟镜像的稀疏问题
RAW格式和QCOW2
KVM虚拟化文件系统镜像,一般使用RAW或者QCOW2的方式:
RAW一次性将要使用的镜像空间分配完。
QCOW2精简模式,磁盘用多少,才占多少空间。
ext4的稀疏特性
我们使用不通的方式的创建方式几个镜像文件对比下,
5G
25G
ddif=/dev/zeroof=/root/=1Gcount=5
通过lsdu查看,我们会发现一个非常有意思的事情
ls-l
-rw-r--r--1rootroot5.0GOct1322:
-rw-r--r--1rootroot193KOct1322:2
-rw-r--r--1rootroot5.0GOct1322:
会发现raw是5G
dutest*
2
会发现raw是0G
为什么会这样呢,这是因为ext4文件系统是一个支持稀疏特性的文件系统,当文件内容全部是空的时候,
ext4并不分配实际的空间。
那如果想要使用RAW方式,并希望一次占用完所有的空间,可以使用dd命令的方式。
qcow2的稀疏问题
qcow2方式也有稀疏的问题,在磁盘级别上看,镜像会有大量连续的相同空洞,比如刚创建的镜像的swap
分区,通过virt-sparsify我们可以消除这些空洞,从而缩小磁盘大小,便于我们传输磁盘镜像。
使用virt-sparsify前,我们需要先创建一个新的同样大小的镜像
25G
然后使用virt-sparsify,去除镜像空洞,语法为
virt-sparsify-x/root/2--convertqcow2/root/2
7.用guestfish操作虚拟机内部文件
虚拟机内部文件管理主要使用以下命令:
virt-df-Displayfreespaceonvirtualfilesystems
镜像磁盘空间使用查看
virt-ls-Listfilesinavirtualmachine
列出指定目录内文件
virt-cat-Displayfilesinavirtualmachine
显示指定文件内容
virt-edit-Editafileinavirtualmachine
编辑指定文件
virt-copy-in-Copyfilesanddirectoriesintoavirtualmachinediskimage.
将文件拷贝到虚拟机内部
virt-copy-out-Copyfilesanddirectoriesoutofavirtualmachinediskimage.q
将虚拟机内部文件拷贝出来
virt-tar-in-Unpackatarballintoavirtualmachinediskimage
tar压缩文件拷贝进虚拟机并解压
virt-tar-out-Packavirtualmachinediskimagedirectoryintoatarball.
镜像内指定目录文件拷贝并压缩
virt-tar-Extractoruploadfilestoavirtualmachine
解压或者上传文件到虚拟机
示例
查看镜像磁盘空间
2
Filesystem1K-blocksUsedAvailableUse%
2:/dev/sda119833732%
2:/dev/vmvg/root8%
查看镜像/root目录内容
2/root
.bash_history
.bash_logout
.bash_profile
.bashrc
.cshrc
.tcshrc
显示指定文件内容
2/root/
#Kickstartfileautomaticallygeneratedbyanaconda.
...
编辑指导文件
2/root/
文件拷贝进镜像及拷贝出镜像
2/root/
2/root//home
压缩文件拷贝进虚拟机并解压
/destination
压缩文件拷贝进虚拟机并解压
/
将虚拟机的home目录拷贝出来并打包
virt-tar-xdomname/
上传本地的压缩文件到虚拟机并解压
/tmp
ish修改镜像格式和大小
修改镜像格式和大小主要使用以下命令
virt-convert-convertvirtualmachinesbetweenformats
转化虚拟机镜像格式
virt-resize-Resizeavirtualmachinedisk
修改虚拟机镜像磁盘
示例
raw转qcow2格式
需要先用qemu-img命令创建一个一样大小的空qcow2格式镜像文件,然后使用virt-convert命令
2
原始镜像可以是vmware镜像vmx,kvm进行,ovf的镜像。
将指定的分区扩大5G
创建一个新的镜像,比原来大5G,然后扩展
virt-resize--expand/dev/sda2olddisknewdisk
将boot增加200M,剩下的空间扩充给/dev/sda2
virt-resize--resize/dev/sda1=+200M--expand/dev/sda2
olddisknewdisk
lv扩展
virt-resize--expand/dev/sda2--LV-expand/dev/vg_guest/lv_root
olddisknewdisk
扩展分区,并将raw格式转化成qcow2格式
215G
virt-resize--expand/dev/2
注意:
1如果是扩展分区,目标磁盘文件必须大于原生磁盘;
2磁盘缩小比较复杂,一般要求缩小到的空间远大于文件系统的大小。
ish挂载、修改、运行救援方式
guestmount-MountaguestfilesystemonthehostusingFUSEandlibguestfs
挂载镜像到某个目录
guestfish-thelibguestfsFilesystemInteractiveSHell
挂载镜像并得到一个交互的shell
virt-rescue-Runarescueshellonavirtualmachine
运行一个镜像的救援模式
示例
只读方式将镜像挂载到/mnt目录
-m/dev/sda1--ro/mnt
将linux虚拟机的根目录挂载到宿主机的/mnt目录
2-m/dev/sda2
guestfish编辑镜像grub文件
--mount/dev/vg_guest/lv_root
--mount/dev/sda1:/boot
edit/boot/grub/
进入镜像的救援模式
$virt-rescue--suggest-dFedora15
usethese
mountcommandsinvirt-rescue(atthe>
filesystems.
#/dev/vg_f15x32/lv_rootistherootofalinuxoperatingsystem
#type:linux,distro:fedora,version:15.0
#Fedorarelease15(Lovelock)
mount/dev/vg_f15x32/lv_root/sysroot/
mount/dev/vda1/sysroot/boot
mount--bind/dev/sysroot/dev
mount--bind/dev/pts/sysroot/dev/pts
mount--bind/proc/sysroot/proc
mount--bind/sys/sysroot/sys
Anotherwayistolistthelogicalvolumes(withlvs(8))andpartitions(withparted(8))
andmountthembyhand:
>
LVVGAttrLSizeOriginSnap%MoveLogCopy%Convert
lv_rootvg_f15x32-wi-a-8.83G
lv_swapvg_f15x32-wi-a-992.00M
>
>
>
Anothercommandtolistavailablefilesystemsisvirt-filesystems(1).
/mnt
ToruncommandsinaLinuxguest(forexample,grub),youshouldchrootintothe
/sysrootdirectoryfirst:
>
版权声明:本文标题:KVM镜像管理利器-guestfish 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1717353680a562607.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论