Еще немного информации:
Я tar
делал резервную копию большого каталога , только там было несколько больших файлов, которые я не ожидал. Это соединение по сети и очень медленное, поэтому просто ждать его нельзя.
Ни в одном из этих файлов нет ничего важного.
Я удалил содержимое первых нескольких из echo > file
них, сохранив ссылку, чтобы tar перестал их читать, но затем я и rm -rf
весь каталог, пока tar
читал файл 2 ГБ в этом каталоге. Теперь он tar
содержит единственную ссылку на него, и я не могу найти никакого способа заставить его двигаться дальше, чем начинать сначала.
Файл находится в файловой системе ext4, доступ к которой осуществляется через сеть с помощью sshfs.
files
tar
rm
file-descriptors
Functino
источник
источник
/proc/(pid of tar)/fd/(number)
или через некоторое время, и, возможно, вы можете обрезать его с помощью echo, как вы это делали с остальными.)gdb
или схожим образом и заставить его думать, что он обнаружил EOF в этом файле ... (Не публиковать в качестве ответа, потому что это требует много объяснений и некоторого тестирования - любой, кто захочет, может украсть идею за его / ее ответ.)read()
из файла, а затем датьreturn (int)-1
команду gdb, чтобы заставить tar считать чтение неудачным.0
, сигнализируя EOF.Ответы:
echo >file
было бы простым решением. Но как только вы удалили файл, это уже невозможно.Но ждать! Поскольку вы используете файловую систему ext4, я предполагаю, что этот tar работает в Linux. (Некоторые, но не все другие варианты Unix допускают аналогичное решение.) В Linux вы все равно можете получить доступ к удаленному, но открытому файлу, где находится идентификатор процесса, в котором открыт файл, и дескриптор файла, с помощью которого файл открыт. Этот файл является символической ссылкой на файл, но он магический. Это остается в силе, даже если файл удален. Если вы посмотрите на это с , вы увидите что-то вроде
/proc/PID/fd/FD
PID
FD
ls -l
на первый взгляд битая ссылка, но вы действительно можете открыть этот файл. В частности, вы можете обрезать его чем-то вроде
: >/proc/1234/fd/4
.Если вы работаете в системе без
/proc
, вы можете использовать отладчик, чтобы сам процесс tar выполнял за вас усечение. Присоедините отладчик к процессу, а затем заставьте его выполнить,truncate(4)
где 4 - дескриптор файла, из которого tar читает. Например, с GDB вы можете попробовать что-то вродеЭто может или не может запутать tar, так как это может привести к тому, что некоторая структура данных, которую он использует, будет непоследовательной, поэтому я рекомендую поэкспериментировать, прежде чем попробовать ее на самом деле.
источник
Остановить смолу?
источник
tar
«забудь об этом», я укушу пулю.