Не уверен, что это все еще интересно, но для будущих гуглеров, таких как я:
При загрузке / установке из grub используются два отдельных корневых
каталога. Это корень grub и корень linux (я не уверен, что это технический термин).
Корень grub может быть установлен в grub.cfg
, и он определяет, какие файлы легко видны в grub. Корневой каталог grub по умолчанию должен быть корневым каталогом загрузочного диска grub, поэтому, если содержимое вашего загрузочного диска:
/boot/
/boot/grub2/
/boot/grub2/grub.cfg
...
Тогда расположение grub.cfg из корня grub будет /boot/grub2/grub.cfg
Корень grub можно изменить в grub.cfg, используя set root =
.
Вы можете использовать это, чтобы установить корень в каталог внутри текущего корня ( set root = / boot /
приведет к тому, что grub.cfg
будет расположен по адресу /grub2/grub.cfg
), который ведет себя аналогично chroot
в Linux.
Вы также можете изменить текущий корень на другой диск ( set root = (hd0,1)
установит ваш корень на hd0, раздел 1. Полный список устройств, которые вы можете использовать, см. страница grub об этом http://www.gnu.org/software/grub/manual/grub.html#Device-syntax ).
Хотя изменение корневого каталога grub может быть полезно, вы также можете префикс любого пути тем, что вы собираетесь использовать (например, linux (hd0,1): / boot / OS / RHEL / isolinux / vmlinuz
вместо сначала установите root = (hd0,1)
).Кроме того, после запуска ядра корень grub не имеет значения
Что касается корня Linux , это параметр, который вы можете передать ядру (vmlinuz) при его загрузке. Для этого вы можете передать ядру параметр root =
(это значение появится в / proc / cmdline)
Однако важно отметить, что этот новый корень, как ожидается, будет содержать корневую файловую систему Linux (см. для / etc / / var / и так далее). При установке вы предоставляете initrd (INITial Ram Disk), который содержит эти элементы, поэтому вам, вероятно, не нужно / не нужно менять корень Linux во время установки.
Если вы все же меняете корень Linux, будьте осторожны с установочным носителем Linux, который не является корневой файловой системой Linux, хотя внутри находится initrd.img.
Если вы пытаетесь использовать файлы в вашем iso в качестве аргументов вашего ядра, тогда есть решение. Если вы создадите устройство loopback в grub, оно будет сохраняться при запуске ядра (так что вы должны увидеть устройство с именем / dev / loop0
в корне Linux во время установки)
Я дам небольшой фрагмент файла grub.cfg, который относится к ISO и RHEL, в частности:
menuentry "RHEL" {
set isofile='/boot/iso/RHEL.iso' #this is just a grub variable
loopback loop $isofile #mount the $isofile with label=loop as a loopback device
set root=(loop) #set the grub root to the mounted iso (so / is the top level directory in the iso)
#this starts the kernel and passes the paramter inst.stage2 using the ISO and kickstart as a location on the loopback device created by grub (the syntax for this line is liable to change between distros)
linux /isolinux/vmlinuz noeject inst.ks=hd:/dev/loop0:/ks/ks.cfg inst.stage2=hd:LABEL=USBDRIVELABEL:/$isofile
initrd /isolinux/initrd.img #provide an initial ramdisk (which will become the **Linux root**
}
Имейте в виду, что синтаксис строки ядра в grub.cfg следующий:
linux [path to kernel] [kernel argument 1] [kernel argument 2] ...
Все аргументы ядра появятся в / proc / cmdline
. Важно отметить, что, поскольку они обрабатываются, синтаксис grub ядра недопустим.
Вы можете найти больше об этом в документации grub ( http://www.gnu.org/software/grub/manual/grub.html#Introduction )
и на странице Archwiki параметров ядра ( https://wiki.archlinux.org/index.php / kernel_parameters # GRUB )
, а также параметры загрузки для соответствующего дистрибутива (RHEL https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/ chap-anaconda-boot-options.html # list-boot-options-sources )
Портативного способа сделать это не существует. Существует программа https://github.com/nelhage/reptyr, которая может делать это в Linux (, она использует ptrace и вставляет все системные вызовы ), но я не знаю, насколько она надежна и поддерживается ли она до сих пор. YMMV.