Sziasztok!
Kaptam néhány VMDK és VMX fájlt, amelyek vmware alatt futtathato CentOS rendszereket tartalmaznak. A feladatom az, hogy Xen alatt futtassam őket. Feltettem a gépemre egy VMWare playert, amin hiba nélkül fut egy ilyen virtuális gép.
A disk image típusa RAW, ezért könnyedén blokkeszközzé alakítottam a loop driver segítségével, majd a kpartx paranccsal elérhetővé tettem a rajta levő partíciókat, végül aktiváltam a rajta levő LVM köteteket, és fel is tudtam mountolni őket, hogy körülnézhessek a rendszeren. Chroottal indítottam egy shellt a rendszeren, és megpróbáltam új initrd-t létrehozni, amely tartalmazza az ata_piix, valamint a xen hálózati és block drivert. Ezután mindent lemountoltam, megpróbáltam bebootolni Xen alatt.
Úgy tűnik, nem jártam sikerrel az említett driverek initrd-be integrálásával, mert mind HVM üzemmódban indítva (ehhez kellett az ata_piix driver), mint PV üzemmódban indítva bebootolt ugyan a kernel, és elindult az initrd-ben levő rendszer, de nem találta a harddisket, tehát a root fájlrendszer mountolása előtt elakadt a boot folyamat.
A kérdésem az, hogy egyáltalán milyen kernelre van szükségem a CentOS 7 Xen domU-ban történő futtatásához? Megfelel a VMWare környezetben használt 3.10.0-229.7.2.el7.x86_64, vagy le kell cserélnem egy kifejezetten Xen domU rendszerhez való kernelre. Ha igen, hogyan? Ha nem, hogy tudom beintegrálni a megfelelő Xen specifikus drivereket (kernel modulokat) a kernelbe. (Sajnos nem vagyok jártas a dracut és a grub2 világában.)
############# SZERK. 2015.09.11.:
Az elejétől fogva jól gondoltam, hogy a problémát az okozza, hogy pár xen domU specifikus driver hiányzik az initramfs-ből. A megoldás:
A RAW image-et blokkeszközzé alakítottam a loop driver segítségével, majd a kpartx paranccsal elérhetővé tettem a rajta levő partíciókat, végül aktiváltam a rajta levő LVM köteteket, és felmountoltam őket, valamint --bind mounttal a /proc
, a /sys
és a /dev
könyvtárakat is aktiváltam a vendég rendszeren. Ezek után chroottal indítottam egy /bin/bash
shellt az összeállított rendszerben, és újrageneráltam az initramfs-t, hogy benne legyenek a szükséges driverek. Ezt úgy értem el, hogy a /etc/dracut.conf
fájlba felvettem a add_drivers+="xen_blkfront xen_netfront"
opciót, majd a dracut paranccsal újrageneráltam az initramfs-t. Ezután a /etc/dracut.conf
fájlon eszközölt módosításokat már vissza lehet vonni, mert a Xen-en futó rendszer már külön utasítás nélkül is rájön majd, hogy szüksége van ezekre a driverekre.
Az initramfs újragenerálása után kiléptem a chroot shellből, lemountoltam a vendég fájlrendszereket, lebontottam a RAW image-re épülő LVM blokkeszköz-fát, kpartx-szel eltávolítottam a partíciókat, majd magát a loop eszközt is, hogy semmilyen virtuális blokkeszköz ne használja az image fájlt. Ezek után létrehoztam egy PVHVM típusú virtuális gépet az image-hez. Ez azonnal teljesen működőképes volt, leszámítva a soros konzol (xm console
) hiányát. Ezt úgy oldottam meg, hogy a virtuális framebufferen futó virtuális konzolba belépve kiadtam az alábbi parancsot:
systemctl enable serial-getty@ttyS0.service
Ezzel elértem, hogy a következő bootoláskor a Xen által biztosított virtuális /dev/ttyS0
soros porton is hallgatózzon egy getty. Ugyanez a rendszer egyébként teljesen paravirtualizál módban (PV) is elindul, amikor mindenféle trükközés nélkül azonnal működik az xm console
típusú hozzáférés a /dev/hvc0
paravirtualizált porton keresztül, azonban a CentOS kernele nem támogatja a paravirtualizált framebuffert, tehát nem lesz VGA konzolunk, viszont minden más tökéletesen működik (leszámítva, hogy a PV üzemmód rosszabb teljesítményt ad, mint a PVHVM).