Определите, работает ли в ВМ, и смонтируйте ли вы по-разному в зависимости от этого

Контекст: я второй человек, у которого была эта проблема - система с двойной загрузкой с общим разделом данных, плюс желание запустить одну из ОС в виртуальной машине на другой. Подумав об этом, я понял, что это потенциально можно решить, переместив крепление диска из /etc/fstab и в отдельный сценарий запуска, который монтирует раздел данных либо непосредственно с диска, либо из папки, совместно используемой программным обеспечением виртуальной машины, в зависимости от того, работает система в виртуальной машине или нет. В любом случае в том же месте в файловой системе.

Я бы предпочел метод, который может иметь три состояния: "Запуск в ВМ", "Запуск вне ВМ" и "Не могу сказать". Таким образом, если он работал в ВМ, но программное обеспечение ВМ было неправильно настроено, поэтому общая папка не отображается в виртуализированной ОС (это случилось со мной раньше), она не пытается подключить реальный диск и все сломать., К сожалению, это исключает единственную идею, которая у меня возникла: "проверить общую папку, а если ее там нет, предположим, что нет виртуальной машины".

Итак, как это можно сделать? Желательно без необходимости монтировать его вручную при каждой загрузке.

Если это уместно, одна ОС - это Windows 10, а другая - Linux Mint, и Mint будет той, которая находится в виртуальной машине (иногда).

1 ответ

Решение

В Linux любой Linux, работающий в среде VM, сигнализируется наличием флага гипервизора в / proc / cpuinfo. Итак, запустив гостевую версию Arch Linux на хосте Debian, я получаю (как sudo!):

# cat / proc / cpuinfo
процессор: 0
vendor_id: GenuineIntel
семья процессора: 6
модель: 61
Название модели: Intel(R) Core(TM) i7-5500U CPU @ 2,40 ГГц
степпинг: 4
процессор, МГц: 2394,460
размер кеша: 4096 кб
физический идентификатор: 0
братьев и сестер: 1
основной идентификатор: 0
ядер процессора: 1
апицид: 0
начальная апицид: 0
fdiv_bug: нет
f00f_bug: нет
coma_bug: нет
фпу: да
fpu_exception: да
Уровень процессора: 20
wp: да
флаги: FPU VME - де - псевдоэфедрин TSC MSR пае MCE CX8 APIC SEP MTRR PGE MCA CMOV погладить pse36 clflush MMX fxsr ße SSE2 системного вызова пх rdtscp лм constant_tsc xtopology nonstop_tsc eagerfpu ПНИ PCLMULQDQ мониторинга SSSE3 CX16 sse4_1 sse4_2 movbe POPCNT äes XSAVE AVX rdrand гипервизора lahf_lm ABM 3dnowprefetch rdseed
ошибки:
bogomips: 4790,45
размер clflush: 64
cache_alignment: 64
размеры адресов: физические 39 бит, виртуальные 48 бит
управление энергопотреблением:

Иногда для этого люди используют скрипт под названием virt-what (доступный в большинстве репозиториев), но это намного сложнее, чем в вашем случае; также требуется установка дополнительного программного обеспечения (virt-what и dmidecode, если это не поставляется по умолчанию с вашим дистрибутивом, как в случае, например, с Arch Linux).

Другие вопросы по тегам