Intereting Posts
Как перезапустить файловые операции (файл-проводник) на рабочем столе MATE? Вращающиеся журналы, созданные из tcpdump с logrotate Отключение миниатюр в Nautilus с помощью dconf Перемещение файла в файл, который читается 2 пароли для входа Проверка состояния оборудования RAID Live Получить свободное пространство в текущем каталоге в Bash Выполнить скрипт автоматически через pbrun? Перфорированное прерывание заняло слишком много времени, но перфорация не была установлена Что делает функция «экстентов» в файловой системе ext4 в Linux? Как исправить ошибку Fontconfig: не удалось прочитать файл конфигурации Получаете настоящую ОС с открытым исходным кодом, работающую на телефоне? Android? Что заставляет Mutt терпеть неудачу на этом пути Дружественный ресурс для указания программы пользователя не висит как я могу стереть сервер, к которому у меня нет физического доступа?

Как вы пишете grub.cfg menuentry для Debian Netinst (8.2 от написания) для загрузки через USB?

Я держу несколько дистрибутивов Linux на USB-накопителе и управляю ими, просто записывая записи grub.cfg для каждого дистрибутива. Другие дистрибутивы я держу на палочке и запускаю все отлично, но у меня (и других, похоже) возникли проблемы с Debian Jessie (8.x). Debian Netinst будет загружаться в интерфейс curses debian-installer, но затем пытается найти правильный файл iso debian, даже если в строке ядра в grub.cfg указан путь iso.

Я частично успешно пытался загрузить «debian-8.2.0-amd64-i386-netinst.iso» с USB-накопителя. Сначала я установил свой USB-накопитель, используя инструкции USB multiboot, найденные в ArchWiki .

Вот упрощенная структура файлов и папок USB-накопителя, за которой следуют соответствующие записи grub.cfg.

USBROOT/ ----boot/ ----grub/ ----grub.cfg ----(other grub paraphernalia) ----iso/ ----debian/ ----debian-8.2.0-amd64-i386-netinst.iso ----initrd.gz (special initrd) 

Хотя в iso есть initramfs, он не позволит debian правильно загружаться по причинам, которые я действительно не понимаю; это кратко объясняется в двух ссылках, которые я привел до сих пор.

Теперь мои записи grub.cfg. Я знаю, что это i386 / amd64 multiarch iso, но я просто сосредоточусь на 64-битной части для простоты. Если мы сможем вычислить 64-битную часть, я должен будет легко сделать еще одну запись для i386:

 probe -u $root --set=rootuuid set imgdevpath="/dev/disk/by-uuid/$rootuuid" menuentry 'Debian 8.2 Multiarch' { set isoname='debian-8.2.0-amd64-i386-netinst.iso' set isopath='/boot/iso/debian' set isofile=${isopath}/${isoname} set initrdfile=${isopath}/initrd.gz loopback loop $isofile linux (loop)/install.amd/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=${imgdevpath}/${isofile} config quiet initrd ${initrdfile}/initrd.gz } 

В стороне: изменение линии initrd на

 initrd ${initrdfile} 

делает grub (я думаю) бросаю ошибку. Grub останавливается на несколько мгновений, затем Debian пытается загрузиться и сразу же получит панику ядра – как и ожидалось, потому что он не может найти initramfs. Однако этого не происходит, когда я полностью выписываю путь, как показано в примере блочного кода. Почему это должно было бы вызвать ошибку, когда я укажу путь с заданными переменными, а не когда просто выписал полный путь вручную? Но мой главный вопрос:

Какие параметры загрузки ядра я должен предоставить, чтобы поиск не выполнялся, а iso находится по указанному пути. Установщик в конечном итоге находит правильный iso путем поиска, но зачем его искать?

Я почти уверен, что он имеет все, что связано с линией Linux:

 linux (loop)/install.amd/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=${imgdevpath}/${isofile} config quiet 

Я пробовал как минимум 20 вариантов темы, таких как изменение:

 iso-scan/filename=${isofile} findiso=${imgdevpath}/${isofile} findiso=${isofile} 

EDIT: я исправил проблему initrd: у меня были одинарные кавычки при определении $ initrdfile. Решение findiso / iso-scan / whatever все еще остается.

Поскольку вы загружаете netinst, вы можете полностью пропустить ISO и загрузить ядро + initrd прямо из вашей файловой системы USB. Это netboot di, он просто загрузит остальные компоненты из debian repo.

О поиске iso процесс выглядит примерно так:

  • grub загружает ISO и считывает ядро ​​и initrd в память (в вашем случае initrd уже был извлечен на USB-накопитель)
  • захватить руки в ядро
  • ядро контролирует скрипт initrd init
  • скрипт инициализации передает управление debian-installer
  • модуль iso-scan di монтирует все доступные диски, которые ищут iso-scan/filename
  • как только ISO будет найден и установлен на петлю, debian-installer продолжит процесс

(подробнее см. раздел 6.3.1.4 в документации по установке )

Когда вы /dev/disk/by-uuid/UUID/debian/debian8.iso путь, например /dev/disk/by-uuid/UUID/debian/debian8.iso это не имеет особого смысла, поскольку /dev/disk/by-uuid/UUID является блочным устройством, а не смонтированной файловой системой где файлы могут находиться.

Если вы хотите, чтобы изо-сканирование shared/ask_device=manual поиск вниз, помимо использования iso-scan / filename, вы также можете задавать значения * shared/ask_device=manual и shared/enter_device=/dev/disk/UUID (просто добавьте их в строку ядра )

Это должно быть ваше grub.cfg, тогда:

 set imgdevpath="/dev/disk/by-uuid/UUID" menuentry 'Debian 8.2 Multiarch' { set isofile='/boot/iso/debian/debian-8.2.0-amd64-i386-netinst.iso' loopback loop $isofile linux (loop)/install.amd/vmlinuz iso-scan/filename=$isofile shared/ask_device=manual shared/enter_device=$imgdevpath no-prompt no-eject initrd (loop)/install.amd/initrd.gz } 

Заметьте, что я действительно не тестировал это, я скопирую с аналогичной установки для более старой версии debian.

Я рекомендую вам начать с этого, и только если он не работает, попробуйте другой initrd. Также убедитесь, что он работает «вручную» перед считыванием зонда для UUID.

* Это те, которые я назвал «намеком» раньше. Думаю, я вспомнил намек с ubuntu или другого дистрибутива

Попробуйте это решение.

Отредактируйте свой grub.cfg чтобы он соответствовал правильному пути к вашему mini.iso . Каждый mini.iso уникален для архитектуры.

 menuentry "Debian Stable | Testing | Experimental AMD64 Netinst" { set isoname="mini.iso" set isopath="/boot/iso/debian/amd64" set isofile="${isopath}/${isoname}" echo "Using ${isoname}..." loopback loop $isofile linux (loop)/linux priority=low vga=788 --- initrd (loop)/initrd.gz } menuentry "Debian Stable | Testing | Experimental i386 Netinst" { set isoname="mini.iso" set isopath="/boot/iso/debian/i386" set isofile="${isopath}/${isoname}" echo "Using ${isoname}..." loopback loop $isofile linux (loop)/linux priority=low vga=788 --- initrd (loop)/initrd.gz } 

Загрузите mini.iso который соответствует вашей архитектуре здесь.

  • 64-битный
  • 32-битный

Удачи.