Как извлечь initrd, когда обычный cpio -i -m выдает бред?

Я пытаюсь следовать инструкциям здесь https://superuser.com/questions/1134160/how-to-get-old-linux-versions-to-boot-after-p2v-on-vmware для получения другой старой Linux-системы P2Vd чтобы загрузить, но на этот раз речь идет о RedHat 7.3. Отследив подходящий ISO для установки, я успешно установил свежую версию RH7.3 и сейчас пытаюсь извлечь файлы из его initrd, чтобы объединить их с файлами из сбойной версии P2V и создать новый initrd.

Однако когда я бегу

gunzip < initrd-2.4.18-3.smp.img |cpio -i -m

Отвечает

cpio: warning: skipped 485423 bytes of junk
cpio: warning: archive header has reverse byte-order
cpio: premature end of file

а затем пишет файл с именем ?lyyPjye?" (кроме ys и e - расширенные символы ASCII) с правами доступа к файлам c--S--S---

Предполагая, что это будет довольно просто, я попробовал поискать в Google и искал здесь различные комбинации cpio, initrd, обратного порядка байтов, но кроме ссылок на проблемы с извлечением rhel6 rpms в системах rhel5 я не нашел упоминаний. Это rhel7.3, пытающаяся извлечь свой собственный файл initrd, поэтому несоответствия версий не должны появляться в нем.

Как мне решить эту проблему, и понадобятся ли какие-либо специальные приемы для восстановления initrd впоследствии?

1 ответ

Решение

Я думаю, что ваше ядро ​​использует фактический (и устаревший) initrd: init RAM DISK. Не современный initramfs, который сохранил только старое имя. Так что это не архив cpio, а полный образ диска файловой системы.

Вы можете попробовать разжать его и попытаться mount --loop это где-то. Файловая система может быть чем угодно (ext2, cramfs ...)

Если это R / W, то его легко отредактировать, если это R / O, это будет сложнее.

Это описано там: https://www.kernel.org/doc/Documentation/initrd.txt

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