AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 787990
Accepted
Marcelo
Marcelo
Asked: 2024-12-12 08:51:38 +0800 CST2024-12-12 08:51:38 +0800 CST 2024-12-12 08:51:38 +0800 CST

如何才能可靠地将物理磁盘用作 VMware 客户操作系统磁盘且无风险?

  • 772

我有一台双启动机器,其中安装了两个 Linux,一个是我的主系统,另一个是一种恢复安装,以防主安装出现问题(用于修复主安装甚至在紧急情况下使用它)。

由于我尝试使此辅助安装保持最新,因此需要定期更新软件包等。问题是,这需要不时启动它,这很耗时,更不用说,非常烦人。

为了解决这个问题,我设置了一个 VMware 客户机,它使用第二个安装物理磁盘作为其虚拟磁盘,这样我就可以将第二个安装作为后台任务进行维护(大多数时候)。

问题在于,在虚拟机上使用物理磁盘存在一些已知风险,其中最重要的是值得一提的风险:

  1. 在主操作系统安装了一个或多个分区时启动虚拟机的可能性,通常会导致损坏和数据丢失。
  2. 由于每次启动时内核无法保证设备统一命名,因此 VMware 可能会意外使用错误的物理磁盘。至少理论上,同一个磁盘可以/dev/sdX在不同的启动时分配给不同的节点。

我怎样才能防止这种情况发生?

virtual-machine
  • 1 1 个回答
  • 29 Views

1 个回答

  • Voted
  1. Best Answer
    Marcelo
    2024-12-12T08:51:38+08:002024-12-12T08:51:38+08:00

    为了解决该问题中提到的风险,我们将编写一条 udev 规则,以确保 VMware 始终使用正确的磁盘。此外,除非由用户明确挂载,否则它还确保其任何分区都不会被基于 udisks 的实用程序和环境自动挂载(通常在 下/run/media/<user>/...):

    您可以将以下文件另存为/etc/udev/rules.d/70-persistent-vmdk.rules

    # The purpose of these rules is to make sure vmware will use the correct phisical device as a virtual disk.
    # All rules are based on the disk serial numbers, which can be obtained running:
    #   "udevadm info --query=all --name=/dev/<device>"
    # and looking for a line like this:
    #   "E: ID_SERIAL=<serial>"
    #
    # After editing this file with the correct serial number, execute:
    #   "udevadm control --reload-rules"
    #   "udevadm trigger"
    
    # Serial and node numbers associations:
    SUBSYSTEM=="block", ENV{ID_SERIAL}=="<serial 1...>", ENV{VMDK_NODE_NR}="0", GOTO="VMDK_MATCH"
    SUBSYSTEM=="block", ENV{ID_SERIAL}=="<serial 2...>", ENV{VMDK_NODE_NR}="1", GOTO="VMDK_MATCH"
    
    GOTO="VMDK_END"
    
    LABEL="VMDK_MATCH"
    
    # Prevent udisks based automount utilities to mount the disk under "/run/media/<user>/..."
    SUBSYSTEM=="block", ENV{UDISKS_IGNORE}="1"
    SUBSYSTEM=="block", ENV{UDISKS_AUTO}="0"
    
    # Create a symlinks to "/dev/vmdisk<node number>[p<partition>]"
    SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", SYMLINK+="vmdisk$env{VMDK_NODE_NR}"
    SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", SYMLINK+="vmdisk$env{VMDK_NODE_NR}p%n"
    
    LABEL="VMDK_END"
    

    然后,配置 VMware 以使用/dev/vmdisk0设备的规范名称(如/dev/sda,,, ... /dev/sdb)/dev/nvme0n1p1。

    请注意,如果您将符号链接指定为设备路径,vmware 最初将拒绝添加物理设备。没关系,首先使用其规范名称创建它,然后关闭 vmware并编辑 vmdk 文件。

    那里应该有一行像这样的字:

    RW 1000215216 FLAT "/dev/sda" 0
    

    仅替换设备名称,不要触碰其他任何内容:

    RW 1000215216 FLAT "/dev/vmdisk0" 0
    

    当然,您可以增加这些 udev 规则,以根据序列号添加更多磁盘并命名它们/dev/vmdisk2,/dev/vmdisk3...

    OBS:已在 VMWare Workstation 17.5 上测试


    发布这个问题的主要目的是分享我开发的技术并帮助其他人,所以我在回答我自己的问题。

    任何改进和其他补充答案都非常受欢迎。

    • 0

相关问题

  • VirtualBox guest Win10 @ Linux 主机在启动时挂了很大的时间,如何排除故障?

  • Debian 9:如何在 QEMU-Host 和 QEMU-Guest (Windows) 之间设置 Samba-Exchange?

  • 如何手动触发来宾上的 virtio 气球驱动程序?

  • 如何在运行时从命令行更改 KVM VNC 端口?

  • LXC 容器内部从零开始的 Linux

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve