LINUX.ORG.RU
ФорумAdmin

восстановление tar-архива, затертого tar-ом

 , ,


0

1

последовательность моих действий:

# tar --remove-files -cf foo.tar foo/
# ls -l foo.tar
-rw-r--r-- 1 root root  2333444555 Aug 16 02:01 foo.tar

затем прошла неделя, в течение которой порядка 100000 файлов было создано (т.е. файлы директории foo видимо уже не восстановить?) и по ошибке я повторил команду — но при этом директория foo уже не существовала:

# tar --remove-files -cf foo.tar foo/
tar: foo: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
# ls -l foo.tar
-rw-r--r-- 1 root root       10240 Aug 20 02:44 foo.tar

сначала лирика: какого черта этот говноtar похерил архив в 2 гига, хотя четко и явно видел, что архивировать нечего?! и это, епрст, архиватор?!

теперь вопросы:

1. какие идеи по восстановлению 2ГБ архива?

2. че tar сделал с 2-гиговым файлом — truncate или delete?

доп. инфа:

  • tar (GNU tar) 1.23
  • все произошло на /dev/sda12 on /mnt/sda12 type ext3 (rw)
  • /dev/sda12 154819652 117381008 29574168 80% /mnt/sda12
  • после инцидента партиция не отмонтировалась, и ничего на ней не происходит (вроде бы)
  • по сигнатуре tar-а можно поискать, но файл реально больше 2ГБ, и я не знаю, как собирать столько кусков
  • содержимое тар-а я представляю, но рядом штук 20 аналогичных таров по 2ГБ, так что уникальности нет
  • файлов в таре порядка 100000, и мелкие в основном (в т.ч. нулевой длинны)
  • потерю 2ГБ пережить можно, но не хочется

в тар-е видимо структура какая-то есть, и может есть скрипты, собирающие тар из кусков? че-то лучше мне в голову пока не приходит

какого черта этот говноtar похерил архив в 2 гига

Ну видимо потому что пользователь не знает что такое «поток». Вообще даже не применительно к tar, знаете ли «человек должен думать, а машина работать» но не наоборот. А то и rm -ключи у некоторых что-то там ломают.

1. какие идеи по восстановлению 2ГБ архива?

По теме тут (именно в Admin) недавно был вопрос про восстановление, за ССЗБ искать лениво, но найдете, не более месяца назад, там целый список утилит предлагали.

anc ★★★★★ ()
Ответ на: комментарий от anc

Ну видимо потому что пользователь не знает что такое «поток».

и при чем тут «поток»? я не предполагал, что тар будет ДОписывать

тар мне говорит «ну не смог я открыть входной файл, failure» — и тогда какого черта он удаляет выходной файл?

это как продавец в магазине бы деньги взял, пошел за товаром, вернулся и сказал «а знаете, этот товар закончился», и деньги не вернул — типа так и надо

www_linux_org_ru ★★★★★ ()
Последнее исправление: www_linux_org_ru (всего исправлений: 2 )

согласен с автором.

пиши багрепорт.

но скорее всего, tar просто не проходится по своим параметрам с проверками перед началом актуальной работы и да, скорее всего сначала делает open(filename, O_WRONLY|O_CREATE) (схрена ли ему делать транкете?)

anonymous ()
Ответ на: комментарий от anonymous

хотя, если подумать, то входящие файлы могут пропасть и _между_ проверкой параметров и актуальной работой. хотя, конечно, это гораздо меньше вероятно...

anonymous ()
Ответ на: комментарий от anonymous

пиши багрепорт.

тар старый, надо на новом попробовать сначала

и да, скорее всего сначала делает open(filename, O_WRONLY|O_CREATE) (схрена ли ему делать транкете?)

наверно да; щас в поликлинике для опытов посмотрю

strace сказал:

open("foo.tar", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3

че тогда на диске происходит? inode у старого файла другой или тот же, что у нового?

www_linux_org_ru ★★★★★ ()
Последнее исправление: www_linux_org_ru (всего исправлений: 2 )
Ответ на: комментарий от www_linux_org_ru

сорри, я имел в виду «схрена ли ему делать _без_ транкете».. в прочем твоего положения это не меняет.

anonymous ()
Ответ на: комментарий от anc

за ССЗБ искать лениво

а какие ключи тара используют не ССЗБ? чтобы сказать тару «если входного файла нет, то ты выходной пожалуйста не удаляй, но если входной файл есть, то ты выходной не дописывай (потоки не нужны), а удали» ?

www_linux_org_ru ★★★★★ ()
Ответ на: комментарий от anonymous

хотя, если подумать, то входящие файлы могут пропасть и _между_ проверкой параметров и актуальной работой. хотя, конечно, это гораздо меньше вероятно...

это как так?

тар должен сделать open директории (или как там оно), в результате даже при удалении директории снаружи для него она останется

впрочем, если в ком строке файлов больше, чем тар может одновременно открыть, то тогда да

www_linux_org_ru ★★★★★ ()
Ответ на: комментарий от exorcist

R-Studio (если не смущает закрытость и торренты)?

не смущает, но сначала я попробую вспомнить, че там на диске происходит, разобраться, прав ли тар и т.п.

www_linux_org_ru ★★★★★ ()
Ответ на: комментарий от www_linux_org_ru

1. tar изначально был для ленточек.
2. не только tar вам перезапишит файл, примеров можно найти массу(я не только про архиваторы), даже если говорить про гуйню, максимум что у вас спросят это «хотим перезаписывать или нет?». Вот тут тема про новый rar я почти уверен что если в гуйне winrar накидать файлов в архив, потом удалить сами файлы, и после этого нажать создать архив, первое что спросят «будем перезаписывать или нет?» потом также снесем предыдущий а вот архивировать уже нечего.
2.1 реальный пример из моей жизни, хоть это было и давно, но факт остается фактом... емнип это был c++builder, на диске заканчивалось место из-за того что параллельно неспешно что-то вытягивалось с инета, в какой-то момент при очередном «сохранить» вылетела бредовая ошибка, ну блина подумал я, опять глюканул, и закрыл его, а оказалось все сложнее, на момент когда я жмякнул сохранить, билдер создал нулевой файл в этот момент те несколько кб успешно занялись скачиваемым, и все - места нэма, результат нулевой проект. Да, я сам ссзб. Но я к тому что всего не предусмотреть и рядли большинство софта (да хоть текстовые редакторы) проверяют свободное место (не обязательно свободное место) перед сохранением и выдают адекватную ошибку в случае нехватки. Вот еще пример, мс офис по мак, в случае изменения файла со стороны (owncloud) даже не ругается что не может сохранить, только вот при закрытии говорит сохранить? говоришь угу и никакой ругани что не сохранил.
3. Про ссзб, большинство cli команд по умолчанию работают в не интерактивном режиме, т.е. набирая команду подумай прежде чем жмякать enter. Про rm я неслучайно намекнул, также сам недавно на грабли наступил не проверив pwd а это был симлинк, и это не смотря на то что привык двадцать раз подумать прежде чем выполнить, но вот стечение обстоятельств такое оказалось, надо было срочно, поторопился. Все к тому что и «на старуху бывает...» человеческий фактор.
3.1 Вы могли бы выполнить команду находясь в другом каталоге и также переписало бы только уже другими данными.

4. К вашей теме. Согласен, что баг репорт стоит отправить разработчикам. Только вот не существование каталога как вы описали, а проверку что хотя бы 1 байт получен для архивирования и только после этого создавать архив.

anc ★★★★★ ()

какого черта этот говноtar похерил архив в 2 гига, хотя четко и явно видел, что архивировать нечего?!

Не считаю, что тар что-то сделал неправильно. Ему была дана ясная команда — сделать архив. Он его и сделал. По указанному пути. Ну так уж получилось, что из всех перечисленных файлов, которые туда нужно было добавить, ни один не существовал, поэтому в созданном архиве не оказалось файлов. Если бы хоть какие-то существовали, они бы добавились.

Багрепорт писать бессмысленно, тут программа всё правильно сделала, что ей сказали. Был бы баг, если бы она не создала архив, несмотря на указание создать его.

gentoo_root ★★★★★ ()
Ответ на: комментарий от anc

Но я к тому что всего не предусмотреть и рядли большинство софта (да хоть текстовые редакторы) проверяют свободное место (не обязательно свободное место) перед сохранением и выдают адекватную ошибку в случае нехватки.

Насколько я знаю, вим при сохранении создаёт временный файл, пишет туда, а потом атомарно заменяет исходный файл. Таким образом, при любом отказе в любое время (пропадание питания, нехватка места) в результате на диске окажется либо старая, либо новая версия файла, но никак не пустой или повреждённый файл. Хвалёная же визуалстудия от майкрософта на моих глазах когда-то потёрла файл, когда при сохранении пропало питание, хорошо, файл и весь комп не мой был. В каталоге с автосейвами никакую версию файла при этом не нашли.

gentoo_root ★★★★★ ()
Ответ на: комментарий от gentoo_root

Не, ну vim то не надо приводить в пример :) Это качественное исключение из правил. Но вот простые юзеры в 2017-м рядли его осилят. Да и как видите у ТС немного взорвало от того что неправильно выполнил команду.
Хотя я с вами не согласен, баг репорт (ну или фичреквест) стоит запостить, исходники тара не смотрел но имхо стоит поменять местами «создание файла» и «получение первых данных».

anc ★★★★★ ()
Ответ на: комментарий от gentoo_root

Не считаю, что тар что-то сделал неправильно. Ему была дана ясная команда — сделать архив. Он его и сделал. По указанному пути.

неговнопроги имеют для затирания ключ -f, пример:

   usage: bzip2 [flags and input files in any order]

   -h --help           print this message
   -d --decompress     force decompression
   -z --compress       force compression
   -k --keep           keep (don't delete) input files
   -f --force          overwrite existing output files <------------ это
www_linux_org_ru ★★★★★ ()
Ответ на: комментарий от anc

Но я к тому что всего не предусмотреть и рядли большинство софта (да хоть текстовые редакторы) проверяют свободное место (не обязательно свободное место) перед сохранением и выдают адекватную ошибку в случае нехватки.

до чего люди привыкли к говнософту...

в кде простейший редактор kwrite (это как notepad с подсветкой синтаксиса) при попытке перезаписать файл foo.txt сначала переименует его в foo.txt~ и только затем создаст новый файл; если же создать новый файл не получается (это м.б. не только полный диск, но и права, т.е. права записи в директорию нет, а право на запись в файл есть), то он спросит об этом

www_linux_org_ru ★★★★★ ()
Последнее исправление: www_linux_org_ru (всего исправлений: 2 )
Ответ на: комментарий от www_linux_org_ru

неговнопроги имеют для затирания ключ -f

Все coreutils (mv, cp, rm, ...) будут затирать по умолчанию. Чтобы не затирали, они имеют ключ -i (который впоследствии можно отменить ключом -f, но это уже не важно). Так что поведение с затиранием по умолчанию стандартное. Другое дело, я не нашёл у tar аналога -i, это уже не очень прикольно.

gentoo_root ★★★★★ ()
Ответ на: комментарий от www_linux_org_ru

в кде простейший редактор kwrite (это как notepad с подсветкой синтаксиса) при попытке перезаписать файл foo.txt сначала переименует его в foo.txt~ и только затем создаст новый файл

Забыл упомянуть, я как ссзб, нажал несколько раз. Т.е. и резервный и основной были нулевые. Так что ваш вариант, «не вариант».

anc ★★★★★ ()
Ответ на: комментарий от gentoo_root

Другое дело, я не нашёл у tar аналога -i, это уже не очень прикольно.

-w но замучаешься отвечать.

anc ★★★★★ ()

скорее всего уже не восстановишь.

Lord87 ()
Ответ на: комментарий от www_linux_org_ru

сначала я попробую вспомнить, че там на диске происходит

Если долго вспоминать на рабочем не отключённом диске, то даже если что-то там и осталось, оно может быстро исчезнуть.

aureliano15 ★★ ()
Ответ на: комментарий от aureliano15

Если долго вспоминать на рабочем не отключённом диске, то даже если что-то там и осталось, оно может быстро исчезнуть.

он не рабочий: после этой ситуации я пишу на другую партицию

lsof | grep sda12 дает пустую строку

в принципе его и отмонтировать можно на всякий случай

www_linux_org_ru ★★★★★ ()
Последнее исправление: www_linux_org_ru (всего исправлений: 1 )
Ответ на: комментарий от anc

Забыл упомянуть, я как ссзб, нажал несколько раз. Т.е. и резервный и основной были нулевые. Так что ваш вариант, «не вариант».

это почему? kwrite спросит при нажатии и второй раз

а если первое сохранение обломалось, то он видимо спросит «сохранять ли несмотря на ошибки» — попробуй проведи эксперимент

www_linux_org_ru ★★★★★ ()
Последнее исправление: www_linux_org_ru (всего исправлений: 2 )
Ответ на: комментарий от www_linux_org_ru

Очень сильно спорить не буду. Если kwrite работает так же как вим, ну что же, честь и хвала. Но вот выяснить это можно только почитав код, что безусловно лениво в рамках спора.

anc ★★★★★ ()
Ответ на: комментарий от www_linux_org_ru

в принципе его и отмонтировать можно на всякий случай

отмонтировать можно нужно

aureliano15 ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.