マウントポイントの名前を変更または移動できないのはなぜですか?

マウントポイントの名前を変更または移動できないのはなぜですか?

次のように、マウントポイントの親ディレクトリを移動できます。

$ mkdir -p f/mnt
$ bindfs --no-allow-other f/mnt f/mnt
$ mv f g
$

しかし、マウントポイント自体の名前を変更することはできません。

$ mv g/mnt g/m
mv: cannot move 'g/mnt' to 'g/m': Device or resource busy

これらの違いのセキュリティ、互換性、または実装の理由はありますか?

私のカーネルバージョンは4.17.19-200.fc28.x86_64です。

答え1

これがうまくいかない理由に対するHealyの答えは正しいです。

しかし、あなたは実際にできるLinuxでは、マウントポイント自体を移動します。質問の例を借りると、正しい方法は次のとおりです。

mount --move g/mnt g/m

ターゲットディレクトリ(この場合g/m)はマウントポイントの有効な場所である必要があり(ディレクトリが存在する必要があるなど)、root権限(またはCAP_MOUNT)で実行する必要がありますが、それ以外の場合は制限はありません。

これを行うと、すべてが更新されます。カーネル管理マウントテーブルエントリ(現在のマウントネームスペース内)、開かれたファイル記述子、実行中のプログラムのルートディレクトリ、現在の作業ディレクトリなど、マウントポイントを参照するデータ構造なので、マウントポイントは使用中です。

ファイル記述子の代わりにパスを実行して使用すると、正しく処理できない可能性があることに注意してください。たとえば、Webサイトのルートをこの方法で移動すると、サイトが破損する可能性があります。すべてのコンテンツ)サイトのファイル)。

このコマンドは面白いかもしれませんpivot_root。これはマウントポイントを移動する特別なケースです(2つのマウントポイントを交換し、システム上のすべてのエントリのルートディレクトリと現在の作業ディレクトリを更新します)、ほとんどの最新のLinuxシステムで使用されます。 initramfsから実際のルートファイルシステムに切り替えるための開始です。

答え2

ファイルシステムのルート名を変更することはできませんが、それがあなたが望むものです。

デフォルトのマウントポイント NFS を使用してファイルシステムをマウントする場合、名前を変更すると、見つからないマウントポイントを表示できます。

背景:ファイルシステムのエントリに何かをインストールすると、元のファイルは非表示になりますが、元のファイルの名前を変更する必要があります。表示はマウントされたファイルシステムのルートディレクトリであり、名前を変更することはできません。

答え3

例:互換性の理由がセキュリティに影響します。

LWN.netの忠実な報告のため、この制限は意図的に解放されませんでした。この制限を削除すると、一部のバージョンで動作しますfusermountfusermount以前はこれを追加することで改善されたのでUMOUNT_NOFOLLOW安全です。しかし、以前のバージョンはfusermountまだ気になるほど広く広がっています。

バラよりマウントポイントの削除と名前変更、LWN.net 2016。

接続されているスレッドが示すように、パッチ1-3はマウントポイントの移動を許可します。その後、これを無効にするためにパッチ4が追加されました:-)。

これは完全な証拠ではありません。しかし、これはパッチ4の制限が内部的な理由からではないことを示唆しています。実装する理由。また、カーネル開発者がアイデアがあれば言及すると確信しています。ユーザーの期待移動が許可されると、マウントポイントが削除されます。

しかし、@schilyは指摘しました。はいマウントポイントの移動(または切断)を許可するのは少し奇妙です。そうだ可能取り付けポイントを許可しますrename()。ただし、これはマウントされたファイルシステムのデフォルトのファイル名を変更すると解釈されるためです。

rename(oldpath, newpath)これは、古いパスと新しいパスが同じファイルシステムに存在する必要がある現在のルールの奇妙な例外です。それ以外の場合、EXDEVは失敗します。 (事実彼らはそうしなければならない。ファイルシステムの同じマウントに)。

私はLinuxで追加の小さな特徴を考えました。基本ファイルにLinuxの「不変ビット」を設定すると、 rename() は拒否される必要があると思います。しかし、マウントポイントで不変ビットをチェックすると、基本ファイルの不変ビットは表示されません!効果がありますように。問題を解決する必要がある場合はかなり迷惑です。

関連情報