Назад | Перейти на главную страницу

Как мне извлечь 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, обратный порядок байтов, но кроме ссылок на проблемы с извлечением rpms rhel6 в системах rhel5 я не нашел никаких упоминаний. Это rhel7.3 пытается извлечь свой собственный файл initrd, поэтому в нем не должно быть несоответствий версий.

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

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

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

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

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