その場合は時間がかかります(ソースファイルが大きい場合)mount --bind
/a
。これは単にファイルシステムのファイルテーブルを更新するのではなく、実際にファイルをコピーしてからソースファイルを削除します。/b
mv /a/bigfile /b/
私はそれがどのようにそしてなぜmount --bind
動作するのか理解しています。他の人が指摘したように、これについていくつかの良い説明があります。
mount --bind
実際に、ファイルシステムのファイルテーブルを更新してこれらの操作(移動)を実行できるように、mount aが同じファイルシステムにあるように指示する方法はありますか?
私はこの問題を理解する方法ではなく、どのように解決するかを尋ねています。私が知らないカーネルパッチがすでに利用可能か、まだ見つからないパラメータが欠落している可能性があります。
理由:現在の設定には、.symlinkのみをサポートするサービス(nextcloud)が1つありますmount --bind
。シンボリックリンクは使用できません。たとえば、nextcloudの各アカウント内に共有フォルダが必要な場合は、バインディングを使用する必要があります。ファイルシステム/カーネルレベルで定式化されたnextcloudソリューションなら、どんなものでも開いています。これは、現在の設定にSSHなど、これらのファイルにアクセスする他の方法も含まれているためです。つまり、例のように、ファイルを移動するためにすべてのコマンドまたはアプリケーションを使用できるようにしたいと思います。
答え1
当然いいえ、マニュアルページrename(2)
これは言及されました:
EXDEV
古い道そして新しい道同じマウントされたファイルシステムにはありません。 (Linuxでは複数のポイントにファイルシステムをマウントできますが、rename()
同じファイルシステムが2つのマウントポイントにマウントされていても、他のマウントポイントでは機能しません。
私が正確に覚えているならば、バインドマウントは同じファイルシステムを何度もマウントするのと同じです。つまり、事実の後ろにバインドする「ソース」と「ターゲット」はありません。
またあります回答同じトピックについて数ヶ月前に別の質問がありました。このリンクはカーネル開発者との議論につながります。だから投票に行きなさい。
答え2
dockerコンテナのnextcloudとsambaと同じ問題があります。すべてのデータをnextcloudに移動し、他の人がそのボリュームからデータをバインドしてマウントできるようにすることで、この問題を解決しました。
したがって、すべてのサービスの観点から見ると、mvは常に1つのバインドマウントにのみ存在します。
これがあなたに役立つかどうかはわかりません
答え3
rsync
代わりに使用するとmv
問題が解決します。次のコマンドを試してください
rsync -avP /a/bigfile /b/bigfile
問題は、時点がmount --bind
カーネルにありますmv
。mv
とは異なり、rsync
ファイルの変更された部分のみが移動されます。
これについて説明しますmount --bind
バインドマウントとは何ですか?