起動時の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

あいさつ!

関連情報