質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

6回答

18103閲覧

tarコマンドでtar.gzファイルを作成した際のファイルの整合性確認

zeijaku.net

総合スコア161

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

1グッド

0クリップ

投稿2017/02/27 01:45

編集2017/02/27 02:12

500GByte程のファイルを定期的に下記のコマンドで作成しています

環境:RedHat6 コマンド:tar -czvf hoge.tar.gz hoge/hoge ※tar --helpでverifyが無いことを確認しておりverifyが使用できません

上記コマンドで100GByte程のtar.gzファイルが生成されますが、このtar.gzファイルが正常に生成されていることを確認するようなコマンドやオプションもしくは手法はありますでしょうか?
解凍して比較するにはあまりにも多い量なので固めたファイルが正常に行われたことを確認したいと思っています。

アドバイスいただけると助かります。

gorogoroIT👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

何を確認したいかですね。

1.tar形式として正しいか? ⇒ tar tvfで十分
2.含まれるファイルリストが正しいか? ⇒ tar tvfで十分
3.個々のファイル内容が元のものと一致するか? ⇒ 展開が必要

追記:
--verifyオプションって、書いた直後に読み直すので、ディスクファイルに使ってもほとんど意味が無いです。
テープとかフロッピーみたいなメディアに出力するときに使います。

投稿2017/02/27 02:50

編集2017/02/27 03:50
otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

アーカイブに含まれるメタデータ (ファイルのモード、名前、サイズなど) の確認については、他の方のご回答の通り、tar tvftar 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

ikedas

総合スコア4227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

あ、tar zdfがあったっけ。
単純にサイズとかタイムスタンプの比較ならつかえますよ。


tarではなく別解になってしまうのですが。
cpioコマンドで-H crcオプションつけてチェックサム付きで固めるという手もあるかと。

CPIO

たとえばこんな感じ。

$ find backup/ | cpio -v -o -H crc | gzip -9 > backup.cpio.gz

これを --only-verify-crccpio に食わせると、CRCを検証して破損してるかどうか確認できますよ。

$ gzip -cd backup.cpio.gz | cpio -v -i --only-verify-crc

ただ、crc形式にはファイルサイズの制約があったかと思うんで要注意ですが。

とりあえず参考まで。

投稿2017/02/27 03:49

編集2017/02/27 04:14
kanbeworks

総合スコア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

redlinux1015

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  1. tar -czvf hoge.tar.gz hoge/hoge が正常終了 (戻り値が0)
  2. tar -tfvz hoge.tar.gz が正常終了 (戻り値が0)

tarコマンドを検証したいのでなければ、実際の運用ではこれだけで十分な気がします。
(違ってたらすみません…)

投稿2017/02/27 10:16

take88

総合スコア1351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

作成する際に --verify オプションを付けるのではだめなんですか?

投稿2017/02/27 01:55

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zeijaku.net

2017/02/27 02:14

説明が不足しており大変申し訳ありません。 verifyオプションが無いので使用出来ない状況です。 お手間を取らせてしまい申し訳ありません。 質問にverifyの有無を追記させていただきました。
tacsheaven

2017/02/27 02:24

RedHat6 って、RHEL6(RedHat Enterprise Linux 6)ですよね? GNU tar が入っていないということはないはずですが…… $ tar --help | head -5 として、 GNU `tar` の文言があるかどうか確認してみては。
can110

2017/02/27 02:42

あるいは以下にて「verify」有無の確認でもよいかと思います。 $ tar --help | grep verify
tacsheaven

2017/02/27 02:45

あーいや、RHEL なんで、本番運用でわざと制限している(わざと GNU tar をアンインストールしているとかパスを切ってないとか)のかな、と。
kanbeworks

2017/02/27 03:24

--verify(-W)って、アーカイブ作成時にgzip圧縮オプション(z)つけるとエラーになりません?
zeijaku.net

2017/02/27 03:52

みなさん回答ありがとうございます。 tarのhelpでみたところverifyはありませんでした。 何らかの制限があるようです。
kanbeworks

2017/02/27 03:59

うちのRHEL6系サーバーみたら普通にGNU Tar入ってるんですが、標準ではなくPOSIX Tarでも入ってるんですかね。
tacsheaven

2017/02/27 04:06

サーバの担当者に尋ねてみた方がよいかもですね。意図的に GNU tar を入れてないか、パスを外した理由があるのかもしれません。(他の GNU tools だとまずいことがあって、巻き添えで GNU tar もないとか) 似たようなので find が違ってたりする環境もありますね……
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問