Espero que esta não seja uma pergunta duplicada. Eu vi várias perguntas semelhantes, onde a resposta era colocar na lista negra o respectivo dispositivo ou partição. Mas no meu caso, não posso fazer isso (veja abaixo). Tendo dito isto:
Em um host debian buster x64, criei uma VM (baseada em QEMU). A VM é executada em uma partição de dispositivo de bloco, digamos /dev/sdc1
. Eu instalei o sistema debian nessa partição basicamente assim (algumas etapas omitidas):
#> mkfs.ext4 -j /dev/sdc1
#> mount /dev/sdc1 /mnt/target
#> debootstrap ... bullseye /mnt/target
Em seguida, montei os diretórios necessários ( /dev
, /sys
etc.), fiz o chroot em /mnt/target
, concluí a instalação do sistema operacional convidado e inicializei a VM.
A VM foi iniciada sem problemas. Mas a cada reinicialização da VM, a VM tinha mais problemas, que eu estava reparando nos prompts GRUB
e initramfs
, até que o reparo não fosse mais possível porque obviamente o ext4
sistema de arquivos havia sido danificado.
Como originalmente pensei que tinha feito algo errado, por exemplo, esqueci de desmontar a ext4
partição antes de iniciar a VM, repeti toda a instalação do zero várias vezes. O resultado foi o mesmo em todos os casos: após algumas reinicializações, o ext4
sistema de arquivos estava tão danificado que não consegui repará-lo.
Acidentalmente, encontrei a razão para isso, mas não tenho ideia de como resolver o problema. Percebi que e2fsck
se recusou a operar nessa partição, alegando que ela estava em uso embora não estivesse montada e a VM não estivesse em execução. Investigações posteriores mostraram que existia um thread de kernel jbd2/sdc
.
Isso significa que o kernel do host acessa o diário nessa partição/sistema de arquivos. Quando eu inicio a VM, o kernel convidado obviamente faz o mesmo. Tenho quase certeza de que a corrupção do sistema de arquivos se deve ao fato de ambos os kernels acessarem o sistema de arquivos, principalmente o diário, ao mesmo tempo.
Como posso resolver o problema?
Não consigo colocar na lista negra o respectivo disco ou a respectiva partição no host, porque preciso montá-los lá para preparar ou concluir a instalação do sistema operacional convidado em um chroot. Por outro lado, não parece possível dizer ao kernel do host para liberar o diário assim que a VM for iniciada.
Instalei muitas VMs nos últimos anos exatamente da mesma maneira, mas não ativei o diário ao criar seu ext4
sistema de arquivos. Consequentemente, não tive esse problema com essas VMs.
Editar 1
Caso seja relevante, ao montar a partição e fazer chroot nela para concluir a instalação do sistema operacional convidado, uso os seguintes comandos:
cd /mnt
mkdir target
mount /dev/sdc1 target
mount --rbind /dev target/dev
mount --make-rslave target/dev
mount --rbind /proc target/proc
mount --make-rslave target/proc
mount --rbind /sys target/sys
mount --make-rslave target/sys
LANG=C.UTF-8 chroot target /bin/bash --login
Ao desmontar, eu apenas faço
umount -R target
O umount
comando não relata nenhum erro.
Passando
-o norecovery
paramount
, você pode montar o sistema de arquivos sem usar o diário.Página de manual para mount , seção ext3: