У клиента есть несколько старых систем Linux, выпущенных от пяти до пятнадцати лет назад, которые все еще работают на оригинальном оборудовании. Из-за опасений по поводу возраста дисков и т.д. Они хотели бы, чтобы все они были виртуализированы на VMware vHosts.
Мне удалось виртуализировать Windows-машины практически любого возраста 21-го века с помощью автономного конвертера VMware, и при этом с 100% -ным успехом. Однако попытка сделать то же самое с машинами Linux неизменно приводит к сбою, и виртуальная машина, которая не загружается, обычно выдает ошибку в духе «паника ядра, невозможно запустить /init».
Я обнаружил, что если я смонтирую ISO-образ спасательного компакт-диска и загрузлю его, а затем выберу "загрузить Linux с жесткого диска", системы загрузятся, и я смогу войти в систему, однако вместо этого у них будет запущено ядро аварийного компакт-диска. встроенного, что приводит к сбоям при попытке, например, повторно добавить фиктивные интерфейсы на радиус-сервере - при попытке запустить "modprobe dummy", процесс бомбардирует с помощью:
FATAL: Could not load /lib/modules/3.14.50-std460-amd64/modules.dep: No such file or directory
При проверке каталога /lib /modules файл, который присутствует:
/lib/modules/2.6.27.7-9-pae/modules.dep
Что соответствует тому, что uname -r возвращает на исходной физической машине:
uname -r
2.6.27.7-9-pae
На виртуальной машине P2V, загруженной с загрузочного компакт-диска, это дает
uname -r
3.14.50-std460-amd64
На физической машине init находится в /sbin /init, а корневая файловая система - /dev /sda2:
rad02:~ # which init
/sbin/init
rad02:~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 3.2G 16G 17% /
udev 243M 7.6M 236M 4% /dev
/dev/sda3 52G 15G 35G 30% /home
/dev/sdb1 74G 7.1G 63G 11% /var/log
На виртуальной машине я пытался загрузиться с жесткого диска и добавить root=/dev/sda2 init=/sbin/init
во время загрузчика, и я видел, что машина, кажется, пытается запустить оба /init и /sbin /init - но все равно не удается из-за ошибки «паника ядра, не удается запустить init».
Этот конкретный оригинальный компьютер работает под управлением openSUSE 11.1 (i586)
, но я надеюсь получить общий ответ, поскольку существует множество систем RedHat, SuSE и openSUSE, которые я хотел бы виртуализировать для этого клиента.
Что мне нужно сделать, чтобы виртуальные машины P2V запустили init и успешно загрузились?
Редактировать: Хорошо, спасибо тем, кто прокомментировал, я теперь лучше понимаю проблему - Grub хорошо видит диски, но не может сама система ядра, и это, скорее всего, связано с отсутствующим драйвером контроллера в /etc /sysconfig / строка initrd_modules файла ядра.
Вот что на оригинальном физическом хосте:
INITRD_MODULES="processor thermal ata_piix ata_generic piix ide_pci_generic fan jbd ext3 edd"
Вот что преобразование P2V поместило в файл виртуальной машины:
INITRD_MODULES="mptscsih mptspi mptsas scsi_transport_spi scsi_transport_sas BusLogic ahci pcnet32 processor thermal ata_piix ata_generic piix ide_pci_generic fan jbd ext3"
И после загрузки установочного DVD openSUSE 11.1 и запуска опции "восстановить установленную систему", которая была изменена на эту:
INITRD_MODULES="ahci mptsas ata_piix ata_generic piix ide_pci_generic jbd ext3"
При загрузке с более раннего аварийного компакт-диска я выполнил поиск по всем перечисленным модулям и по всей панели, где присутствовал драйвер ide_pci_generic - учитывая, что VMware предоставляет SATA Lsi Logic в качестве стандартного типа диска, который, как я полагаю, выиграл бы при использовании драйвера IDE?
У меня есть другая виртуальная машина P2V с запущенной openSUSE 10, у которой изначально была та же проблема с отказом от загрузки, но затем, после нескольких месяцев отключения, она неожиданно загрузилась правильно (и была перезагружена несколько раз, всегда успешно), просматривая /etc /sysconfig /kernel на том, который я получаю:
INITRD_MODULES="mptscsih mptspi scsi_transport_spi BusLogic pcnet32 piix ata_piix processor thermal fan jbd ext3"
Так куда мне идти отсюда?
Изменить 2:
Отмеченный ответ от AB ниже решил эту проблему.
Следуя приведенным инструкциям и используя запасную виртуальную машину, которая была установлена заново с той же версией Linux, что и машина, на которой мы пытались установить p2v, я создал три каталога в /tmp, физическом, виртуальном и комбинированном. Следуя указаниям, я извлек файлы initrd и System.map с физического компьютера и распаковал их в /tmp / Physical, затем извлек те же файлы с виртуальной машины, на которой я работал (то есть с работающей виртуальной машиной той же ОС), и распаковал те в /tmp / virtual.
Из любопытства я сделал diff для вывода du для каждого каталога, таким образом:
cd /tmp/physical
du > /tmp/ph.txt
cd /tmp/virtual
du > /tmp/vi.txt
cd /tmp
cat ph.txt |cut -d'.' -f2,3,4,5,6 |sort > ph-sorted.txt
cat vi.txt |cut -d'.' -f2,3,4,5,6 |sort > vi-sorted.txt
diff ph-sorted.txt vi-sorted.txt
Который дал этот вывод - очень небольшая разница, но несколько файлов:
21,22d20
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/hid
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/hid/usbhid
26c24,25
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/input
---
> /lib/modules/2.6.27.7-9-pae/kernel/drivers/message
> /lib/modules/2.6.27.7-9-pae/kernel/drivers/message/fusion
29,31d27
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/usb
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/usb/core
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/usb/host
Затем я скопировал полное содержимое обоих /tmp / Physical и /tmp / virtual в /tmp / combo (с виртуальной единицей, приходящей на секунду, чтобы перезаписывать любые конфликты).
Затем я сделал (как указано в ответе ниже)
depmod -b /tmp/combo -F /tmp/combo/System.map-2.6.27.7-9-pae -v 2.6.27.7-9-pae
который выбрасывал скрины ошибок зависимостей, но в остальном работал нормально, а затем
cd /tmp/combo
find . -print0 | cpio -o -0 -H newc |gzip -9 > /tmp/initrd-2.6.27.7-9-pae
Я загрузил сбойный p2v с аварийного компакт-диска и поместил его в сеть, скопировал на него initrd-2.6.27.7-9-pae
, отсоединил аварийный компакт-диск ISO и перезагрузил - и это сработало! openSUSE 11.1 успешно работает на виртуальной машине p2v, и службы работают нормально - успех!