Tarは現在2GBファイルを読み込んでおり、そのファイルの唯一のリンクを削除しています。永遠に実行されないようにするにはどうすればよいですか?

Tarは現在2GBファイルを読み込んでおり、そのファイルの唯一のリンクを削除しています。永遠に実行されないようにするにはどうすればよいですか?

追加情報:

大きなディレクトリをバックアップしていますが、予想外のtar大きなファイルがいくつかあります。この接続はネットワーク経由で行われ、非常に遅いため、単に接続を待つことはできません。

このファイルには重要なものはありません。

私は最初のいくつかを削除しましたecho > file。今、それへの唯一のリンクがありますが、完全に再起動せずにそれを進める方法を見つけることができないようです。rm -rftartar

ファイルはext4ファイルシステムにあり、sshfsを介してネットワーク経由でアクセスできます。

ベストアンサー1

echo >fileこれが最も簡単な解決策になります。しかし、一度ファイルが削除されると、もはや不可能です。

しかし、待って! ext4ファイルシステムを使用しているので、tarがLinuxで実行されているとします。 (他のすべてのUnixバリアントは同様の解決策を受け入れるわけではありませんが、一部は同様の解決策を受け入れます。)Linuxでは、次のように削除されたが開いているファイルにアクセスできます。ここでは、ファイルを開いたプロセスのプロセスID、ファイル記述子、ファイルが開かれました。このファイル記述子を通して。ファイルはファイルへのシンボリックリンクですが、マジックリンクです。ファイルを削除しても機能します。試してみると、次のような内容が表示されます。/proc/PID/fd/FDPIDFDls -l

/proc/1234/fd/4 -> /path/to/file (deleted)

リンクが壊れているように見えますが、実際にはファイルを開くことができます。特に、次のように切り取ることができます: >/proc/1234/fd/4

ないシステムで作業している場合は、/procデバッガを使用してtarプロセス自体でトリミングを実行できます。デバッガをプロセスに接続して実行するようにします。truncate(4)ここで 4 は tar が読み取るファイル記述子です。たとえば、GDBを使用すると、次のことを試すことができます。

$ ps
…     find the PID of the tar process, e.g. 1234
$ lsof -p1234
…     find the file descriptor that you want to act on, e.g. 4
$ gdb -pid 1234
(gdb) call truncate(4)
(gdb) detach

これは、tarが使用するいくつかのデータ構造を一貫してレンダリングする可能性があるため、tarを混乱させることもそうでない場合もあるため、実際に試す前に試してみることをお勧めします。

おすすめ記事