tar: Ошибка при рахзархивации: Cannot rename ... to ...: No such file or directory

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
жучара
Сообщения: 1051
ОС: астралинукс

tar: Ошибка при рахзархивации: Cannot rename ... to ...: No such file or directory

Сообщение жучара »

Друзья! Вот такая у меня происходит ошибка и я не знаю из-за чего она.

--------------------------------------------------------------

Продолжаю ковыряться с таром. Инкрементное копирование, Debian 12. Имеются два архива- начальный _0.tar и следующего уровня _1.tar.

Начальный разархивирую без ошибок в пустую папку foo:

Shell

$ tar --extract -G --listed-incremental=/dev/null --file _0.tar -C foo
$
А следующий в эту же папку разархивируется с такой ошибкой:

Shell

$ tar --extract -G --listed-incremental=/dev/null --file _1.tar -C foo
tar: Cannot rename 'user/Desktop/qqq/yyy' to 'user/Desktop/chroot_qtbase5/usr/share/bug': No such file or directory
tar: Exiting with failure status due to previous errors
$
И я никак не могу понять, она чего вообще значит эта ошибка. Если бы я мог её воспроизвести с вашей помощью, быть может, это продвинуло бы меня вперёд, но воспроизвести её я не могу. Ибо не знаю, чё делать-то для этого. При инкрементной разархивации папки ведь что происходит?

1) Создание недостающих папок/файлов
2) Удаление папок/файлов, которые были удалены из инкрементной папки
3) Изменение необходимых файлов

...Ну тут варианты всякие могут быть. Например, "Изменение необходимых файлов" может сделано так: сперва изменённые файлы, которые без изменений удаляем, потом изменённые файлы, которые с изменениями, добавляем. Это детали.

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

...Архивы _0.tar и _1.tar приложить не могу потому что:
1) Архивы большие. Я инкрементно архивировал рабочую файловую систему, а там сами понимаете, что. Я пытался удалить сколько можно файлов и/или папок из архивов, но всё равно их осталось там много, порядка нескольких тыщ.
2) Файлы в них личные.

Что интересно, вот здесь ребята, похоже, пытаются воспроизвести эту ошибку. И безуспешно.
А здесь вообще советуют забить на тар из-за этой ошибки.

...Кстати говоря, инкрементное восстановление произошло успешно, по-моему (с десяток таких ошибок на несколько больших архивов, файлы сплошь кэш firefox, насколько я могу судить). Работаю на восстановленной системе недели полторы уж. Но хотелось бы доразбираться тык скыть. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 454

Re: tar: Ошибка при рахзархивации: Cannot rename ... to ...: No such file or directory

Сообщение sunjob »

рах-зархивации
:crazy:
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1051
ОС: астралинукс

Re: tar: Ошибка при рахзархивации: Cannot rename ... to ...: No such file or directory

Сообщение жучара »

В принципе, я нашёл ответ на вопрос- одну из ситуаций, когда при разархивировании тар переименовывает некоторые члены архива. И безуспешно.

При очередном инкрементном копировании папки, тар, помимо всего прочего, проверяет подпапки на иноды. И если инод какой-нибудь папки (A) совпадает с инодом одной из уже имеющихся папок (B) (Смотрится в снаре. Имена папок, естественно разные, при этом содержание папки A не изменилось; последнее проверяется по времени модификации папки) считается, что это одна и та же папка, просто переименованная. Поэтому на этой стадии инкрементного копирования такая папка A вместе со всем содержимым сархивирована НЕ БУДЕТ (экономия пространства), а будет просто пометка во вновь созданном архиве- "при разархивации переименовать B в A". И всем хорошо.

А если при разархивации папка B будет отсутствовать, то такая ошибка и вылезет.
Вот так понятнее должно быть. Создадим папку foo, в ней папку foo/bar, а в ней файл foo/bar/file

Shell

$ mkdir -p foo/bar
$ echo cafebabe > foo/bar/file
$ tree foo
foo
└── bar
└── file

2 directories, 1 file
$
Архивнём всё это дело:

Shell

$ tar --create --file=0.tar --listed-incremental=user.snar foo
$
Папку foo/bar переименуем:

Shell

$ mv foo/bar foo/xxx
$
Ещё раз архивнём:

Shell

$ tar --create --file=1.tar --listed-incremental=user.snar foo
$
В этом месте в файле 1.tar пометка- при разархивации переименовать папку foo/bar в папку foo/xxx. (Чтобы убедиться в этом нужно смотреть формат инкрементного *.tar архива)

Вот посмотрим список нашего начального архива:

Shell

$ tar --list --file=0.tar
foo/
foo/bar/
foo/bar/file
$
Папку foo/bar/ со всем содержимым удалим из него (ну то есть видно, что еcли понадобится переименование foo/bar в foo/xxx, то ввиду отсутствия foo/bar, будет ошибка):

Shell

$ tar --delete --file=0.tar foo/bar/
$ tar --list --file=0.tar
foo/
$
Ну и на всякий случай содержимое 1.tar:

Shell

$ tar --list --file=1.tar
foo/
foo/xxx/
$
Пошли разахивировать:

Shell

$ rm -r foo
$ tar --extract --listed-incremental=/dev/null --file=0.tar
$ tar --extract --listed-incremental=/dev/null --file=1.tar
tar: Невозможно переименовать «foo/bar» в «foo/xxx»: Нет такого файла или каталога
tar: Завершение работы с состоянием неисправности из-за возникших ошибок
$
Ну вот так и есть. В моём реальном случае ошибка такая:

Shell

$ sudo tar --extract --listed-incremental=/dev/null --file 2.tar.gz -C foo
tar: Невозможно переименовать «user/.mozilla/firefox/yntp4z3k.default-esr/storage/default/https+++www.fandom.com/ls/ls» в «user/.mozilla/firefox/yntp4z3k.default-esr/storage/default/https+++www.fandom.com»: Нет такого файла или каталога
tar: Завершение работы с состоянием неисправности из-за возникших ошибок
$
То есть получается, отсутствует папка user/.mozilla/firefox/yntp4z3k.default-esr/storage/default/https+++www.fandom.com/ls/ls
Она может удалиться при восстановлении уже (ну то есть разархивировал- удалил, дальше разархивировал, получил ошибку), что не так- я ничё сам не удаляю. Либо, получается, я от нечего делать в межинкрементный интервал полез, на минуточку в 46-гиговый тар-архив, не поленился, нашёл там эту папку и её удалил... Бред какой-то.

Либо архив тар покоцанный, либо ещё есть причина появления такой ошибки. которую я пока не знаю.
Я просто читаю маны.
Спасибо сказали: