When using the tar utility to store files in backups one loses the extended ACLs.
Is there some commonly used and not hackish solution (like: create a script that will recrate the ACLs from scratch) to preserve the ACLs?
When using the tar utility to store files in backups one loses the extended ACLs.
Is there some commonly used and not hackish solution (like: create a script that will recrate the ACLs from scratch) to preserve the ACLs?
Actually, I believe the question was not about the (standard) file permission bits, but extended ACL information (see setfacl(1) or acl(5)).
To my knowledge, the unmodified GNU tar ignores ACL information. (The man page for GNU tar 1.15.1 as shipped with RHEL 5.2 mentions switches --acls and --no-acls, but I haven't gotten them to work.)
However, the star program is able to back up and restore ACLs, if you select the exustar format:
star -c -p -acl artype=exustar -f archive.tar files...
star -x -acl -f archive.tar
Star home page: http://cdrecord.berlios.de/new/private/star.html Star is available in ubuntu, at least.
I'm looking for a solution as well so far I found this:
first do a getfactl from my folder
getfacl -R /a_folder > folder.acl
then do a regular tar
tar -czvf folder.tar.gz /a_folder
when I extract it
tar -xvf folder.tar.gz
do a setfacl for the permissions.
setfacl --restore=folder.acl
this works for me.
Using tar
To create:
tar --acls -cpf backup.tar some-dir-or-file
To untar:
tar --acls -xpf backup.tar
I suggest you to use bsdtar.
bsdtar backups extended ACL by default, it uses the same syntax as GNU tar, and the archives it produces are readable by GNU tar.
The package and command name (under Debian based distributions) is bsdtar.
bsdtar cf archive.tar /my/folder/using/extd_acl
bsdtar xf archive.tar
The 2nd (extract) command restores ACLs.
If you're looking for a simple-to-use yet powerful solution, I'd recommend rdiff-backup.
Basically, it makes a copy of a source directory to a destination directory but it also saves additional information so you can go back in time to whenever you want.
And, of course, it preserves symlinks, special files, hardlinks, permissions, uid/gid ownership and modification times.
From the tar Man Page.
-p, --same-permissions, --preserve-permissions
ignore umask when extracting files (the default for root)
It is not actually the act of archiving that alters the access permissions(ACLs), but the act of unpacking them. Tar is very often used to distribute files from one user to another, and so it is thought convenient to apply a users umask when they unpack.
To preserve the files previous permissions, simply ad a p for to your options. For example
Straight tar:
tar xvp some-file
bz.tar:
tar xvjp some-file
gz.tar:
tar xvzp some-file
@silk
When using the tar utility to store files in backups one loses the extended ACLs.
Is there some commonly used and not hackish solution (like: create a script that will recrate the ACLs from scratch) to preserve the ACLs?
When creating/extracting the archive you need to use both the --acls and --xattrs options and of-course have the proper permissions to read/write those acl and xattr.
ZSTD_CLEVEL=19 tar --acls --xattrs -caPf systemd-network-conf.tzst --directory=/etc systemd/network systemd/networkd.conf.d
The above will create a zstd compressed tar archive, using compression level 19, while preserving the ACL's and extended attributes.
.tzst extension means "a tar archive using zstd compression", just like tgz is for a gzip'ed version etc.zstd compressor is set by the provided ZSTD_CLEVEL environment variable at start on same line.tar(1) and zstd(1).sudo tar --acls --xattrs -xvf systemd-network-conf.tzst
The above will create, in your current directory, a sub-directory named systemd because that's the common root-dir inside the archive.
{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 - as separate command, which just restores your current directory.)