
Я ищу практичный способ резервного копирования данных с сервера и сохранения всех ACL и разрешений. Я рассматривал tar, но, согласно Google, tar не сохраняет ACL. Я знаю, что rsync может сохранять ACL и разрешения, но только если целевая система поддерживает POSIX ACL и имеет тех же пользователей. В моем случае я делаю резервное копирование в каталог, который находится на AFS, поэтому POSIX ACL не поддерживаются.
На данный момент я решил проблему, написав скрипт, который использует find для рекурсии по системе (я использую find, потому что мне нужно исключить некоторые каталоги) и сохраняет разрешения и ACL в текстовый файл. Это решение работает, но мучительно медленно. Есть ли лучшее решение?
решение1
apt-get install star
man star
star -acl -whatever -other -options -you -need
Star — это tar с поддержкой расширенных заголовков POSIX, то есть, возможность хранить некоторые дополнительные данные о файле в файле tar. Опция -acl
получает ACL; она нужна как для создания архива, так и для извлечения.
решение2
Если вы не хотите устанавливать еще одну программу, вы можете создать резервную копию списков ACL по отдельности:
getfacl -R somedir > acls.txt
Это позволит сохранить все списки ACL somedir
в файле acls.txt
.
Для восстановления используйте:
setfacl -R --set-file=acls.txt somedir
решение3
рядом со звездой вы можете использоватьbsdtar
решение4
Перепост моего ответа здесь:https://unix.stackexchange.com/a/725745/550161
При создании/извлечении архива необходимо использовать оба--acls
и --xattrs
опции и, конечно, иметь соответствующие разрешения на чтение/запись этихаклиxattr.
Примеры:
1. Создание архива:
ZSTD_CLEVEL=19 tar --acls --xattrs -caPf systemd-network-conf.tzst --directory=/etc systemd/network systemd/networkd.conf.d
Вышеприведенный код создаст zstd
сжатый tar
архив с использованием уровня сжатия 19
, сохраняя при этом ACL и расширенные атрибуты.
- Расширение
.tzst
означает «асмолаархив с использованиемзстдсжатие", как иtgz
дляgzip'ed версия и т.д. - Уровень сжатия, используемый неявным
zstd
компрессором, задается указаннойZSTD_CLEVEL
переменной окружения в начале той же строки. - См. страницы руководства:
tar(1)
иzstd(1)
.
2. Извлечение этого архива:
sudo tar --acls --xattrs -xvf systemd-network-conf.tzst
Вышеуказанная команда создаст в вашем текущем каталоге подкаталог, названный так, systemd
потому что это общий корневой каталог внутри архива.
- Все настройки, которые вы установили с помощьюЧаун/чмод/setfaclв оригиналах, будут сохранены в извлеченной версии.
3. Сравнение атрибутов исходного и извлеченного файла.
{cd /etc; getfacl -R systemd/network systemd/networkd.conf.d} >original.acl; cd -
getfacl -R systemd/network systemd/networkd.conf.d >extracted.acl
diff -u original.acl extracted.acl
- Вы не должны увидеть вывод из первых двух строк, поскольку он перенаправлен в файл.
(Исключение составляет первая строка, которая выведет ваш текущий каталог, поскольку последняя строкаcd -
является отдельной командой, которая просто восстанавливает ваш текущий каталог.) - Вы также не должны увидеть никаких выходных данных из строки diff, поскольку никакой разницы нет.