Резервное копирование данных с сохранением списков контроля доступа и разрешений POSIX

Резервное копирование данных с сохранением списков контроля доступа и разрешений POSIX

Я ищу практичный способ резервного копирования данных с сервера и сохранения всех 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опции и, конечно, иметь соответствующие разрешения на чтение/запись этихи.

Примеры:

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для'ed версия и т.д.
  • Уровень сжатия, используемый неявным zstdкомпрессором, задается указанной ZSTD_CLEVELпеременной окружения в начале той же строки.
  • См. страницы руководства: tar(1)и zstd(1).

2. Извлечение этого архива:

sudo tar --acls --xattrs -xvf systemd-network-conf.tzst

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

  • Все настройки, которые вы установили с помощью//в оригиналах, будут сохранены в извлеченной версии.

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, поскольку никакой разницы нет.

Связанный контент