Estou usando as seguintes partman
configurações para instalações automatizadas de VMs há alguns anos:
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman/alignment string "optimal"
d-i partman-auto/expert_recipe string \
boot-root :: \
64 512 300% linux-swap \
$primary{ } \
method{ swap } format{ } \
. \
500 10000 1000000000 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
.
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
Isso cria uma pequena partição de troca no início e usa o restante do disco para a partição raiz. Isso funciona bem e permite fácil extensão de partição quando preciso aumentar o tamanho do disco virtual.
Agora estou tentando adaptar esta receita para instalar vários servidores bare metal idênticos. Para fazer isso, apenas troquei as partições e configurei os tamanhos para valores mais razoáveis para uma máquina com 256 GB de RAM e 460 GB de disco do sistema (SSDs em um RAID1 de hardware, mas isso não deve importar):
boot-root :: \
32768 65536 1000000000 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
16384 16384 65536 linux-swap \
$primary{ } \
method{ swap } format{ } \
.
As demais partman*
diretivas são idênticas.
Tanto quanto eu entendo a documentação (e posts adicionais como este ), isso deve criar uma grande partição raiz que abrange quase todo o disco, com uma partição swap entre 16 e 64 GB no final.
Bem, não. Ele cria uma partição de 450 MB, seguida por uma partição de troca de 460 GB.
Quando instalo a mesma máquina com o preseed para VMs, as partições são criadas corretamente conforme definido no arquivo preseed:
Então, o que estou fazendo de errado com a receita da máquina bare metal?
Se for importante, a iso de instalação é baseada na iso do servidor Ubuntu 16.04.5.
Saída de fdisk /dev/sda
eparted /dev/sda print
:
Mais algumas variantes que tentei:
# this belongs to tha last block, as suggested by @Peter
#d-i partman-basicfilesystems/choose_label string gpt
#d-i partman-basicfilesystems/default_label string gpt
#d-i partman-partitioning/choose_label string gpt
#d-i partman-partitioning/default_label string gpt
#d-i partman/choose_label string gpt
#d-i partman/default_label string gpt
d-i partman-auto/expert_recipe string \
boot-root :: \
##########################
65536 1 -1 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
65536 65536 65536 linux-swap \
$primary{ } \
method{ swap } format{ } \
.
##########################
# 1 1 -1 ext4 \
# $primary{ } $bootable{ } \
# method{ format } format{ } \
# use_filesystem{ } filesystem{ ext4 } \
# mountpoint{ / } \
# . \
# 65536 65536 65536 linux-swap \
# $primary{ } \
# method{ swap } format{ } \
# .
##########################
# 32768 50 5242880 ext4 \
# $primary{ } $bootable{ } \
# method{ format } format{ } \
# use_filesystem{ } filesystem{ ext4 } \
# mountpoint{ / } \
# . \
# 16384 100 65536 linux-swap \
# $primary{ } \
# method{ swap } format{ } \
# .
##########################
# use along with the annoted partman-* directives above
# 538 538 1075 free \
# $iflabel{ gpt } \
# $reusemethod{ } \
# method{ efi } \
# format{ } \
# . \
# 1 1 -1 ext4 \
# $primary{ } $bootable{ } \
# method{ format } format{ } \
# use_filesystem{ } filesystem{ ext4 } \
# mountpoint{ / } \
# . \
# 65536 65536 65536 linux-swap \
# $primary{ } \
# method{ swap } format { } \ .
# .
Não faz diferença, a partição raiz resultante sempre tem apenas 453 MB.
Notas especiais
Não foi mencionado se existe bios_grub, ESP, GPT ou MBR, ou qual método o firmware usa. Ao usar o GPT, você precisa de um ou outro (ou ambos). Então, o que acontecerá é que o instalador escolherá para você, com base em alguns critérios desconhecidos, provavelmente relacionados ao tamanho do disco. Para forçar o uso do GPT, você pode definir coisas assim (que lembro não necessariamente sempre funcionar, apesar de usar todos os 6 métodos que encontrei aqui):
Por exemplo, para bios_grub, você definiria:
(não coloquei
$iflabel{ gpt }
lá, e isso pode ser útil porque se algo der errado e depois você converter de MBR para GPT, você quer o espaço reservado)E para EFI (copiando e colando descaradamente do Preseeding debian install - EFI e não removeu o iflabel):
E para responder a pergunta
Para usar o resto, você usa
-1
, não um número arbitrariamente grande e, em seguida, basta definir os outros números para valores falsos como 1. E eu também não confiaria nos intervalos ... Eu apenas uso um arquivo preseed diferente para hardware diferente , não as coisas automágicas do debian. Então eu configurei como apenas 65536, não um intervalo.E certifique-se de que está realmente usando seu novo arquivo preseed. Eu gosto de colocá-lo na imagem initrd do netboot porque então ele não tem dependências de rede, etc. e acho que funciona muito bem. Se você alterar algo como o acima e não funcionar, verifique novamente e novamente. Se for http/tftp, verifique os logs http/tftp ou tcpdump. Ou faça uma mudança que você certamente notará, e veja se ela fez isso.
Se for initrd, olhe no initrd e veja se realmente está lá. Por exemplo:
TL;DR:
A imagem errada foi montada. Obrigado a @Peter por me apontar dessa maneira.
A longa história:
Após o comentário de Peters, verifiquei novamente todo o meu pipeline de construção iso, os arquivos .seed, o isolinux txt.cfg, o logo de inicialização personalizado, o script bash que constrói o .iso, não encontrando nada de errado. Alterei o arquivo .preseed novamente, desta vez adicionando uma terceira partição que deveria ser montada como
/var
, reconstruí a imagem, cliquei em "Desmontar" e "Montar" na interface BMC do servidor, reiniciei, executei a instalação e adivinhem , era o mesmo layout de antes, sem partição adicional. Tornando-se suspeito, verifiquei/target/etc/issue
:Isso deveria ter sido 16.04.5. Durante meus testes de instalação eu recriei o .iso do Ubuntu completamente, baseando-o em 16.04.5 em vez do anterior 16.04.1 (resultando em um nome iso diferente, porque o arquivo .iso contém o número da versão).
Eu tenho duas maneiras de montar imagens ISO nessas placas SuperMicro. Posso me conectar a um único BMC e montar o ISO lá, ou posso usar o SuperMicro Server Manager para montar um ISO em várias máquinas ao mesmo tempo. Eu tinha várias máquinas para instalar, então naturalmente usei o método SSM e montei o ISO em todos os lugares.
Depois de mudar para 16.04.5 só alterei o nome do arquivo diretamente no BMC do host em que estava trabalhando e montei novamente. eu só consigo
There is an iso file mounted.
como confirmação, sem mais detalhes.Clicar no
Save
botão na página de imagem de montagem resulta nesta mensagem de erro:Eu não digitei o caminho dessa maneira, isso foi definido pelo Gerenciador do Servidor, então assumi que estava correto. Aparentemente não é. Depois disso, remontei o arquivo .iso com o Server Manager em vez do BMC diretamente e voila ...
Exatamente o que eu tinha configurado para testar isso.
A moral da história: perdi cerca de uma semana do meu tempo (e parte do valioso tempo de vocês, pessoas prestativas) só por causa da estupidez de uma interface BMC barata. Tenha isso em mente e verifique novamente TUDO quando tiver problemas inexplicáveis.