Depois de algumas bagunças eu finalmente encontrei uma maneira de realizar o que eu quero há algum tempo, mas esqueci de atualizar minha pergunta aqui. No futuro (início de outubro) estou substituindo a máquina inteira e, de fato, mudando para o ZFS. Enquanto isso, postarei minha solução aqui para que outras pessoas possam usá-la.
A solução é fazer com que o sistema de arquivos seja instalado a partir do FreeBSD. Não consegui carregar o módulo do kernel do gJournal a partir do disco do fixit, então instalei uma instalação básica em um pendrive. Depois de limpar todo o disco que eu iria instalar, eu inicializei a máquina pelo pendrive.
O primeiro passo foi carregar o módulo do kernel do gJournal com " gjournal load
" e rotular o disco no qual eu estava instalando ( /dev/ad0
) " gjournal label ad0
". Agora você deve ver uma entrada /dev/ad0.journal
dentro de /dev
. O próximo passo é escrever um setor de inicialização para este disco com bsdlabel
. No caso do meu sistema amd64, este foi " bsdlabel -wBm amd64 ad0.journal
", para os detalhes do seu sistema, consulte a página de manual bsdlabel(8)
. Eu continuei a editar as etiquetas com o bsdlabel como você normalmente mudaria o layout do disco, mas usando /dev/ad0.journal
onde você normalmente usaria /dev/ad0
. Acabei especificando o seguinte layout em bsdlabel -e ad0.journal
:
# size offset fstype [fsize bsize bps/cpg]
a: 256M 16 4.2BSD 2048 16384
b: 2G * swap
c: * * unused
d: 2G * 4.2BSD 2048 16384
e: 512M * 4.2BSD 2048 16384
f: 6G * 4.2BSD 2048 16384
g: * * 4.2BSD 2048 16384
Os tamanhos específicos que você exige serão diferentes, é claro. Depois de especificar essas partições, /dev/
deve mostrar as várias entradas /dev/ad0.journala
a /dev/ad0.journalg
. Agora podemos formatar os novos sistemas de arquivos usando newfs(8)
. Eu usei o UFS2 com rótulos para poder me referir a /dev/label/<label>
in /etc/fstab
em vez do dispositivo de disco. O comando que eu executei era newfs -O 2 -J -L rootfs /dev/ad0.journala
, -O 2
usa o UFS2, -J
ativa o registro no diário em uma partição específica e -L rootfs
nomes /dev/ad0.journala
to /dev/label/rootfs
. Não se esqueça de que você pode querer desabilitar o registro no diário, por exemplo, a partição /tmp
; nesse caso, não passe o sinalizador -J
para essas partições. Embora estejam no disco com registro no diário, o GEOM registrará apenas os sistemas UFS que sinalizam se os dados que estão sendo gravados são metadados ou não, o que acontece apenas para sistemas de arquivos criados com -J
ou para os quais você ativa o registro no diário via tunefs(8)
.
Agora a parte complicada acabou e só precisamos instalar o sistema operacional no nosso sistema de arquivos recém-criado, eu simplesmente usei o disco de instalação. Como já criamos nosso sistema de arquivos, o instalador do CD não pode ser usado. Em vez disso, basta montar o CD a partir da instalação USB e montar o sistema de arquivos raiz recém-criado em algum lugar (vou usar /tmp/newinstall
como ponto de montagem aqui). Em seguida, monte todas as outras partições que você criou dentro de /tmp/newinstall
as /var
, /usr
e tudo o que você particionou. Em seguida, defina a variável de ambiente DESTDIR para este novo caminho ( export DESTDIR=/tmp/newinstall
).
Agora mude o diretório para onde você montou o CD de instalação, no CD você encontrará uma pasta com o nome da versão do FreeBSD que você baixou, dentro dessa pasta existem várias pastas contendo um arquivo install.sh
, execute cada uma delas scripts (você tem que especificar o kernel GENERIC como um argumento para o script de instalação no diretório do kernel).
Depois disso, não se esqueça de copiar / mover /tmp/newinstall/boot/GENERIC
para /tmp/newinstall/boot/kernel
ou você verá que o sistema não consegue encontrar um kernel para inicializar. Por último, mas não menos importante, edite /tmp/newinstall/boot/loader.conf
e adicione a linha geom_journal_load="YES"
para carregar o suporte ao gjournal no momento da inicialização, você pode (e deve) remover esta linha se você compilar um kernel customizado com o suporte gJournal incluído (as opções necessárias para isso são options UFS_GJOURNAL
e options GEOM_JOURNAL
).
A última coisa que resta a ser feita é criar um arquivo /tmp/newinstall/etc/fstab
que monte as partições necessárias no momento da inicialização. Você pode especificar /dev/ad0.journala
devices ou /dev/label/rootfs
e outros marcadores que você forneceu. Detalhes sobre a sintaxe e opções para o arquivo podem ser lidos na página de manual do fstab(5)
. Tenha em mente que, com o registro no diário, agora é "seguro" [1] montar seus sistemas de arquivos como assíncronos. Observe também que, embora os dispositivos registrados não precisem de fsck
, você ainda deve preencher a coluna fsck
no arquivo fstab. Se você não fizer isso, seu sistema NÃO VAI INICIAR. O sistema reconhece discos registrados e os trata diferentemente nas verificações automatizadas do fsck, em vez de executar as verificações apropriadas para um sistema registrado.
[1] - Seguro significa que seu sistema de arquivos não será corrompido por um travamento durante o registro no diário. Os dados que não foram gravados no disco no momento da falha ainda podem ser perdidos, por exemplo, se estiverem sendo armazenados em buffer pelo sistema operacional ou pelo disco. Os dados podem permanecer nesses buffers por um bom tempo.