Onde o fsck é executado?

6

/sbin/fsck.ext4 é executado e depois que o systemd é executado. Eu queria saber onde ou como fsck é executado, porque eu estava procurando por ele no código-fonte do kernel e não consegui encontrá-lo e não faz parte dos scripts init. Então, o que corre fsck ? A distro que estou usando é menta.

EDIT: Nesta imagem, é mostrado que o fsck é executado após a montagem do sistema de arquivos raiz

    
por systolicDrake 28.06.2018 / 01:37

2 respostas

5

Editar 2: fontes verificadas

Eu encontrei as a>. Aqui você pode ver claramente, a mensagem Begin: "Mounting root file system" é impressa primeiro, mas na mount_root function fsck é executada antes da montagem real. Eu omiti alguns códigos não relevantes, apenas para indicar o pedido. (Se você inspecionar as fontes vinculadas, você encontrará também os outros scripts relatados na captura de tela).

/init linha 256

log_begin_msg "Mounting root file system"
# Always load local and nfs (since these might be needed for /etc or
# /usr, irrespective of the boot script used to mount the rootfs).
. /scripts/local
. /scripts/nfs
. /scripts/${BOOT}
parse_numeric ${ROOT}
maybe_break mountroot
mount_top
mount_premount
mountroot
log_end_msg

/scripts/local @line 244

mountroot()
{
    local_mount_root
}

/scripts/local @line 131

local_mount_root()
{
# Some code ommited
    # FIXME This has no error checking
    [ -n "${FSTYPE}" ] && modprobe ${FSTYPE}

    checkfs ${ROOT} root "${FSTYPE}"

    # FIXME This has no error checking
    # Mount root
    mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
    mountroot_status="$?"
    if [ "$LOOP" ]; then
        if [ "$mountroot_status" != 0 ]; then
            if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
                panic "<Error message ommited>"
            fi
        fi

        mkdir -p /host
        mount -o move ${rootmnt} /host
# Some code ommitted
}

Resposta original, retida por razões históricas

Duas opções:

  1. A raiz é montada como somente leitura durante a inicialização e a implementação init está executando fsck . Systemd é a implementação do init no mint e, como você já verificou se existe, essa opção não se aplica.
  2. /sbin/fsck.ext4 é executado no "espaço inicial do usuário" , configurado por um initramfs . Qual é provavelmente o caso no seu sistema.

Systemd

Mesmo que você tenha percebido que /sbin/fsck.ext4 foi executado antes de systemd , quero elaborar um pouco. O Systemd é perfeitamente capaz de rodar o fsck , em um sistema de arquivos montado somente para leitura. Consulte a documentação do systemd-fsck @ .service . Muito provavelmente, este serviço não está habilitado por padrão no mint, já que será redundante com o espaço inicial do usuário .

Initramfs

Eu não sei qual implementação de uma menta initramfs está sendo executada, mas usarei dracut como um exemplo. (usado no Debian, openSuse e mais) Ele afirma o seguinte em seu mount preperation documentação:

When the root file system finally becomes visible:

  • Any maintenance tasks which cannot run on a mounted root file system are done.
  • The root file system is mounted read-only.
  • Any processes which must continue running (such as the rd.splash screen helper and its command FIFO) are hoisted into the newly-mounted root file system.

E as tarefas de manutenção incluem fsck . Mais uma evidência, existe uma possibilidade em opções dracut cmdline para desligar fsck :

rd.skipfsck

skip fsck for rootfs and /usr. If you’re mounting /usr read-only and the init system performs fsck before remount, you might want to use this option to avoid duplication

Implementações do initramfs

Um initramfs dinâmicos (baseados no udev) e flexíveis podem ser implementados usando o infra-estrutura do sistema . O Dracut é uma implementação desse tipo e provavelmente há distros lá fora que querem escrever seus próprios.

Outra opção seria um initramfs baseado em script . Nesse caso, busybox ash é usado como um shell de script e talvez até mesmo substituindo udev por mdev , ou talvez apenas completamente estático. Eu encontrei algumas pessoas sendo descartadas para um busybox shell devido a algum erro fsck int mint, então esta implementação pode se aplicar a hortelã.

Se você realmente quiser ter certeza, tente descompactar o arquivo initramfs em /boot e veja o que está lá. Também pode ser possível vê-lo montado em /initramfs .

    
por 28.06.2018 / 07:03
1

[email protected] and systemd-fsck-root.service are services responsible for file system checks. They are instantiated for each device that is configured for file system checking. systemd-fsck-root.service is responsible for file system checks on the root file system, but only if the root filesystem was not checked in the initramfs. [email protected] is used for all other file systems and for the root file system in the initramfs.

link

Parece que você também pode se interessar por isso:

link

    
por 28.06.2018 / 09:09