Где выполняется fsck?

Попробуйте это ...

find /tree -depth -type d -inum 2 -print | xargs umount

Извините, я не могу это проверить ... но теория такова, что корень каждой файловой системы будет иметь номер индекса 2 (по крайней мере, для ext [2-4] и большинства других unix-подобных файловых систем ... чтобы подтвердить это для / , запустите ls -ldi / - номером inode будет номер в левом столбце).

6
28.06.2018, 20:14
2 ответа

Редактировать 2 :проверенные источники

Я нашел исходники инструментов initramfs -Ubuntu . Здесь хорошо видно, что сначала печатается сообщение Begin: "Mounting root file system", а в mount_rootфункция fsckзапускается до фактического монтажа. Я опустил некоторый код, не относящийся к -, просто чтобы указать порядок. (Если вы просмотрите связанные источники, вы также найдете другие обнаруженные скрипты на снимке экрана ).

/initстрока 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@строка 244

mountroot()
{
    local_mount_root
}

/scripts/local@строка 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
}

Оригинальный ответ, сохраненный по историческим причинам

Два варианта:

  1. Корень монтируется для чтения -только во время загрузки и выполняется реализация init fsck. Systemd — это реализация init на монетном дворе, и поскольку вы уже проверили, существует ли она там, этот вариант не применяется.
  2. /sbin/fsck.ext4запускается в «пространстве раннего пользователя» , настроенном с помощью initramfs . Что, скорее всего, имеет место в вашей системе.

Системд

Даже если вы заметили, что /sbin/fsck.ext4запускался до systemd, я хочу немного уточнить. Systemd вполне способна запускать fsckсаму себя на смонтированной файловой системе -только для чтения. См. документацию systemd -fsck@.service . Скорее всего, эта служба не включена по умолчанию в Mint, так как она будет избыточной с ранним пользовательским пространством .

Инитрамфс

Я не знаю, какая реализация initramfs mint работает, но я буду использоватьdracutв качестве примера. (используется в Debian, openSuse и др. )В документации по подготовке к монтированию указано следующее:

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.

И задачи обслуживания включают fsck. Дополнительные доказательства,есть возможность в вырезать параметры командной строки отключить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

Реализации initramfs

Динамический (основанный на udev )и гибкий initramfs можно реализовать с помощью инфраструктуры systemd . Dracut является такой реализацией, и, вероятно, есть дистрибутивы, которые хотят написать свою собственную.

Другим вариантом может быть скрипт на основе initramfs . В таком случае busybox ashиспользуется как оболочка для сценариев и, возможно, даже заменяет udevна mdev, а может быть, просто полностью статичен. Я обнаружил , что некоторые люди перебрасывались в оболочку busyboxиз-за какой-то ошибки fsck int mint, так что эта реализация может быть применима к mint.

Если вы действительно хотите знать наверняка, попробуйте распаковать файл initramfs в /bootи посмотреть, что там. Также возможно увидеть его смонтированным под /initramfs.

5
27.01.2020, 20:27

systemd-fsck@.service 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. systemd-fsck@.service is used for all other file systems and for the root file system in the initramfs.

https://www.freedesktop.org/software/systemd/man/systemd-fsck@.service.html

Похоже, вам это тоже может быть интересно:

https://www.freedesktop.org/software/systemd/man/bootup.html

1
27.01.2020, 20:27

Теги

Похожие вопросы