web-dev-qa-db-ja.com

ドライブの再マウントに「/ etc / fstab」が使用されていますか?

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がピックアップされて再マウントされます。

私の質問は

  • この「mount-remout」プロセスはシステムの設計ですか?私は Fstab wikiページ を読みましたしかし、それが「mount-remount」について言及しているのを見ませんでした。
  • /etc/fstabが本当に再マウントに使用される場合、起動プロセスのどのステップでドライブが初めてマウントされますか?これは/etc/init.d/etc/init.dにはumountfsumountrootと呼ばれるスクリプトがいくつかありましたが、内容をざっと見てみると、関連性がないようです。
9
yaobin

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を実行して再起動します。

8
mook765

/ etc/fstabを使用する場合

_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を実行します

Fstabを必要としないファイルシステム

また、Linuxカーネルにはメモリ内に その他のファイルシステム が存在することに注意してください。これらは通常ユーザーが使用できません。一部にはマウントポイントがないものや、一部には公開されているものもあります。ユーザー。カーネルはそれらのために_/etc/fstab_を参照する必要はありません。その例は_/proc_です。これは仮想ファイルシステムであり、ほとんどの場合はプロセスに関する情報を公開し、ハードウェアとシステムに関するいくつかのものを実際に_/sys_-別の仮想ファイルシステムに含める必要があります。

5