誰かが権限について同様の質問をしたことを知っていますが、どのような圧縮またはアーカイブが各ファイルとディレクトリの権限とファイル所有者を保持しますか?
tar.gz
フォーマットを悩んでいますが、これは適切ですか?
37GBのファイルとディレクトリを別のサーバーに移動し、すべてが圧縮されていない状態とまったく同じである必要があります。
答え1
2つの既存のアーカイブツールアスファルトそしてCPIO所有権とUnix権限(ユーザー/グループ/その他)はもちろん、タイムスタンプも保存します(cpioの使用、-m
抽出時に必ず渡す)。あの人が好きじゃないならあいまいな構文1. POSIX代替品が利用可能公園(pax -w -pe
)これらはすべて圧縮されていないアーカイブを出力します。アーカイブを圧縮するgzip
か、同じツールにパイプしますxz
(GNU tarには圧縮オプションがあります)。ユーザーとグループは名前で識別されます。 GNU tarにはオプションがあります。
これらのツールのいずれも、ACL、機能、セキュリティコンテキスト、またはその他の拡張属性などの最新の機能を維持しません。
一部の tar バージョンでは ACL を保存できます。バラよりファイルをバックアップしてACLを保存するには、何を使用する必要がありますか?GNU tar は--acls
アーカイブを作成し、解凍時に両方渡します。
次のsquashfsファイルシステムMike Selfが提案した、SELinux コンテキストを含む機能および拡張属性を保存しますが、ACL は保存しません。 (あなたはあまりアンティーク版.) ACLとセキュリティコンテキストの両方がある場合は、squashfsファイルシステムを使用し、元のファイルシステムのルートで実行してACLを保存しgetfacl -R
ますsetfacl --restore
。
ACL、1秒未満のタイムスタンプ、拡張属性、ファイルシステム固有の属性を含むすべてを保存するには、ファイルシステムを複製するだけです。このアプローチの欠点は、圧縮されたコピーを直接便利に作成できないことです。ファイルシステムを複製する究極の方法は、ブロックデバイスをコピーすることです。これは空き領域をコピーするので無駄です。または、すべてのファイルを保存するのに十分な大きさのファイルシステムを作成し、GNU coreutilsのcp -a
コマンドを使用してcp
ファイルをコピーします。 GNU cpは、拡張属性やACLなどの非伝統的な機能を含む、すべてをコピーするのに非常にうまくいきます。
1これは実はちょっと誇張された表現です。
答え2
Linuxシステムについて話している場合、他のオプションは次のとおりです。カボチャのファイルシステム。非常に高い圧縮率を達成することが多く、圧縮プロセス自体はマルチスレッドであるため、すべてのプロセッサコアを圧縮タスクに適用できます。
squashfs アーカイブは、ファイルシステムという点で他のほとんどのタイプとは異なります。 Linux Liveディスクを起動したことがある場合は、おそらくこれを見たことがあります。ほとんどすべてがsquashfsアーカイブをルートファイルシステムとしてマウントすることによって機能します。バージョン2.6.34以降、squashfsはバニラLinuxカーネルでサポートされています。したがって、これはすべての最新のLinuxシステムで非常に汎用性があります。
Squashはすべてのgzip、lzma、lzo、xz、または(カーネル3.19から)lz4圧縮方法。 Squash Archiveのコンテンツをインストールしてアクセスするには、ツールがまったく必要なく、次のことができます。
mount ./img.sfs /mnt; cd /mnt
...理解するために。これにより、カーネルのネイティブがアーカイブの内容を提供します。仮想ファイルシステム読み取り専用インストールなので、他の種類のファイルと同様に、その中のすべてのファイルを読み取ることができ、アーカイブを解凍する必要はありません。(必要に応じてLinuxカーネル自体によってディスクキャッシュとして即座に処理されます)。実際、最新のカーネルでlz4サポートを使用すると、次のことができます。基本速度 (場合によっては速いかもしれません)同様に、圧縮ファイルへのアクセスに対するCPU使用率は増加します。
squashfsアーカイブを作成または解凍するには、squashfs-toolsパッケージをインストールする必要があります。私が知っているディストリビューションでは通常はデフォルトではインストールされませんが、パッケージマネージャを介してパッケージを提供しないディストリビューションも見たことがありません。インストール後、次のアーカイブを作成できます。
echo 'this is my new file' >~/Downloads/newfile.txt
mksquashfs ~/Downloads ./mysqsh.sfs -comp xz
Parallel mksquashfs: Using 6 processors
Creating 4.0 filesystem on ./mysqsh.sfs, block size 131072.
[===================================================-] 1018/1018 100%
Exportable Squashfs 4.0 filesystem, xz compressed, data block size 131072
compressed data, compressed metadata, compressed fragments, compressed xattrs
duplicates are removed
Filesystem size 12592.01 Kbytes (12.30 Mbytes)
57.19% of uncompressed filesystem size (22019.04 Kbytes)
Inode table size 8482 bytes (8.28 Kbytes)
23.91% of uncompressed inode table size (35477 bytes)
Directory table size 10210 bytes (9.97 Kbytes)
42.90% of uncompressed directory table size (23802 bytes)
Xattr table size 3976 bytes (3.88 Kbytes)
48.67% of uncompressed xattr table size (8170 bytes)
Number of duplicate files found 61
Number of inodes 1064
Number of files 926
Number of fragments 68
Number of symbolic links 6
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 132
Number of ids (unique uids + gids) 1
Number of uids 1
mikeserv (1000)
Number of gids 1
mikeserv (1000)
mksquashfs ... 7.08s user 0.35s system 462% cpu 1.607 total
ご覧のとおり、ファイル権限を明確に尊重します。拡張ファイルシステムファイルのプロパティも保存して尊重します。(xattrs)ほとんどの状況で。ご覧の圧縮比はまた私の一般的なファイルシステムのデフォルトのlzo圧縮 -(私のルートファイルシステムはbtrfsで、すべてのファイルはlzoに圧縮されています)- 言うまでもなく多い。~/Downloads
まずダウンロードした圧縮ファイルが占められます。
これは、それ自体適切なファイルシステムに即座にマウントできます。
sudo mount ./mysqsh.sfs /mnt; \
cd /mnt; cat newfile.txt; cd -; \
sudo umount /mnt
this is my new file
いつものように、すべてのマウントには通常root権限が必要ですが、/etc/fstab
必要に応じて他のマウントと同様にsquashfsマウントの名前を指定できます。
最後に、squashfsアーカイブを解凍するために高い権限が必要なく、unsquashfs
ツールだけが必要です。(squashfs-toolsパッケージでも利用可能):
unsquashfs -d /tmp/mysqsh ./mysqsh.sfs; \
cd /tmp/mysqsh; cat newfile.txt
Parallel unsquashfs: Using 6 processors
933 inodes (1025 blocks) to write
[=================================================|] 1025/1025 100%
created 927 files
created 132 directories
created 6 symlinks
created 0 devices
created 0 fifos
this is my new file