如何在无root密码、无法登录Redhat Linux虚拟机的情况下,从VMware宿主机获取虚拟机内的文件?
如何在无root密码、无法登录Redhat Linux虚拟机的情况下,从VMware宿主机获取虚拟机内的文件?
嗨,这个需求太贴合“给虚拟机硬盘‘拆下来’读文件”的思路了,我之前帮朋友处理过一模一样的问题,下面分步骤给你讲清楚怎么操作,不管宿主机是Linux还是Windows都能用:
第一步:先把虚拟机彻底关机
一定要确保虚拟机是完全关闭电源状态,别用挂起!不然磁盘文件处于锁定状态,根本没法挂载读取,这步是基础前提。
第二步:找到虚拟机的磁盘文件路径
打开你的VMware管理工具(不管是Workstation还是vSphere Client),找到目标虚拟机,进入「设置」界面,找到「硬盘」选项,里面会显示磁盘文件的存储路径,一般是.vmdk格式的文件。如果虚拟机有快照,注意看最新的快照对应的磁盘文件(通常命名是虚拟机名-000001.vmdk这类),挂载它才能拿到最新的数据;要是想省事,也可以先在VMware里合并所有快照再操作。
情况一:宿主机是Linux系统
咱们用通用的qemu-nbd工具来挂载(大部分Linux发行版都能通过包管理器安装,比如Debian/Ubuntu用apt install qemu-utils,CentOS/RHEL用yum install qemu-img):
- 加载nbd内核模块:
modprobe nbd max_part=8 - 把vmdk文件连接到nbd设备:
qemu-nbd -c /dev/nbd0 /path/to/你的虚拟机磁盘.vmdk(替换成实际的文件路径) - 查看磁盘分区:
fdisk -l /dev/nbd0,找到Redhat的根分区或存放目标文件的分区(一般是/dev/nbd0p2这类,看输出里的分区类型和大小判断) - 创建挂载点:
mkdir /mnt/vm-disk - 挂载分区:
mount /dev/nbd0pX /mnt/vm-disk(把X换成你找到的分区编号) - 现在进入
/mnt/vm-disk就能看到虚拟机里的文件了,直接复制到宿主机的其他目录就行 - 操作完别忘了卸载清理:
umount /mnt/vm-disk,然后断开nbd设备:qemu-nbd -d /dev/nbd0
要是你的Redhat用了LVM分区,挂载nbd设备后还得激活卷组:先跑
vgscan扫描卷组,再用vgchange -ay激活,最后挂载对应的逻辑卷(比如mount /dev/VolGroup00/LogVol00 /mnt/vm-disk)
情况二:宿主机是Windows系统
用VMware自带的vmware-mount工具就行,步骤如下:
- 以管理员身份打开命令提示符(CMD)
- 进入VMware Workstation的安装目录,比如:
cd "C:\Program Files (x86)\VMware\VMware Workstation" - 先查看vmdk里的分区信息:
vmware-mount /p "D:\VMs\你的虚拟机目录\磁盘文件.vmdk"(替换成实际路径),输出里会列出分区编号 - 把指定分区挂载到一个空盘符,比如:
vmware-mount Z: "D:\VMs\你的虚拟机目录\磁盘文件.vmdk" /p:2(这里的/p:2是分区编号,对应你要挂载的分区) - 打开「此电脑」就能看到Z盘了,直接找到目标文件复制出来就行
- 操作完卸载盘符:
vmware-mount /d Z:
备注:内容来源于stack exchange,提问作者GC_




