我最近研究了 Rocky Linux(最基础的),有时我会“摆弄”操作系统(做一些实验来了解它以及它的工作原理)。为了不将它安装在实际的 PC 上,我将其安装在 VirtualBox 上,为了不每次都被迫进行安装,我将全新安装克隆到一个vmdk
文件中,因此每次出现问题时,我都可以简单地使用这个克隆并继续,而不必重新安装它。
当我输入pvs
、vgs
或lvs
命令时,出现错误,我已经找到解决方法了:
Devices file sys_wwid t10.ATA_____VBOX_HARDDISK___________________________VB7f1e0511-0347cdea_ PVID bpNp2fn5ADn82LP89ic7346tJcwqJkG6 last seen on /dev/sda2 not found.
但是,我不明白为什么会发生这种情况(我的意思是,即使我创建文件时也会发生这种情况ova
!),当我尝试删除此 PVID 时,收到一条警告消息:
[root@localhost ~]# lvmdevices --delpvid bpNp2fn5ADn82LP89ic7346tJcwqJkG6
Devices file sys_wwid t10.ATA_____VBOX_HARDDISK___________________________VB7f1e0511-0347cdea_ PVID bpNp2fn5ADn82LP89ic7346tJcwqJkG6 last seen on /dev/sda2 not found.
Device /dev/sda2 is used by an active LV, continue to remove? n
Device not removed.
这很令人困惑。我曾经输入过“y”,并没有发生任何不好的事情(系统仍然正常工作),但我不知道为什么每次克隆都会发生这种情况。
更新,这是重启后的样子:登录为:root [电子邮件保护]的密码:使用以下命令激活 Web 控制台:systemctl enable --now cockpit.socket
Last login: Mon Apr 24 16:21:58 2023 from xxx.xxx.xxx.xxx
[root@localhost ~]# lvs
[root@localhost ~]# pvs
[root@localhost ~]# vgs
[root@localhost ~]# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6d59c969
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 41943039 39843840 19G 8e Linux LVM
Disk /dev/mapper/rl-root: 17 GiB, 18249416704 bytes, 35643392 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/rl-swap: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
(如您所见,,lvs
并pvs
返回vgs
... 无)
答案1
经过许多令人沮丧的日子后,我发现我做错了什么。
我使用了完整克隆方法,而不是链接克隆。当我这样做时,VMDK 文件的 UUID 发生了变化,而 Rocky Linux 系统习惯于原始 UUID,因此新机器“损坏”并且没有 LVM。
“完整克隆”也像我复制 VMDK 文件(不包含其他配置文件),然后将复制的 VMDK 文件附加到新机器,或者我使用 VBox 的导出方法(到 OVA)导出 VM,然后重新导入。
如果将来有人遇到这个问题,我的解决方案是:
- 安装 Rocky Linux(我更喜欢文本模式,但您可以选择任何您想要的)
- 安装完成后,关闭虚拟机(在文本模式下:alt+tab,然后
shutdown -P +0
) - 导航到 VirtualBox 目录(例如
C:\Users\<your username>\VirtualBox VMs
:)并找到您的虚拟机目录(例如:“rocky-9.1-x86_64-dvd
”) - 备份机器(可以在其他主机上使用!) - 压缩整个目录(建议使用 7z),并将备份保存在某处(我将其保存在我的 NAS 服务器上)。你不知道是否以及何时会需要它。
- 在 VirtualBox Manager 中,选择机器,使用克隆向导以“链接克隆”方法克隆机器,确保未选中“附加选项”复选框(“保留磁盘名称”和“保留硬件 UUID”);还建议更改 MAC 地址。
- 每当您想使用这台机器时,请在另一台主机上提取 7z,然后使用 VBox 的“添加”按钮将文件加载
.vbox
到提取的目录中。机器应该像在原始主机上一样工作(除非您需要在设置中进行一些更改,这取决于新主机和旧主机)。然后您只需重复步骤 5 即可 :)
答案2
VirtualBox 在克隆驱动器时会更改驱动器标识符,因为它内部使用它来区分它们。您的克隆似乎包含不同的驱动器,并且 LVM 正确识别出原始驱动器已丢失。
VirtualBox 实际上有一个内置功能可以实现您想要的功能:快照。对已知良好的 VM 进行快照。您稍后可以回滚。快照不会克隆驱动器,因此它不会更改其 ID 并且不会浪费主机的磁盘空间。
实际上您已经使用了此功能,因为 VirtualBox 在创建链接克隆时会创建一个快照。克隆实际上是在该快照的基础上构建的,而原始 VM 可以单独修改。
答案3
问题:克隆的虚拟机的硬盘序列号不匹配,导致 LVM 遇到识别问题。
解决方案:
lsblk -o NAME,MODEL,SERIAL
使用命令列出块设备及其型号和序列号来识别硬盘的正确序列号。找到克隆磁盘的正确序列号。更新文件中的序列号
/etc/lvm/devices/systemdevices
以反映克隆磁盘的正确序列号。IDTYPE=sys_wwid IDNAME=t10.ATA_VBOX_HARDDISK_VB<correct_serial_number> DEVNAME=/dev/sda2 PVID= PART=2<correct_serial_number>
用从命令获得的实际值替换lsblk
。
在提供的示例中,进行了以下更改
从:
IDTYPE=sys_wwid IDNAME=t10.ATA_VBOX_HARDDISK_VBa0cd5ac0-b51def01 DEVNAME=/dev/sda2 PVID=jTccnAUtUAACo2ye9I22IlFO0wThNegN PART=2
到:
IDTYPE=sys_wwid IDNAME=t10.ATA_VBOX_HARDDISK_VB569d205b-20417ce8 DEVNAME=/dev/sda2 PVID= jTccnAUtUAACo2ye9I22IlFO0wThNegN PART=2
此更改可确保 LVM 系统根据从 获得的信息识别出克隆硬盘的正确序列号lsblk
。