tar --no-recursive / --recursive
Захотелось мне сделать бэкап системы. Но без многогигабайтных накопившихся логов и прочей лишней радости.
В документации (http://www.gnu.org/software/tar/manual/html_section/recurse.html) на это есть решение: ключи --no-recursive dir1 dir2 ... --recursive dir100 dir101
Т.е. можно указать, в каких директориях следует опускаться вглубь, а в каких нет. Причем, даже есть конкретный пример:
$ tar -cf jams.tar --no-recursion grape --recursion grape/concord creates an archive with one entry for ‘grape’, and the recursive contents of ‘grape/concord’, but no entries under ‘grape’ other than ‘grape/concord’.
Но, похоже, в текущем tar эти опции являются глобальными и взаимоисключающими. Я сделал две директории aa и bb, в каждой есть файл 11 и поддиректория zz
# tar -cf test.tar --no-recursion aa --recursion bb && tar --list -f test.tar aa/ aa/zz/ aa/11 bb/ bb/zz/ bb/11
Внутри архива есть обе директории со всеми файлами и поддиректорией zz
Если же поменять порядок, то:
# tar -cf test.tar --recursion aa --no-recursion bb && tar --list -f test.tar aa/ bb/
Т.е. очевидно, что опции работают по принципу "последняя выиграла", хотя согласно документации каждая из них должна работать со своим списком директорий.
Пример из документации тоже не прокатил:
# tar -cf jams.tar --no-recursion grape --recursion grape/concord && tar --list -f jams.tar grape/ grape/zz/ grape/zz/11/ grape/bb grape/concord/ grape/concord/aa grape/concord/ grape/concord/aa
Версию tar я проверил - 1.27.1
Теперь, собственно, два вопроса:
1. Это баг или "так и было задумано".
2. Есть ли более простой метод бэкапа системы, позволяющий так же сохранять разрешения/владельцев на директориях, аккуратно игнорировать ссылки, игнорировать определенные директории по списку и т.д.?
- Для комментирования войдите или зарегистрируйтесь
cpio?
1. Если верить этому, то это bug!
2. cpio?
dump?
ну и какой-нибудь свой скриптик, учитывающий "местную экзотику"... совсем необязательно все в одну команду пихать!.. ;)
Так и пишу
Так и пишу скриптик:
Возникла проблема - если делать append/update, то нельзя использовать компрессию. Можно, конечно, ужать потом, но это лишнее IO.
Тогда я решил собрать архив одной командой, но наткнулся на вышеописанную проблему.
Можно, разумеется, использовать другие архиваторы. rar тот же, но мало ли какие там подводные камни...
Отписался в баги. Быстро
Отписался в баги. Быстро прислали патч. Теперь все работает.
http://lists.gnu.org/archive/html/bug-tar/2014-01/msg00020.html
К сожалению, ebuild тара не содержит в себе команды epatch-user, так что пришлось попутно освоить создание собственных оверлеев. Это нетрудно, но хлопотно.
можно посоветовать
можно посоветовать app-backup/dar как более интеллектуальное средство для бэкапов. кроме более подробного управления тем, что надо и не надо сохранять/сжимать, поддерживаются дифферециальные бэкапы и шифрование.
Читал документацию. Пробовал.
Читал документацию. Пробовал. Еще пробовал. Но так и не понял, как заставить его сохранять структуру директорий без файлов в оных. Потому как -X не работает с путями почему-то, а -P с ключом -D сохраняет лишь самый верхний каталог, но убивает все подкаталоги.
Мне крайне важно сохранить структуру директорий, потому как в логах, например, у меня куча поддиректорий и я запарюсь если что их вручную воссоздавать.