Linuxがこれをサポートする理由:
umount /
誰かがこれを代わりにこう書く理由は次のとおりです。
mount / -oremount,ro
ここではカーネルコードを見ています。
if (&mnt->mnt == current->fs->root.mnt && !(flags & MNT_DETACH)) {
/*
* Special case for "unmounting" root ...
* we just try to remount it readonly.
*/
if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN))
return -EPERM;
down_write(&sb->s_umount);
if (!sb_rdonly(sb))
retval = do_remount_sb(sb, SB_RDONLY, NULL, 0);
https://elixir.bootlin.com/linux/v4.18/source/fs/namespace.c#L1612
ベストアンサー1
Luciano Andress Martini
指摘した:
初めてLinuxでファイルシステムに問題が発生したとき、
fsck
「/dev/hda2が読み取り/書き込みでマウントされました」というメッセージが表示されました。その当時(1999年)私はそれが何を意味するのか理解していませんでした。私は11歳で頭の中に浮かぶ唯一の考えはumount /
、働くということです(読み込み専用で再インストールしたからです)。
(これを行うには、書き込み用にファイルを開いてはいけません。たとえば、システムがシングルユーザーモードで実行されているときに機能します。fsckを実行した後でも読み取り専用モードでマウントされたファイルシステムを回復するには、常に再起動する必要があります。理由で)。
つまり、ファイルシステムを読み取り専用で再マウントするコマンドがあるかどうかわからない場合は、fsck(回復)/dev/fd0
またはファイルシステムが必要な/home
同じコマンドを試すことができます。特別な場合fsck
には、明らかにアンマウントしたファイルシステムにコマンドがある場合でもこれを許可します。 :-).破損したシステムを修復しようとしたときにLinuxが助けることができるのは素晴らしいことです。
この特別なケースには別の目的があります:umount -a
古い終了スクリプトから。これは、単にすべてのファイルシステムを逆順にアンマウントし、ルートファイルシステムで終わるものとして定義されます。すべてのファイルシステムがディスク上で一貫した状態を維持するため、fsck
次回の起動時には必要ありません。 Linuxカーネルは次のとおりです。いいえすべてのファイルシステムを自動的に閉じるには、シャットダウンプログラムまたは「初期化システム」が必要です。
umount
なぜこの特別なケースがコマンドではなくカーネルにあるのかわかりません。 1つの理由は、古いカーネルがファイルシステムがマウントされたディレクトリではなくマウントされたデバイスの名前を受け入れるためです。おそらく、これにより、このコードをカーネルに配置する方が簡単で信頼性が高いように見えます。
umount(2)
特別な場合は、またはの現在のマニュアルページに文書化されていませんumount(8)
。したがって、現在のマニュアルページにはumount -a
エラーが常に表示されることが示唆されていますが、実際にはそうではありません。umount -a
今はあまり広く使われていないようです。
以前のバージョンのLinuxにも非常に似たコードコメントがありました。0.99.10(1993)を含む。
これは従来のUNIX標準ではないようです。 FreeBSDカーネル代わりにエラーを返します。。この場合、現在使用中のファイルシステムをアンマウントするための一般的なエラーチェックとは別に、特定のエラーチェックがある理由はわかりません。 FreeBSDに対応するプログラムは、umount -a
この問題を認識し、最初のファイルシステム(ルートなど)をアンマウントする前に停止します。 (コードはここしかし、Cでループと配列のインデックス付けがどのように機能するかを理解する必要がありますfor
:-)。
たとえば、依存する古いスクリプトは、umount -a
Debianでまだ利用可能なSysVinitの最新のスクリプトとは対照的です。明示的に読み取り/etc/init.d/umount_root
専用で再マウントします。/
残りのマウントは/etc/init.d/umountfs
およびで別々に処理されます/etc/init.d/umountnfs.sh
。
umount -a
最新システムでは理想的ではありません。引き続き使用できる/proc
ように、ファイルシステムをマウントされたままにする方が/proc/mounts
簡単です。/dev
通常、別々にマウントされたファイルシステムもありますが、これは問題になる可能性があります。
前の終了スクリプトの例については、etc/rc.d/rc.0
前の /SysVinit-2.4.tar.z
参照スクリプトを参照してくださいSysVinit-2.4.tar.gz
。
#! /bin/sh
#
# brc This file is executed by init(8) when the system is being
# shutdown (i.e. set to run at level 0). It usually takes
# care of un-mounting al unneeded file systems.
#
# Version: @(#)/etc/brc 2.01 02/17/93
#
# Authors: Miquel van Smoorenburg, <[email protected]>
# Fred N. van Kempen, <[email protected]>
#
PATH=/bin:/etc:/usr/bin
echo Unmounting file systems.....
umount -a
echo Done.