1

У клиента есть несколько старых систем 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, и службы работают нормально - успех!

1 ответ1

1

У меня случилась похожая проблема (отсутствует драйвер, но здесь она, возможно, больше вызвана переходом с IDE/ATA на SCSI), поэтому из памяти:

  • получить файл /boot/initrd.img-2.6.27.7-9-pae (с физического сервера или с диска восстановления из виртуальной машины), а также /boot/System.map-2.6.27.7-9-pae
  • поместите их в /tmp на любом компьютере с Linux с помощью команд gzip, cpio и depmod (и fakeroot или root-доступ)
  • стать пользователем root или использовать fakeroot для симуляции (позже для cpio)

    $ fakeroot
    # mkdir /tmp/cpio
    # cd /tmp/cpio
    # gunzip < /tmp/initrd.img-2.6.27.7-9-pae | cpio -i -m
    
  • Сложная часть: выясните , какой драйвер может отсутствовать в /tmp/cpio/lib/modules/2.6.27.7-9-pae/ . Кажется, у вас есть список кандидатов. Некоторые проблемы, которые нужно предвидеть (и попытаться исправить): кажется, ваш физический сервер использует ATA /IDE, а не SCSI. Если вы перейдете с ATA на SCSI, ваши диски будут заменены с /dev /hda /dev /hdb ... на /dev /sda /dev /sdb ... и у вас снова возникнут проблемы с загрузкой (диски все еще не найдены) , Я думаю, что это то, что вы получили.

    • либо измените эмулируемое оборудование в соответствии с предыдущим оборудованием: используйте IDE /ATA, а не SCSI (Buslogic). Я бы сделал это. Возможно, тогда Suse 11 Rescue DVD будет достаточно.
    • или будьте готовы к редактированию (в виртуальной машине, загруженной с вашего спасательного компакт-диска, но, возможно, также в initrd где-то еще!) /etc /fstab, чтобы справиться со всем этим, изменив /dev /hdX на /dev /sdX. Поскольку ваша установка устарела, я бы не стал рассчитывать на современные настройки UUID = для решения этой проблемы. Я бы избежал этого решения, если бы я не знал все места для редактирования, кроме fstab

    Если какой-либо драйвер отсутствует, он либо действительно отсутствует, либо встроен (см. Depmod позже). Скопируйте с физического сервера или с виртуальной машины, загруженной с аварийного компакт-диска, или даже из какого-либо репозитория Suse (если вы уверены, что это та же самая версия) модули, которые вы должны добавить в /tmp/cpio/lib/modules/2.6.27.7-9-pae/ . Обратите внимание, что некоторые модули имеют зависимости, в сомнении ставят больше, чем нужно (если есть место в виртуальной машине /boot ...)

  • затем пересобрать список зависимостей модулей

    # depmod -b /tmp/cpio -F /tmp/System.map-2.6.27.7-9-pae -v 2.6.27.7-9-pae
    

    Вы можете проверить в /tmp/cpio/lib/modules/2.6.27.7-9-pae/modules.builtin ли отсутствует отсутствующий модуль (непосредственно в ядре)

  • перепаковать дерево (и перезаписать предыдущий файл initrd)

    # cd /tmp/cpio
    # find . -print0 | cpio -o -0 -H newc |gzip -9 > /tmp/initrd.img-2.6.27.7-9-pae
    

Верните этот файл в /boot на виртуальной машине. ВМ теперь должна загрузиться правильно

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .