[原]挂载oVirt虚拟机磁盘

发布时间 2024-01-06 20:55:04作者: think8848

转载请注明作者(think8848)和本文链接http://think8848.cnblogs.com

挂载oVirt虚拟机磁盘

目标: oVirt Engine挂了后虚拟机无法启动,在其他Linux系统中挂载虚拟机磁盘找回数据。

此文目的是记录找回数据的过程,使用的方法不一定是最佳方案,欢迎有更好方法的大神提供最优方案

1. 准备工作

1.1 安装用于找回数据的Linux系统,我使用的是Ubuntu 22.04.3, 在安装过程中磁盘不采用lvm格式;此系统的磁盘一定要大,最好有接近要找回磁盘文件2倍大的剩余空间。

1.2 在oVert Node中找到磁盘文件,通常位于oVirt Node数据存储目录下的images目录中,例: /data/hdd1/230845d7-1164-4e44-8d98-a77ccfcd6fc8/images

为了能够在Engine挂了后还能找到对应的磁盘文件,强烈建议在创建虚拟机磁盘时填写磁盘的备注信息,否则可能无法确定哪个磁盘是您所需要找回的目标。

1.3 将磁盘文件复制到新安装的Ubuntu系统中。如果磁盘文件过大,或者在复制期间要关闭terminal工具(WiFi不稳定,下班要回家等等情况),建议使用后台复制,命令如下:

nohup scp -r xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx root@xxx.xxx.xxx.xxx:/root > nohup.out 2>&1

在复制的过程中可以使用bg命令查看复制是否正在进行。

如果磁盘过大,转输的网速又不够快,建议在传输磁盘文件之前先行压缩,推荐使用pigz进行多线程压缩/解压。

nohup tar --use-compress-program="pigz -p 70" -xvpf file.tar.gz &

上面示例中的-p 70参数意为使用70个线程进行解压,如果不指定-p参数则默认使用8个线程进行解压(我经过多次测试,貌似指定了70个线程,但实际上还是使用8个线程,不过确实比直接使用tar快很多)

强烈建议在oVirt Engine上创建虚拟机时按需分配虚拟机磁盘空间,否则在找回磁盘文件将消耗大量的磁盘空间和时间

2. 查看并处理Raw文件

2.1 为了方便操作文件,可将xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx形式的文件名修改为raw

mv xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx raw

2.2 查看raw文件分区情况

fdisk -l raw

2.3 将raw格式文件(注意:此处的文件名正好也是raw)转换为qcow2格式文件

# 安装qemu-utils工具
apt install -y qemu-utils
# 将raw格式文件转换为qcow2格式文件
nohup qemu-img convert -O qcow2 raw newfile.qcow2 & 

以上的文件操作在采用了SSD固态硬盘的情况下耗时数小时(我要挂载的虚拟机磁盘为2.5T),如果换作机械硬盘估计至少需要24小时以上。

3. 挂载qcow2格式磁盘

3.1 安装libguestfs-tools虚拟机磁盘管理工具

apt install libguestfs-tools -y

3.2 查看qcow2格式磁盘中的磁盘分区情况

virt-filesystems -a newfile.qcow2

3.3 挂载磁盘

guestmount -a newfile.qcow2 -m /dev/ubuntu-vg/ubuntu-lv /mnt

如果不出意外,进入/mnt目录就可以看到虚拟机磁盘中的数据了!

4. 其他需要说明的情况

4.1 本方法适用于在创建虚拟机时使用lvm逻辑卷的情况。使用lvm逻辑卷的好处很多,但是在挂载磁盘数据时会导致出现mount: unknown filesystem type 'LVM2_member'的情况。针对这个情况本文提供了解决方案。

4.2 如果在创建虚拟机时不使用lvm,而是使用了ext4磁盘格式,那么可以使用本文的方法,直接挂载ext4分区。

从某些层面而言,如果您大概率确定虚拟机的磁盘在将来使用时不需要扩容或者宿容,那么直接在创建虚拟机的时候就采用ext4格式,将来一旦出现oVirt Engine故障时,您可以快速高效的把文件抢救出来:)