Não tenho certeza se isso ainda é interessante, mas para futuros googlers como eu:
Existem dois diretórios root
separados ao iniciar / instalar a partir do grub. Há o grub root e o linux root (não tenho certeza se esse é o termo técnico).
A raiz do grub pode ser definida dentro do grub.cfg
e determina quais arquivos são facilmente visíveis dentro do grub. A raiz padrão do grub deve ser o diretório raiz do grub de inicialização da unidade, portanto, se o conteúdo da sua unidade inicializável for:
/boot/
/boot/grub2/
/boot/grub2/grub.cfg
...
Em seguida, a localização do grub.cfg da raiz do grub é /boot/grub2/grub.cfg
A raiz do grub pode ser alterada no grub.cfg usando set root=
.
Você pode usar isso para definir a raiz em um diretório dentro da raiz atual ( set root=/boot/
causaria a grub.cfg
estar localizada em /grub2/grub.cfg
), que se comporta de maneira semelhante a chroot
no Linux.
Você também pode alterar a raiz atual para outra unidade ( set root=(hd0,1)
definiria sua raiz como hd0, partição 1. Para obter uma lista completa de quais dispositivos você pode usar, consulte a página do grub sobre ela link ).
Embora a mudança do root root possa ser útil, você também pode prefixar qualquer caminho com o que quer que fosse usar (e.x. linux (hd0,1):/boot/OS/RHEL/isolinux/vmlinuz
em vez de set root=(hd0,1)
primeiro). Além disso, uma vez que o kernel inicia, a raiz do grub é irrelevante
Quanto ao Linux root , esse é um parâmetro que você pode passar o kernel (vmlinuz) quando você carregá-lo. Para isso, você pode passar ao kernel um parâmetro root=
(este valor aparecerá em / proc / cmdline)
No entanto, é importante notar que esta nova raiz deve conter um sistema de arquivos raiz do Linux (procurando por / etc / / var / e assim por diante). Ao instalar você fornece o initrd (INITial Ram Disk) que contém esses elementos, então você provavelmente não quer / precisa alterar a raiz do Linux durante a instalação.
Se você alterar a raiz do Linux, tenha cuidado, pois a mídia de instalação do Linux não é um sistema de arquivos raiz do Linux, embora o initrd.img contido seja.
Se o que você está tentando fazer é usar arquivos dentro do seu iso como argumentos para o seu kernel, então existe uma solução. Se você criar um dispositivo de loopback no grub, o dispositivo persistirá quando o kernel iniciar (então você deve ver um dispositivo chamado /dev/loop0
na raiz do Linux durante a instalação)
Vou dar um pequeno trecho de um grub.cfg relacionado a ISOs e RHEL especificamente:
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**
}
Lembre-se de que a sintaxe da linha do kernel no grub.cfg é:
linux [path to kernel] [kernel argument 1] [kernel argument 2] ...
Os argumentos do kernel aparecerão em /proc/cmdline
. É importante notar que, porque eles são processados pelo kernel, a sintaxe do grub não é válida.
Você pode encontrar mais informações sobre isso na documentação do grub ( link )
e página do archwiki dos parâmetros do kernel ( link )
bem como opções de inicialização para sua distro relevante (RHEL link )