Fsck no momento da inicialização para o dispositivo de loopback

4

Descobri que não é possível executar fsck em um dispositivo de loopback na inicialização pelo sinalizador fsck dentro do arquivo fstab , nem é possível fazer isso manualmente executando fsck quando o dispositivo de loop está montado.

Existe uma alternativa para verificar o dispositivo no momento da inicialização?

    
por Antonio Petricca 31.12.2017 / 16:09

2 respostas

0

Encontrei uma solução elegante e confiável.

Escrevi um script para a fase de inicialização "/ etc / initramfs-tools / scripts / local-premount /" para processar meu disco de loop antes da montagem do sistema de arquivos.

Abaixo dos detalhes:

  1. Crie o script em /etc/initramfs-tools / scripts / local-premount / .
  2. Atualize o initrd.img pelo comando update-initramfs -u .

Aqui está a fonte do script:

#!/bin/sh

# Antonio Petricca <[email protected]> - 03/01/2018

PREREQ=""

# Output pre-requisites
prereqs()
{
        echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
        ;;
esac

. /scripts/functions

log_begin_msg "Running file system check on loop device(s)"

DEV=/dev/sdb5
MNT=/tmp/mnt
LOOP=$MNT/.linux-loops/242eef08-32d6-42c2-93eb-afdc2111a13e.ext4

mkdir $MNT && \
mount -t ntfs $DEV $MNT && \
fsck.ext4 -p -v $LOOP && \
umount $MNT

# Uncomment next line to hold messages for debugging
# sleep 10

log_end_msg "Done"

# Continue boot anyway

exit 0

Atenciosamente!

    
por 03.01.2018 / 08:44
4

A frase chave é "quando o dispositivo de loop é montado" . Você pode executar fsck em um dispositivo de loopback não montado.

Em outras palavras, você pode executar losetup para criar o dispositivo de bloco de loopback e anexá-lo ao arquivo relevante, depois executar fsck nele e, em seguida, mount it.

Isso, é claro, pode ser roteirizado. Você poderia até mesmo fazer isso em /etc/rc.local ou similar se as montagens de loopback estivessem sinalizadas noauto em /etc/fstab - e então fazer o losetup / fsck / mount para cada loopback fs em /etc/fstab .

Observe que é um tipo de abuso do sinalizador noauto , porque o (s) sistema (s) de arquivos de loopback terminará sendo montado automaticamente. Comente os sistemas de arquivos de loopback que você não deseja montar automaticamente.

Como alternativa, você pode modificar qualquer código que execute mount -a em seu sistema (systemd, script shell sysvinit ou qualquer outro) para executar mount -a -tnoloop , para que os sistemas de arquivos loopback nunca sejam montados como outros sistemas de arquivos. O script que faz o losetup / fsck / mount poderia então ser escrito para honrar o sinalizador noauto , se presente.

    
por 01.01.2018 / 13:19