Linuxで実際に32MBのデータを保存する1TBのスパースファイルを取得しました。
スパースファイルを格納するパッケージを「効率的に」作成することは可能ですか? パッケージは、別のコンピューターで 1 TB のスパース ファイルに展開する必要があります。理想的には、「パッケージ」は約 32MB にする必要があります。
注: 考えられる解決策は、「tar」を使用することです: https://wiki.archlinux.org/index.php/Sparse_file#Archiving_with_.60tar.27
ただし、1TB のスパース ファイルの場合、tar ボールは小さいかもしれませんが、スパース ファイルのアーカイブには時間がかかりすぎます。
編集 1
tar と gzip をテストした結果は次のとおりです (このスパース ファイルには 0 バイトのデータが含まれていることに注意してください)。
$ du -hs sparse-1
0 sparse-1
$ ls -lha sparse-1
-rw-rw-r-- 1 user1 user1 1.0T 2012-11-03 11:17 sparse-1
$ time tar cSf sparse-1.tar sparse-1
real 96m19.847s
user 22m3.314s
sys 52m32.272s
$ time gzip sparse-1
real 200m18.714s
user 164m33.835s
sys 10m39.971s
$ ls -lha sparse-1*
-rw-rw-r-- 1 user1 user1 1018M 2012-11-03 11:17 sparse-1.gz
-rw-rw-r-- 1 user1 user1 10K 2012-11-06 23:13 sparse-1.tar
0 バイトのデータを含む 1TB のファイル sparse-1 は、「tar」によって 10KB の tar ボールにアーカイブするか、gzip によって ~1GB のファイルに圧縮できます。gzip は、tar が使用する時間の約 2 倍の時間を要します。
比較すると、「tar」は gzip よりも優れているようです。
ただし、0 バイトのデータを含むスパース ファイルには 96 分は長すぎます。
編集 2
rsync
ファイルのコピーtar
が より長く、より短い時間で終了したようですgzip
:
$ time rsync --sparse sparse-1 sparse-1-copy
real 124m46.321s
user 107m15.084s
sys 83m8.323s
$ du -hs sparse-1-copy
4.0K sparse-1-copy
したがって、この非常にまばらなファイルでは、 tar
+ cp
orscp
を直接使用するよりも高速にする必要があります。rsync
編集 3
新しいカーネルの SEEK_HOLE 機能を指摘してくれた @mvp に感謝します。(以前は 2.6.32 Linux カーネルで作業していました)。
注: bsdtar バージョン >=3.0.4 が必要です (ここを確認してください: http://ask.fclose.com/4/how-to-効率的にアーカイブ-a-very-large-sparse-file?show=299#c299 )。
新しいカーネルと Fedora リリース (17) では、スパース ファイルを非常に効率的tar
に処理します。cp
[zma@office tmp]$ ls -lh pmem-1
-rw-rw-r-- 1 zma zma 1.0T Nov 7 20:14 pmem-1
[zma@office tmp]$ time tar cSf pmem-1.tar pmem-1
real 0m0.003s
user 0m0.003s
sys 0m0.000s
[zma@office tmp]$ time cp pmem-1 pmem-1-copy
real 0m0.020s
user 0m0.000s
sys 0m0.003s
[zma@office tmp]$ ls -lh pmem*
-rw-rw-r-- 1 zma zma 1.0T Nov 7 20:14 pmem-1
-rw-rw-r-- 1 zma zma 1.0T Nov 7 20:15 pmem-1-copy
-rw-rw-r-- 1 zma zma 10K Nov 7 20:15 pmem-1.tar
[zma@office tmp]$ mkdir t
[zma@office tmp]$ cd t
[zma@office t]$ time tar xSf ../pmem-1.tar
real 0m0.003s
user 0m0.000s
sys 0m0.002s
[zma@office t]$ ls -lha
total 8.0K
drwxrwxr-x 2 zma zma 4.0K Nov 7 20:16 .
drwxrwxrwt. 35 root root 4.0K Nov 7 20:16 ..
-rw-rw-r-- 1 zma zma 1.0T Nov 7 20:14 pmem-1
3.6.5 カーネルを使用しています。
[zma@office t]$ uname -a
Linux office.zhiqiangma.com 3.6.5-1.fc17.x86_64 #1 SMP Wed Oct 31 19:37:18 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux