Ubuntu 14.04.5がインストールされたデバイスに、ext4ファイルシステムの単一のハードドライブがあります。
ドキュメントを読むことで Ext4 Filesystem デフォルトのデータモードはordered
であり、メタデータのみを保護することがわかりました。私のプロジェクトでは、データの安全性の価値が高いため、ファイルデータも保護するためにjournal
に変更します。
私が最初に試みたのは、/etc/fstab
ファイルを変更することでした。変えようとした
UUID=<UUID> / ext4 errors=remount-ro 0 1
に
UUID=<UUID> / ext4 errors=remount-ro,data=journal 0 1
オプションフィールドにdata=journal
を追加します。
しかし、デバイスを再起動すると、cannot change data mode on remount
というエラーメッセージが表示されました。 dmesg
を確認したところ、ordered
データモードでドライブをマウントすることに関する以前のメッセージが表示されました。
恥ずかしいほど長い間、/etc/fstab
を使用してデフォルトのマウントオプションをオーバーライドすると、ドライブが1回だけマウントされると思いました。しかし、今ではそれが間違っているように見えます。ドライブはデフォルトのマウントオプションを使用してマウントされ、次に/etc/fstab
がピックアップされて再マウントされます。
私の質問は:
Fstab
wikiページ を読みましたしかし、それが「mount-remount」について言及しているのを見ませんでした。/etc/fstab
が本当に再マウントに使用される場合、起動プロセスのどのステップでドライブが初めてマウントされますか?これは/etc/init.d
? /etc/init.d
にはumountfs
とumountroot
と呼ばれるスクリプトがいくつかありましたが、内容をざっと見てみると、関連性がないようです。man ext4
から:
data = {journal | ordered | writeback} ファイルデータのジャーナリングモードを指定します。メタデータは常に ジャーナルされます。ルートfilesys- システムで注文した以外のモードを使用するには、ブートパラメータとしてカーネルにモードを渡します。 root- flags = data = journal。
Fstab行からdata=ordered
を削除し、代わりに/etc/default/grub
を編集してください。 /etc/default/grub
で行を変更
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
に
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash root‐flags=data=journal"
Sudo update-grub
を実行して再起動します。
_Sudo strace -e open,openat mount -o remount,rw /
_を実行すると、コマンドが実際に_/etc/fstab
_を開くことがわかります。これは、表示される最も一般的なコマンドであり、回復シェルからの作業に関する記事でよく参照されます。
sourcejediの回答 も引用するには(これはmount(8)
manualから取得):
mount -o remount、rw/dir
この呼び出しの後、mountはfstabを読み取り、これらのオプションをコマンドラインからのオプションとマージします(-o)。 fstabにマウントポイントが見つからない場合、ソースが指定されていない再マウントが許可されます。
ただし、これは_/etc/fstab
_が常に使用されるという意味ではありません。特に、デバイスファイルも指定する場合。 mount(8)
manual への参照:
再マウント機能は、mountコマンドがfstabのオプションを処理する標準的な方法に従います。これは、デバイスとディレクトリが完全に指定されている場合にのみ、mountコマンドがfstab(またはmtab)を読み取らないことを意味します。
mount -o remount、rw/dev/foo/dir
この呼び出しの後、すべての古いマウントオプションが置き換えられ、fstabからの任意のものは無視されます。ただし、loop =オプションは、mountコマンドによって内部的に生成および維持されます。 。
_/dir
_は任意である可能性があるため、これは理にかなっています-デバイスを別のマウントポイントに再マウントします。
ブート時に_/etc/fstab
_ファイルシステムをマウントするときに_/
_も参照されません。カーネルは_/etc/fstab
_を認識しません。 psusiの答えを引用するには :
最終的にブートローダーが登場し、コマンドラインをカーネルに渡すことができました。 root =引数が渡された場合、組み込み値の代わりにルートfsがどこにあるかをカーネルに伝えました。これにアクセスするために必要なドライバーは、カーネルに組み込む必要がありました。
...
最後に、今日、initramfsがあります。これはinitrdに似ていますが、ramdiskにロードされる圧縮ファイルシステムイメージではなく、圧縮されたcpioアーカイブです。 tmpfsがルートとしてマウントされ、アーカイブがそこに抽出されます。ダーティハックと見なされたpivot_rootを使用する代わりに、initramfsブートスクリプトは/ rootに実際のルートをマウントし、tmpfsルートのすべてのファイルを削除してから、/ rootにchrootし、/ sbin/initを実行します
また、Linuxカーネルにはメモリ内に その他のファイルシステム が存在することに注意してください。これらは通常ユーザーが使用できません。一部にはマウントポイントがないものや、一部には公開されているものもあります。ユーザー。カーネルはそれらのために_/etc/fstab
_を参照する必要はありません。その例は_/proc
_です。これは仮想ファイルシステムであり、ほとんどの場合はプロセスに関する情報を公開し、ハードウェアとシステムに関するいくつかのものを実際に_/sys
_-別の仮想ファイルシステムに含める必要があります。