Пришлось внести несколько изменений в ответ @xn. для Mac. Это сработало для меня:
brew install gawk
7z rn windows.zip $(7z l windows.zip | grep '\\' | gawk '{ print $6, gensub(/\\/, "/", "g", $6); }' | paste -s -)
После этого initrd/initramfs (извлекается и монтируется только историческая разница ), запускается скрипт /init. В основном он только монтирует настоящий корень с помощью модулей из initramfs.
И затем он должен повернуть/переключить корень на этот новый раздел, что возможно только при pid 1.
Вот минимальный скрипт /init:
mkdir /newroot
mount /dev/sda2 /newroot
mount --move /sys /newroot
mount --move /dev /newroot
mount --move /proc /newroot
switch_root /newroot /bin/bash
(или /sbin/init для нормального продолжения)
Дело в том, что ядро не может смонтировать /dev/sda2 без встроенных необходимых модулей. Наличие модулей на sda2 не помогает :egg -и -проблеме hen.
Итак, ядро получает cpio-архив с корневой файловой системой, содержащей модули и скрипты. Ядро просто передает /init и завершает свой собственный запуск.
Эта ссылка на gentoo начинается с:
initramfs is a root filesystem that is embedded into the kernel...
Что это должно означать?
Это минимальная командная строка ядра:
vmlinuz root=/dev/sdaX
приказывает загрузчику загрузить ядро «vmlinuz» и приказывает ядру смонтировать /dev/sdaX.
И это:
vmlinuz initrd=initramfs.img root=/dev/sdaX
заставляет загрузчик также загружать initrd, который ядро обнаружит и смонтирует как root, и сообщает (сценарию по умолчанию )/init, чтобы повернуть/переключиться на /dev/sdaX (, а затем запустить по умолчанию /sbin/init ).