100 GBを超えるデータを含むいくつかのディレクトリがあります。小さいボリューム(たとえば、それぞれ10 Gb)で保存しようとしています。独立/独立。
問題は、tar
+を使用すると、split
独立していない複数のtar部分が生成されることです。まず、すべてを1つの大きなファイルにマージしない限り、部品の1つからのみファイルを抽出することはできません。
また、分割ボリュームを試してみましたが、tar -c -L1000M ...
それも機能せず、長いファイル名が切り捨てられるという問題があります。
また、試してみましたが、star
ボリュームが独立しておらず、7zipがUNIXで権限を保持していないようです。
別々の分割アーカイブが必要なのは、セキュリティの目的です。パーティションファイルの1つが破損していても、他のアーカイブからデータを取得できます。すべてのアーカイブを1つの大きなボリュームに再マージせずに特定のファイル/フォルダのみを抽出したい場合でも、はるかに高速です。
どうすればこれを最良に達成できますか?ありがとうございます。
解決策を探す
@Haxielの答えで提案されているように、tarを使用して解決策を見つけました。答えは以下に掲示されています。
ファイルがボリュームの境界を超えて使用可能な次のボリュームがない場合、1つまたは2つのファイルがまだ失われる可能性がありますが、他の部分が失われても少なくとも個々のボリュームは独立して抽出できます。
答え1
@Haxielの答えで提案されているように、tarを使用して解決策を見つけました。使用されるコマンドは次のとおりです。
tar -c -L1G -H posix -f /backup/somearchive.tar -F '/usr/bin/tar-volume.sh' somefolder
-エル:アーカイブサイズ制限(例:1GB)の定義
-時間:Posix形式を使用する必要があります。それ以外の場合は、長いファイル名が切り捨てられます。
-F:tar の連続アーカイブファイル名を生成するには、ボリュームスクリプトが必要です。
このコマンドは、次の形式でマルチボリュームアーカイブを生成します。somearchive.tar、somearchive.tar-2、somearchive.tar-3...
以下は私です。tar-volume.sh、これから適応地図時間。
#!/bin/bash
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE
name=`expr $TAR_ARCHIVE : '\(.*\)\(-[0-9]*\)$'`
case $TAR_SUBCOMMAND in
-c) ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || exit 1
;;
*) exit 1
esac
echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD
3番目のアーカイブボリュームの内容を一覧表示するには:
tar -tf /backup/somearchive.tar-3
特定のアーカイブボリュームを抽出するには:
tar -xf /backup/somearchive.tar-3
1つのボリュームのみを抽出する場合は、アーカイブの先頭または末尾から別のボリュームに分割された不完全なファイルがある可能性があります。 Tarは次のサブフォルダを作成します。GNUFileParts.xxxx/ファイル名不完全なファイルが含まれています。
Unixからボリュームセット全体を抽出するには、ボリュームスクリプトを使用して再度実行する必要があります。
tar -xf /backup/somearchive.tar -F '/usr/bin/tar-volume.sh'
Windowsから抽出する場合、tarコマンドはbashシェルを必要とするため、ボリュームスクリプトを正しく実行しません。まず、次のコマンドを実行し、コマンドラインにボリュームファイル名を手動で入力する必要があります。
tar -xf somearchive.tar -M
-中マルチボリュームアーカイブであることを示します。 tarが最初のボリュームの抽出を完了すると、すべてのボリュームが抽出されるまで、次のボリュームの名前を入力するように求められます。
ボリュームが多い場合は、最初にすべてのボリューム名シーケンスを入力し、最初のボリュームを抽出してからバッチ全体をコピーして、tarのコマンドラインプロンプトに貼り付けることができます。
n somearchive.tar-2
n somearchive.tar-3
n somearchive.tar-4
参考にしてくださいN上記はtarコマンドで、次のパラメータが新しいボリュームファイル名であることを示しています。
ファイルがボリュームの境界を超えて使用可能な次のボリュームがない場合でも、1つまたは2つのファイルが失われる可能性がありますが、他の部分が失われても少なくとも個々のボリュームは独立して抽出できます。
詳細については、次を参照してください。タール文書。時間
答え2
これは完璧なソリューションではありませんが、GNUtar
のマルチボリュームアーカイブはあなたが探しているものに近いようです。このオプションは既にお客様の質問に記載されていますが、以下で追加したいと思います。GNUtar
マニュアルこれがこれが可能なオプションである理由を明確にします。
マルチボリュームアーカイブは、複数の固定サイズのメディアボリュームに保存された単一のtarアーカイブです。このセクションでは、一般に「ボリューム」をテープと呼びますが、マルチボリュームアーカイブをテープに保存する必要はありません。代わりに、ユーザーが便利だと思うすべてのメディアタイプを使用でき、ファイルにもあります。
マルチボリュームアーカイブを作成すると、GNU tarはスペースが足りなくなるまで現在のボリュームをいっぱいにし、次のボリュームに切り替えます。(通常、オペレータはこの時点でテープを交換する必要があります。)新しいボリュームを処理し続けます。これは、要求されたすべてのファイルがダンプされるまで続きます。GNU tarがファイルをダンプするときにメディアの終わりを検出すると、そのファイルは分割形式で保持されます。 非常に大きなファイルの中には、複数のボリュームに分割することもできます。
各ボリューム自体は有効なGNU tarアーカイブなので、特別なオプションなしで読み取ることができます。したがって、あるボリュームに完全に存在するファイルメンバーは、別のボリュームを必要とせずに抽出または操作できます。もちろん、分割メンバーを抽出するには、そのメンバーを持つすべてのボリュームが必要です。
マルチボリュームアーカイブにはいくつかの制限があります。特に圧縮できません。
この定義によると、問題を引き起こす唯一のファイルは、サイズの境界を超えて分割されたファイルです。単一のボリュームに完全に含まれるファイルは、他のボリュームとは独立したものと見なすことができます。
各ボリュームに対してこの-v
オプションを使用して、分割ファイルを識別できます。
$ tar -tf multi-test2.tar -v
M--------- 0/0 658432 1970-01-01 03:00 file1--Continued at byte 7341568--
-rw-r--r-- test/users 4000000 2019-03-06 12:12 file2
単一のアーカイブと同様に、完全に埋め込まれたファイルを抽出できます。tar
分割されたファイルが不完全だと文句を言うようですが、問題なくファイル全体を抽出できます。
また、このオプションを使用して複数のボリュームの分割ファイルを単一の単位で抽出することができます。これにより、次の-M
ボリュームの名前を入力するように求められます。使用法が文書化されているここ。代わりに、ボリュームを単一のアーカイブにリンクする場合は、次のことを考慮できます。tarcatユーティリティしかも。
答え3
(まだコメントできないので、新しい回答で書いています)
〜のように実際にコメントでも言及されていますが、MacOS tar では動作しない場合があります。
Brewを使ってMacにgnu-tarをインストールできることを指摘したかったです。
brew install gnu-tar
gtar
その後、代わりに使用してください。tar
答え4
使用する場合
star -c tsize=1G ...
tarアーカイブは独立した方法で分割されます。
すべてのアーカイブを別々のファイルに保存するには、十分なオプションを指定する必要がありますf=filename
。f=
すべてのアーカイブがフルサイズではないことを考慮して、必要なだけ多くのオプションを指定する必要があります。