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?

ну и какой-нибудь свой скриптик, учитывающий "местную экзотику"... совсем необязательно все в одну команду пихать!.. ;)

Так и пишу

Так и пишу скриптик:

#!/bin/bash

FILENAME="backup.tar"
CREATE="cf $FILENAME"
APPEND="uf $FILENAME"

OPTS=' --preserve-permissions --preserve-order -P'

[ -d /boot/grub ] || mount /dev/sda1 /boot

DIR="/* /mnt/* /usr/portage /usr/portage_distfiles /usr/portage_packages"
DIR+=" "`find /var/log -type d`;
DIR+=" "`find /var/tmp -type d`;

tar $CREATE --no-recursion $DIR

EXCLUDE="--exclude /tmp --exclude /tmp-cache --exclude /var/tmp --exclude /var/log --exclude /run --exclude /dev"
EXCLUDE+=" --exclude /mnt --exclude /sys --exclude /media --exclude --exclude /backup --exclude /usr/portage"
EXCLUDE+=" --exclude /usr/portage_distfiles --exclude /usr/portage_packages"
EXCLUDE+=" --exclude /db --exclude /home"

tar $APPEND $EXCLUDE $OPTS /*

Возникла проблема - если делать 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 сохраняет лишь самый верхний каталог, но убивает все подкаталоги.

Мне крайне важно сохранить структуру директорий, потому как в логах, например, у меня куча поддиректорий и я запарюсь если что их вручную воссоздавать.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".