ファイルが記録されたら、名前を変更します。

ファイルが記録されたら、名前を変更します。

これが安全であると考えられるかどうかを知りたいです。リンクが存在する限り、ファイル処理がうまく機能することを知っており、識別子が名前ではなくinodeであることを知っていますが、他のファイルシステムでどのように機能するのかわかりません。

たとえば、ext4ハードドライブからNTFS USBスティックにコピーするか、FATスティックからext4ドライブにコピーします。

複数の大容量メディアファイルをコピーし、コピーが完了する前に名前を変更しました。チェックサムが一致します。いつも安全なのか、反対方向に動作しているのか、知っておくべき欠点や避けるべき理由があるかどうかを知りたいです。

オペレーティングシステム/ディストリビューションは、5.0.0-15 Linuxカーネルを含むUbuntuです。

答え1

他のFSでどのように機能するのかわかりません。

名前変更操作自体は他のファイルシステムでは機能しません。cpテキストエディタでファイルを書き込むことと、他のファイルシステムのソースファイルを使って書き込むこととの違いはありません。

Linuxでは、renameシステムコールは他のハードリンクや開かれたファイル記述(および記述子)を含むファイルへの他のリンクに透過的です。マンページには明確に記載されています。

オープンファイル記述子古い道影響を受けません。

(私は単にPOSIXで参照が見つからなかったので、「on Linux」を選択しました。これはPOSIXスタイルのオペレーティングシステムで一般的であると仮定します。)

そのため、ファイルシステム全体でファイルをコピーするときは、読み込み用にcpソースを開き、ターゲットに書き込んでからコピーを開始してください。名前変更操作は、使用しているファイル記述子には影響しません。cp

これを考えるもう1つの方法は、含まれているディレクトリ内のファイル名がそのinodeを指すディレクトリエントリの一部であることです。オープンファイルの説明は、他のハードリンクと同様に、inodeへの別のポインタです。ファイル名を変更しても、他の既存のポインタには影響しません。

このようなツールは、システムコールが実行できる操作mvに限定されないことに注意することが重要です。ファイルシステム全体にファイルを保存すると失敗します。試してください)を試してから、ファイルの内容を手動でコピーして元のファイルを削除します。名前が変更されたファイルを同時に変更すると、良い結果は得られません。renamemvrenamemvmv

関連情報