시작 시 Fsck 루프백 장치

시작 시 Fsck 루프백 장치

파일 내의 플래그를 통해 시작 시 루프백 장치에서 실행 fsck하거나 루프백 장치가 설치될 때 수동으로 실행하는 것이 불가능하다는 것을 발견했습니다.fsckfstabfsck

부팅 시 장치를 확인하는 다른 방법이 있나요?

답변1

핵심 문구는 다음과 같습니다."루프 장치를 설치할 때". 너할 수 있는fsck제거된 루프백 장치에서 실행 중입니다.

즉, 실행 losetup하여 루프백 블록 장치를 생성하고 관련 파일에 첨부한 다음 fsck실행 하면 됩니다 mount.

물론 이것은 스크립트로 작성될 수 있습니다. /etc/rc.local루프백 마운트가 표시된 경우 noauto- /etc/fstab각 루프백 fs에 대해 losstup /fsck/mount를 수행하십시오. 또는 에서 이와 같은 작업을 수행할 수도 있습니다 /etc/fstab.

noauto루프백 파일 시스템은 결국 자동으로 마운트되기 때문에 이는 이 플래그를 잘못 사용하는 것입니다 . 자동으로 마운트되기를 원하지 않는 루프백 파일 시스템을 주석 처리하십시오.

또는 루프백 파일 시스템이 다른 파일 시스템처럼 자동으로 마운트되지 않도록 mount -a시스템에서 실행되는 코드(systemd, sysvinit 쉘 스크립트 등)를 수정하여 대신 실행 되도록 할 수 있습니다. mount -a -tnoloop그런 다음 Lostup/fsck/mount를 실행하는 스크립트를 작성하여 이 noauto플래그가 있는 경우 이를 존중하도록 작성할 수 있습니다.

답변2

우아하고 안정적인 솔루션을 찾았습니다.

파일 시스템을 마운트하기 전에 루프 디스크를 처리하기 위해 "/etc/initramfs-tools/scripts/local-premount/" 부팅 단계에 대한 스크립트를 작성했습니다.

자세한 소개는 다음과 같습니다.

  1. 다음과 같이 스크립트를 작성하십시오./etc/initramfs-tools/scripts/local-premount/.
  2. 고쳐 쓰다초기화 파일명령을 통해업데이트-initramfs -u.

스크립트 소스는 다음과 같습니다.

#!/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

인사!

관련 정보