Вопрос или проблема
У меня есть компьютер с двумя установками Linux, одна из которых является основной системой, а другая – своего рода восстановительной установкой, которую я использую на случай, если что-то пойдет не так с основной установкой (для ремонта основной или даже для использования в экстренной ситуации).
Поскольку я стараюсь поддерживать эту вторичную установку в актуальном состоянии, это требует регулярного обновления пакетов и т.д. Проблема в том, что это требует загрузки ее время от времени, что занимает много времени и, мягко говоря, довольно раздражает.
Чтобы решить эту проблему, я настроил гостевую машину VMware, которая использует физический диск второй установки в качестве своего виртуального, что позволяет мне поддерживать эту вторичную установку в фоновом режиме (большую часть времени).
Проблема в том, что существуют некоторые известные риски использования физических дисков на виртуальных машинах, наиболее важные из которых стоит упомянуть:
- Вероятность загрузки виртуальной машины, в то время как основная ОС имеет одну или несколько своих разделов также смонтированными, что часто приводит к повреждению и потере данных.
- VMware может случайно использовать неверный физический диск из-за того, что именование устройств ядра не гарантируется при каждой загрузке. По крайней мере теоретически один и тот же диск может быть назначен разным узлам
/dev/sdX
при разных загрузках.
Как я мог бы предотвратить эту ситуацию?
Чтобы адресовать упомянутые в вопросе риски, мы напишем правило udev, которое гарантирует, что VMware всегда будет использовать правильный диск. Кроме того, если он не будет явно смонтирован пользователем, это также гарантирует, что ни один из его разделов не будет автоматически смонтирован утилитами и средами на основе udisks (обычно под /run/media/<user>/...
):
Вы можете сохранить следующий файл как /etc/udev/rules.d/70-persistent-vmdk.rules
# Цель этих правил заключается в том, чтобы гарантировать, что VMware будет использовать правильное физическое
# устройство в качестве виртуального диска и что udisks игнорирует его и его разделы.
#
# Все правила основаны на серийном номере диска, который можно получить, выполняя:
# udevadm info --query=all --name=/dev/<device>
#
# После редактирования этого файла с правильным серийным номером выполните:
# udevadm control --reload-rules
# udevadm trigger
# Замените все вхождения <serial> ниже значением, которое вы увидите на строке
# "E: ID_SERIAL=<serial>", которую вы получили, выполнив
# "udevadm info --query=all --name=/dev/<device>"
#
# Это предотвращает автоматическое монтирование диска утилитами на основе udisks под
# "/run/media/<user>/..." или подобным.
SUBSYSTEM=="block", ENV{ID_SERIAL}=="<serial>", ENV{UDISKS_IGNORE}="1"
SUBSYSTEM=="block", ENV{ID_SERIAL}=="<serial>", ENV{UDISKS_AUTO}="0"
# Это создает символьную ссылку на диск в /dev/vmdk
SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="<serial>", SYMLINK+="vmdisk0"
SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="<serial>", SYMLINK+="vmdisk0p%n"
Затем настройте 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/vmdisk0
, /dev/vmdisk1
…
Заметка: Это было протестировано на VMWare Workstation 17.5
Основная цель публикации этого вопроса заключалась в том, чтобы поделиться разработанными мной техниками, которые могут помочь другим, поэтому я отвечаю на свой собственный вопрос.
Любые улучшения и другие ответы, которые дополняют его, более чем приветствуются.
Ответ или решение
Для надежного использования физического диска в качестве диска гостевой ОС VMware без рисков важно учитывать несколько ключевых аспектов, касающихся как самих настроек виртуализации, так и управления устройствами в операционной системе. Ниже я опишу подробно, как избежать основных проблем, связанных с использованием физического диска в обстановке VMware.
1. Проблема с монтированием разделов
Одна из главных угроз, связанных с использованием физического диска, заключается в том, что VM может загрузиться при уже смонтированных разделах основной операционной системы. Это может привести к повреждению данных и потере информации. Чтобы предотвратить это, рекомендуется использовать правила udev
, которые запрещают автоматическое монтирование разделов, относящихся к вашему физическому диску.
# Определение серийного номера устройства
udevadm info --query=all --name=/dev/sdX
На основе полученного серийного номера создайте файл правил:
/etc/udev/rules.d/70-persistent-vmdk.rules
Примерное содержание файла:
SUBSYSTEM=="block", ENV{ID_SERIAL}=="<serial>", ENV{UDISKS_IGNORE}="1"
SUBSYSTEM=="block", ENV{ID_SERIAL}=="<serial>", ENV{UDISKS_AUTO}="0"
2. Использование правильного физического диска
Чтобы избежать ситуации, когда VMware использует неправильный физический диск из-за изменений в порядке dev/sdX
, рекомендуется создать символьные ссылки (symlinks) на волновом интерфейсе. Это обеспечивает стабильность доступа к дискам независимо от их текущего назначения в системе при загрузке.
В файле правил добавьте следующие строки для создания ссылки:
SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="<serial>", SYMLINK+="vmdisk0"
SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="<serial>", SYMLINK+="vmdisk0p%n"
3. Конфигурация VMware
После настройки правил udev
, вам необходимо рассказать VMware, чтобы он использовал символьную ссылку вместо стандартного имени устройства. Изначально создайте конфигурацию в VMware с использованием Canonical имени устройства, затем закройте VMware и отредактируйте файл VMDK.
Найдите строку, указывающую на ваше устройство:
RW 1000215216 FLAT "/dev/sda" 0
Замените её на:
RW 1000215216 FLAT "/dev/vmdisk0" 0
4. Завершительные действия
После внесения изменений выполните команду перезагрузки правил udev
:
udevadm control --reload-rules
udevadm trigger
И также убедитесь, что вы создали резервные копии всех важных данных, прежде чем вносить изменения. Эти меры минимизируют риски потери данных при использовании физического диска в качестве виртуального.
Заключение
Соблюдение вышеуказанных мер предосторожности поможет избежать серьезных проблем при использовании физического диска как диска для гостевой ОС в VMware. Внедрение udev
правил и использование символьных ссылок обеспечат стабильность и снизят риск повреждения данных, позволяя вам эффективно обслуживать вторую установку Linux.
Если у вас есть другие методы или улучшения, которые могли бы дополнить этот процесс, не стесняйтесь ими делиться. Ваш опыт может помочь многим пользователям, сталкивающимся с аналогичными задачами.