Я пытаюсь смонтировать образ KVM на хост-машине, чтобы исправить проблему с grub, но, похоже, где-то что-то идет не так.
Я пробовал следующие шаги:
mount -o loop,offset=32256 /var/lib/libvirt/images/vm1.img /mnt/vm1
mount -obind /dev/ /mnt/vm1/dev/
mount -obind /proc/ /mnt/vm1/proc/
mount -obind /sys/ /mnt/vm1/sys/
cd /mnt/vm1/
chroot .
grub-install
Я делаю вышеуказанные шаги, но при установке grub вижу следующее:
root@host:/# grub-install /dev/sda
grub-probe: error: Cannot find a GRUB drive for /dev/loop0. Check your device.map.
Auto-detection of a filesystem module failed.
Please specify the module with the option `--modules' explicitly.
Кто-нибудь знает, что мне не хватает или что делать дальше? Я хожу по кругу по этому поводу.
Проблема в том, что grub-install
установить в загрузочный сектор блок на основе BIOS (т.е. в реальном режиме). Да, это тот старый «настоящий режим» из эпохи PC / XT / AT, большинство * 86 машин до сих пор загружаются в этом режиме.
BIOS ничего не знает о ваших устройствах. В BIOS блочные устройства имеют один шестнадцатеричный идентификатор: дискеты имеют 0x00, 0x01, ..., а жесткие диски - 0x80, 0x81, 0x82, ... (CDROM, флеш-накопители для BIOS неизвестны, но в в большинстве случаев используется какой-либо тип эмуляции, при котором они выглядят как жесткие диски).
когда grub-install
вызывается, он должен сказать этому загрузочному коду реального режима, с каких устройств он должен загружать следующие этапы загрузчика. Это жратва, о которой вы скоро узнаете.
в devices.map
, вы говорите установщику grub, как он должен установить загрузчик BIOS, таким образом вы даете сопоставление между вашими блочными устройствами и их номерами BIOS (скоро во время загрузки!). Это должно быть где-то в /boot/grub
или в /boot/grub2
, или похожие.
После того, как вы установили grub в свое устройство с обратной связью, настоятельно рекомендуется вернуть devices.map
в исходное состояние.
Если вы знаете, что устройство обратной связи, на которое вы сейчас устанавливаете grub, будет первым жестким диском на первом этапе загрузки, вы можете просто присвоить ему идентификатор BIOS 0x80.
P.S. Это единственный способ сказать биос, что нужно знать о вашем устройстве loopback. В эпоху развития биосов устройства с обратной связью были очень, очень эзотерическими вещами, известными только большим машинам.
P.s.2 .: Есть инструмент под названием kpartx
который может найти разделы любого файла или устройства и сопоставить их с блочными устройствами сопоставления устройств. Я много играл с losetup .. ---offset
решения, как вы, по крайней мере, краткий поиск в Google за то, что я предлагаю сильным.