500GByte程のファイルを定期的に下記のコマンドで作成しています
環境:RedHat6 コマンド:tar -czvf hoge.tar.gz hoge/hoge ※tar --helpでverifyが無いことを確認しておりverifyが使用できません
上記コマンドで100GByte程のtar.gzファイルが生成されますが、このtar.gzファイルが正常に生成されていることを確認するようなコマンドやオプションもしくは手法はありますでしょうか?
解凍して比較するにはあまりにも多い量なので固めたファイルが正常に行われたことを確認したいと思っています。
アドバイスいただけると助かります。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答6件
0
何を確認したいかですね。
1.tar形式として正しいか? ⇒ tar tvf
で十分
2.含まれるファイルリストが正しいか? ⇒ tar tvf
で十分
3.個々のファイル内容が元のものと一致するか? ⇒ 展開が必要
追記:
--verifyオプションって、書いた直後に読み直すので、ディスクファイルに使ってもほとんど意味が無いです。
テープとかフロッピーみたいなメディアに出力するときに使います。
投稿2017/02/27 02:50
編集2017/02/27 03:50総合スコア86277
0
ベストアンサー
アーカイブに含まれるメタデータ (ファイルのモード、名前、サイズなど) の確認については、他の方のご回答の通り、tar tvf
やtar df
で足りると思います。ファイルの内容の検査について、考えたことを書きます。
もしも「tarの実行中に元のファイルは変更されないのに、作成したアーカイブに含まれるファイルが元のファイルと異なる」ということが起きるのなら、元のファイルをディスクから正しく読み出せていないということになるので[1]、ディスクの故障や欠陥を疑うべきではないかと思います。逆に言うと、ディスクを信頼できるのなら[2]、作成したアーカイブの内容は正しいものとして検査しない、という判断もあり得ると思います。
ただし、tarの実行中に元のファイルが変更される可能性があるのなら、内容の検査をする必要があります。ただこの場合も、tarの実行開始以降に元のファイルのmtimeやctimeが変わったものだけをアーカイブから抽出して元のファイルと比較すれば十分です。
もう一つ。作成されたアーカイブを他ホストに転送したりする際に、アーカイブファイルが破損することはありえます (ネットワークでの伝送の信頼性は、ディスクの読み書きよりもはるかに低いです)。
この場合、転送の前後にチェックサムを取るなどして比較してもよいと思います。またアーカイブ作成時にgzipで圧縮しているのであれば、転送後に整合性検査を行う (gunzip -t
) ことでも破損を検出できると思います (bzip2やxzで圧縮しているときも同様)。
以上、お望みの回答かどうか分かりませんが。
[1] ディスクフルで中断した場合や、使っているtar自体にバグがあるような場合は除く。
[2] 信頼性の担保としては、例えばS.M.A.R.Tのレポートを監視するといったものが考えられます。RAIDの誤り訂正能力を信じるといったものでもいいでしょう。
投稿2017/02/27 15:39
総合スコア4443
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
あ、tar zdf
があったっけ。
単純にサイズとかタイムスタンプの比較ならつかえますよ。
tarではなく別解になってしまうのですが。
cpio
コマンドで-H crc
オプションつけてチェックサム付きで固めるという手もあるかと。
たとえばこんな感じ。
$ find backup/ | cpio -v -o -H crc | gzip -9 > backup.cpio.gz
これを --only-verify-crc
で cpio
に食わせると、CRCを検証して破損してるかどうか確認できますよ。
$ gzip -cd backup.cpio.gz | cpio -v -i --only-verify-crc
ただ、crc形式にはファイルサイズの制約があったかと思うんで要注意ですが。
とりあえず参考まで。
投稿2017/02/27 03:49
編集2017/02/27 04:14総合スコア829
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
以下のコマンドでtarファイルと元のディレクトリの中身が比較できますが、いかがでしょうか。
cd [圧縮元ディレクトリ]
tar dfz hoge/hoge/archive.tar.gz
例)
$ls
test1 test2 test3
$tar -czvf hoge.tar.gz ./
./
./test2
./test1
./test3
$ ls
hoge.tar.gz test1 test2 test3
$ tar dfz ./hoge.tar.gz
$ ←何も変更がないのでプロンプトだけ返ります。
$ echo hoge > ./test1
$ tar dfz ./hoge.tar.gz
./test1: 最終修正時刻が異なります
./test1: サイズが異なります
$ rm -f test1
$ tar dfz ./hoge.tar.gz
tar: ./test1: 警告: stat 不能: そのようなファイルやディレクトリはありません
上記のように最終修正時刻とサイズ、ファイル有無で正常性を検査できます。
投稿2017/02/27 02:11
総合スコア33
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
作成する際に --verify オプションを付けるのではだめなんですか?
投稿2017/02/27 01:55
総合スコア13707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/27 02:42
2017/02/27 02:49
2017/02/27 03:24
2017/02/27 03:59

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。