Assegure-se de que a raiz de loopback e o host estejam desmontados no desligamento

4

Estou tentando configurar um sistema Linux que é executado a partir de um arquivo de imagem formatado em LVM. Após alguns ajustes com o initramfs e opções de inicialização, consegui fazer isso montando o sistema de arquivos host em /run/initramfs/host , losetup ing a imagem em /dev/loop0 e certificando-se de que o kernel e o udev detectassem o LVM (e a raiz LV) lá dentro. Até aí tudo bem.

O problema é que ao desligar (ou reinicializar, ou ...) o sistema nem o sistema de arquivos raiz nem o host são desmontados corretamente, devido a um cenário de ovo e galinha: a raiz (ou /oldroot , como ele é referido pelo script de desligamento) não pode ser desmontado, porque /oldroot/run/initramfs/host ainda está montado e o host não pode ser desmontado, porque isso tornaria /oldroot inacessível.

Desligamentos não limpos não são o fim do mundo, porque os dois sistemas de arquivos são registrados em diário, portanto, durante a próxima inicialização, fsck simplesmente reproduz os diários, mas obviamente os desligamentos limpos seriam melhores.

Então a questão é: é possível organizar a sequência de desligamento (eu posso modificar o script de desligamento), ou a seqüência de inicialização (talvez movendo o host ponto de montagem para um local diferente) para que ambos os sistemas de arquivos possam ser desmontados de forma limpa?

    
por Fanael 13.01.2013 / 16:38

3 respostas

3

Caso alguém tenha o mesmo problema:

Tudo o que eu precisava era mover o ponto de montagem do sistema de arquivos host para um local fora do sistema de arquivos raiz no script de desligamento (tudo bem, porque ele é executado em uma raiz pivot tmpfs ) antes de qualquer desmontagem:

mount --move /oldroot/run/initramfs/host /host

Isso permite que /oldroot seja desmontado corretamente. O sistema de arquivos do host pode ser desmontado com um simples

umount /host
    
por 13.01.2013 / 19:25
2

Existe algum truque linux para fazer este tipo de trabalho:

  • mount --move , o que permite que você troque o sistema de arquivos no ponto de montagem
  • pivot_root que trabalham com chroot para o sistema de arquivos raiz / do switch

Inicialmente, o objetivo do recurso era:

  1. inicializando o kernel com um sistema de arquivos raiz initramdisk as (reservando alguns RAM para initrd descompactado).
  2. Todos os módulos e scripts necessários para acessar dispositivo raiz real são iniciados nesta primeira etapa de inicialização. (Isso pode conter inicialização de rede e montagem de dispositivos de rede)
  3. Após a preparação, verifique dispositivo raiz real e monte como um item de arquivo raiz pronto. Executando pivot_root (e chroot ), portanto, após a operação, o ramdisk se tornará um disco de RAM não usado montado em /initrd .
  4. Então, a partir daí, é possível umount /initrd e liberar memória.

Dê uma olhada em man mount e man pivot_root !

    
por 13.01.2013 / 19:09
1

Para marcar um sistema de arquivos como desmontado de forma limpa, sem indisponibilizar os arquivos, remonte-o como somente leitura:

mount -o remount,ro /mount/point

Isso pode ser feito mesmo se houver arquivos abertos para leitura, executando executáveis, diretórios atuais ou pontos de montagem ativos nesse sistema de arquivos. Apenas arquivos abertos para gravação impedem a remontagem de somente leitura.

    
por 14.01.2013 / 00:59