ファイル内のフラグを介して起動時にループバックデバイスで実行したり、ループバックデバイスがインストールされた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
あいさつ!