POSIX ACLと権限を維持しながらデータをバックアップする

POSIX ACLと権限を維持しながらデータをバックアップする

サーバーからデータをバックアップし、すべての 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 は拡張 POSIX ヘッダーをサポートする tar です。つまり、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

上記は、ACL と拡張属性を保持しながら、圧縮レベルを使用してzstd圧縮アーカイブを作成します。tar19

  • 拡張子.tzstは「アーカイブを使用して圧縮」はtgz'edバージョンなど
  • 暗黙的なコンプレッサーによって使用される圧縮レベルは、同じ行の先頭にzstd指定された環境変数によって設定されます。ZSTD_CLEVEL
  • man ページを参照してください: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
  • 最初の 2 行はファイルにリダイレクトされるため、出力は表示されません。
    (最初の行は例外で、最後の as 別個のコマンドにより現在のディレクトリが出力されますがcd -、これは現在のディレクトリを復元するだけです。)
  • 違いがないので、 diff 行からの出力も表示されないはずです。

関連情報