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

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

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

$ 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から実際のルートファイルシステムに切り替えるための開始です。

おすすめ記事