파일 내의 플래그를 통해 시작 시 루프백 장치에서 실행 fsck
하거나 루프백 장치가 설치될 때 수동으로 실행하는 것이 불가능하다는 것을 발견했습니다.fsck
fstab
fsck
부팅 시 장치를 확인하는 다른 방법이 있나요?
답변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/" 부팅 단계에 대한 스크립트를 작성했습니다.
자세한 소개는 다음과 같습니다.
- 다음과 같이 스크립트를 작성하십시오./etc/initramfs-tools/scripts/local-premount/.
- 고쳐 쓰다초기화 파일명령을 통해업데이트-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
인사!