Como eu posso especificar um disco diferente para ser root no grub.cfg quando rodar o grub-mkconfig (do script / não interativamente)?

6

Estou configurando um sistema de instalação automatizado para instalar o Ubuntu 12 e outros sistemas operacionais personalizados nos discos, que serão removidos e instalados permanentemente em novos computadores.

O problema está gerando a configuração do grub - se eu executar grub-mkconfig no sistema instalador, ele colocará o UUID do disco do sistema de instalação em vez do disco de destino. Existe uma maneira de dizer ao grub-mkconfig qual disco eu quero usar como root? Se eu chroot para o novo sistema vai usar o UUID que o sistema de arquivos parece estar? Ou eu tenho que recorrer a sed para substituir os comandos search no grub.cfg?

    
por Reed Hedges 05.07.2013 / 17:30

2 respostas

8

Sim, chroot ficará bem, no entanto , certifique-se de que o sistema em que você chroot se encaixa no sistema em que você chroot .

chroot com as montagens corretas, correspondem a realocar o sistema de inicialização (Kernel) para um novo sistema de arquivos sem reinicializar. - O chroot é usado para mover o sistema operacional para um novo disco sem reinicializar, mas também para instalar um sistema Linux a partir de um LiveCD e da mesma forma.

1) Monte sua partição normal do sistema. X é a letra da unidade. Y é o número da partição:% sudo mount /dev/sdXY /mnt

2) Somente se você tiver uma partição de inicialização separada (onde sdXY é a designação da partição / boot):% sudo mount /dev/sdXY /mnt/boot

3) Monte os sistemas de arquivos virtuais críticos.
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

4) Chroot no seu dispositivo de sistema normal:
sudo chroot /mnt

5) Instale o GRUB 2 (substitua o dispositivo correto por sda, sdb, etc. Não especifique um número de partição):% grub-install /dev/sdX

6) Recrie o arquivo de menu do GRUB 2 (grub.cfg) em update-grub

7) Execute outras tarefas, como atualizações, instalar aplicativos, configurar, etc.
...

8) Saia do chroot: CTRL-D no teclado

link

    
por 05.07.2013 / 17:43
0

Acabei usando o chroot para fazer isso, mas primeiro alterei manualmente o UUID do meu disco de destino no grub.cfg no disco de destino. Eu usei o comando blkdev para descobrir o UUID da partição de disco de destino. Parece algo assim ($ targetdir é o arquivo de destino localizado, $ diskdev é o dispositivo de disco visto do sistema host, por exemplo, / dev / sdb e $ partitiondev é a partição de disco, por exemplo, / dev / sdb1). Neste ponto, eu já particionei o disco, fiz mkfs, montei-o e copiei o conteúdo desejado do novo sistema de arquivos para o disco.

targetuuid='blkid -s UUID -o value $partitiondev'
test -n "$targetuuid" || error "Could not determine UUID for $partitiondev"
sed --in-place=orig 's/search .*/search --no-floppy --fs-uuid --set=root $targetuuid/' $targetdir/boot/grub/gub.cfg || error "Error setting correct UUID in $targetdir/boot/grub/grub.cfg"
mount -o bind /dev $targetdir/dev 
# could also bind other pseudo-filesystems like /proc as in Diblo Dk's answer.
chroot $targetdir grub-install --no-floppy --recheck $diskdev
umount $targetdir/dev # don't forget to unmount this first otherwise you can't unmount $targetdir later

[A propósito, caso alguém encontre alguns problemas tangenciais que tive ao fazer isso - usei a ferramenta "buildroot" para criar um sistema Linux mínimo em um initramfs para carregar a partir de uma inicialização de rede (pxe). Se você habilita o util-linux e selecione mount / umount em "utilitários de instalação", então uma versão um pouco quebrada do mount é instalada (substituindo o comando mount embutido no busybox), que parece travar todos A Hora. Além disso, eu tive que habilitar o uso de devtmpfs na configuração do kernel, e selecionar devtmpfs no buildroot, para que a religação do sistema de arquivos / dev funcionasse - Eu acho que na versão do busybox eu tenho a opção bind para montar só parece funcionar se você estão religando um sistema de arquivos e não um diretório dentro de um sistema de arquivos. Tudo isso com a versão builderot 2013.05, que usa a versão 1.21.1 do busybox, util-linux 2.22.2. Talvez estes tenham sido corrigidos desde.]

    
por 24.07.2013 / 21:35

Tags