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

/dev/vmvg/root

linux

i386

centos

CentOSrelease5.3(Final)

5

3

rpm

yum

omain

installed

/

/boot

virt-inspector2windows虚拟机示例

i386

windows

MicrosoftWindowsServer2003

5

2

/WINDOWS

ControlSet001

ks-55e1e4a74d40

installed

/

ntfs

4A5061F55061E7E1

/dev/sda1

GoogleChrome

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>prompt)tomountthe

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:

>lvs

LVVGAttrLSizeOriginSnap%MoveLogCopy%Convert

lv_rootvg_f15x32-wi-a-8.83G

lv_swapvg_f15x32-wi-a-992.00M

>mount/dev/vg_f15x32/lv_root/sysroot

>mount/dev/vda1/sysroot/boot

>ls/sysroot

Anothercommandtolistavailablefilesystemsisvirt-filesystems(1).

/mnt

ToruncommandsinaLinuxguest(forexample,grub),youshouldchrootintothe

/sysrootdirectoryfirst:

>chroot/sysroot

本文标签: 镜像文件挂载使用磁盘