Questão redimensione / reduza o sistema de arquivos raiz com o grub2 (isto é: antes que ele seja montado)


Contexto: 

  • alguns servidores remotos 7 32bit debian
  • acessível apenas via SSH
  • mais da metade dos discos estão vazios
  • 1 partição de disco inteira por servidor
  • janela de manutenção pequena, não pode ser para baixo por muito tempo
  • sistemas de arquivos ext4
  • OBSERVAÇÃO: Estou desenvolvendo minha solução usando uma VM do VirtualBox, mas os servidores são bare metal direto.

Objetivo: atualize o SO para o Debian 9+, de forma não-destrutiva, pois o ideal é que a máquina permaneça ativa até a reinicialização no novo sistema operacional.


Então, para cada servidor, eu planejo (outras sugestões bem-vindas) para fazer o seguinte:

  1. Encolher os atuais 7 rootfs deb com resize2fs para um pouco menos que 1/2 do tamanho da partição
  2. Encolher a partição para limpar o disco
  3. Particione o espaço recém-liberado (/, / home, swap) e instale o LVM2
    (crie VG, LV, etc.) e Debian 9

Minhas problema é que resize2fs só pode encolher ext4 fs SE desmontado. Portanto, a idéia é usar a imagem initrd ou initramfs para chamar resize2fs no unmounted / dev / sda1 durante a seqüência de bootloading do GRUB2.

Eu construí minha própria imagem initrd contendo um binário resize2fs estático e um script de shell que o chama (e faz outras validações etc.), mas parece que eu acertei um obstáculo tentando escrever a entrada correta no arquivo grub.cfg para fazer ele monta minha imagem initrd e executa meu script de redimensionamento no unmounted / dev / sda1.

Então meu Questão é:

Que menu do grub.cfg eu preciso escrever para carregar minha imagem initrd customizada contendo meu script /bin/resize.sh e depois executá-lo (o /bin/resize.sh)?


2


origem


O que fiz anteriormente (e possivelmente arriscado?) É configurar um sistema de arquivos mínimo temporário em um ramdisk e pivot_root, permitindo a desmontagem do disco sem perder o acesso SSH. Usou-o antes para alterar completamente o tipo de sistema de arquivos raiz, portanto, o encolhimento deve funcionar. Se você quiser seguir esse caminho, me avise e eu posso escrever de manhã. - Bob
Além disso, qualquer que seja o método usado, sugiro que você tenha backups atualizados e que possam ser restaurados, caso o pior aconteça. - Bob
Oi @Bob, na verdade eu li sobre o uso do técnica pivot_root  mas eu senti que era um pouco mais arriscado e complexo (muitos passos) do que simplesmente fazer o redimensionamento do grub (ie: antes de montar qualquer partição). Eu estou tentando mantê-lo relativamente simples e também scriptable (ou seja: execução autônoma, se possível). Dito isso, eu definitivamente estaria interessado em obter mais detalhes sobre o caminho que você escolheu. Desde já, obrigado. - Martin Vincent
Ah, eu encontrei o que eu baseei meu fora, que é um guia bastante abrangente (e funciona em configurações do systemd, ao contrário do que você vinculou). A única modificação que fiz foi gerar a raiz temporária com debootstrap ao invés de cparquivos existentes. Para os meus propósitos, ter um shell interativo foi mais útil, tanto porque minha instalação foi muitas etapas quanto para teste / validação antes da reinicialização. Mas, claro, se você preferir automatizá-lo com um initrd que é igualmente válido - não posso ajudar diretamente com isso, desculpe. - Bob
Obrigado novamente @Bob pela sua resposta. Eu consegui fazê-lo funcionar usando initrd com aproximadamente os seguintes passos: 1.criar um arquivo de imagem initrd (descompacte em ~ / initrd um existente, adicione alguns arquivos) e rezip com: debian7-32bits:~/initrd# find . | cpio -o -H newc | gzip -9 > /boot/initrd.img-3.2.0-5-486-resize2fs    2.criar uma entrada em /boot/grub/grub.cfg igual a : menuentry "run_once_resize_fs" { set root='(hd0,msdos1)'; insmod linux grub help kernel initrd; linux /boot/vmlinuz-3.2.0-5-486; initrd /boot/initrd.img-3.2.0-5-486-resize2fs; } - Martin Vincent


Respostas: