tar:以前のエラーによる失敗ステータスで終了


78

ディレクトリ+ファイルのリストをtar圧縮する小さなスクリプトを書きました。

スクリプトの実行後に使用可能な.tar.gzファイルが作成されるという点で、スクリプトは正常に実行されているように見えます。

ただし、スクリプトが終了した後、この迷惑なメッセージが表示されます。

tar:以前のエラーによる失敗ステータスで終了

スクリプトが機能している間はエラーメッセージは表示されず、前述のように、生成されたファイルは警告/エラーなしで圧縮解除できます。バックアップの一部としてこれを使用しているため、深刻な問題を無視していないことを確認したいと思います。

このエラー/警告メッセージが生成されている理由として考えられるものは何ですか?また、安全に無視できますか?無視できない場合、エラーを診断して解決する手順は何ですか?

Ubuntu 10.0.4で実行しています

回答:


100

何らかの理由で、tarが指定されたすべてのファイルをtarに追加できない場合、そのメッセージが表示されます。最も一般的なのは、ファイルの1つに対する読み取り許可がない場合です。バックアップにこれを使用しているため、これは大きな問題になる可能性があります。-vフラグを使用している場合は、オフのままにしてください。これにより、出力が減少し、何が起こっているのかを確認できます。


8
提案のために+1(以前は「verbose」オプションを使用していました)。少なくとも1つのファイルに権限の問題があることがわかりました。少なくとも今、私はこれを解決する方法を知っています。多くの感謝
モーフィア

はい、sudoを使用して問題を修正しました
15年

-vフラグを捨てることは素晴らしいアドバイスであり、問​​題の解決に役立ちました。「冗長」はテキストの壁の背後にある失敗の原因を
曖昧

22

問題は引数です。 f引数はファイル名として次を使用するため、引数の最後でなければなりません

tar cvzf output.tgz folder

または

tar -cvzf output.tgz folder

同じで、エラーはありません。


私の問題を解決しました。私はtar -zcvfpでエラーを出そうとしていましたが、tar -zxvpfを試してみたところ、すべてうまくいきました。ありがとう。
ミアンアスバットアーマッド

6

ログファイルなど、バックアップ中に変更される可能性のあるファイルをバックアップする場合、tarオプション「--ignore-failed-read」が役立つ場合があります(Debian Linuxを使用していますが、gnu tar以外の場合はわかりません)。

標準出力とエラーは、次のような2つの異なるファイルにリダイレクトできます。

LOGDIR='/var/log/mylogdir' 
LOG=${LOGDIR}/backup.log 
ERRLOG=${LOGDIR}/backup.error.log 
DATE=$(date +%Y-%m-%d)
HOSTNAME=$(hostname)
DATA_DIRS='/etc /home /root'

tar --ignore-failed-read -f ${BACKUP_DIR}/${HOSTNAME}-${DATE}.tgz -cvz ${DATA_DIRS} > $LOG 2> $ERRLOG

私はこれが一般に安全であると思いますが、tarが止まらないので注意してください...


5

私は同じ問題を抱えていましたが、上記の答えはどれもうまくいきませんでした。ただし、次のコマンドを実行すると動作することがわかりました。

tar -cpzf /backups/fullbackup.tar.gz --exclude=backups --exclude=proc --exclude=tmp --exclude=mnt --exclude=sys --exclude=dev --exclude=run /

参照されていたエラーはtar: Exiting with failure status due to previous errors、-vオプションをオフにすることで識別できます。審査の際に、エラーがようなディレクトリから来た/run/sys

これらのディレクトリを除外することで、問題なく機能します。これが同様の問題のある人を助けることを願っています。


3

同じ問題がありました。コマンドからダッシュ( "-")を削除するだけでした。

として入力する代わりに

tar -cvfz output.tar.gz folder /

として入力してみてください

tar cvfz output.tar.gz folder /

私の場合、なぜダッシュが問題を引き起こしていたのかはわかりませんが、少なくともうまくいきました。


6
おそらくGNU tarでこれをテストしたでしょう。あなたの混乱は、ダッシュのない「古いスタイル」のtarオプションとダッシュのある「標準unix」オプションの2つの異なるスタイルのオプションを受け入れるという事実から生じています。ダッシュ付きのオプションは、オプションの後にオプションの引数が必要です。したがって、この場合のの引数はある-fべきでoutput.tar.gzありz、その間にあってはなりません。オプションの順序を変更しなければ、次のようになりますtar -cvf output.tar.gz -z folder/。古いスタイルでは、すべてのオプションが1か所にあり、その後にすべての引数が必要です。
パブーク


@paboukそのコメントは、それだけで答えに値するように思えました。この質問の答えとして、そのコメントの内容を追加して、クレジットが支払われるべき場所にクレジットが入るようにしてください。
cwallenpoole

私も問題がありましたが、名前は-vのファイルだったので、tarにはどのファイルをバックアップできるかに関していくつかのバグがあります...これは問題ではないはずです。rmとmvが動作しないため、私の回避策は、ファイルマネージャーを使用することでした。そのため、明らかにmvとrmもバグがあります。mv '-v' vおよびrm '-v'を試しましたが、エラーメッセージが表示されました。tarは、tarファイルを統計できないと述べました。-cfjvを使用していた
ジムマイケルズ

1

あなたは以前の答えを誤解しています。問題はでなく、が引数リストの-どこにあるかfです。

tar cvfz target.tgz <files>

「z」という名前のアーカイブを作成しようとしますf。これはのテキストです。このエラーメッセージは、tarが「target.gz」を見つけてアーカイブ「z」に追加できないためです。

tar cvzf target.tgz <files>

target.tgzを正しく作成し、ファイルを追加します。これは、target.tgzがf引数の後の最初のテキストだからです。


これはコメントとして「混乱した」返信に追加する必要があります。残念ながら、あなたは50ポイントの評判を得た後にのみそのようなコメントを追加することを許可されます。主題へ:あなたはそれをテストしましたか?私はGNU tar 1.26でそれをテストしました、そして、ダッシュのあるものとないものは、ジャックの返事で説明されているように本当に異なります。返信に書かれているとおりに動作します。
パブーク

0

通常、そのメッセージは無視できます。tarの作成中に基礎となるディレクトリツリーに変更(ファイルの削除/作成/変更など)がある場合、そのメッセージがスローされます。また、デバイスノードやfifoなどの特別なファイルがある場合、その警告が発生します。

犯人ファイルが表示されないことを確認しますか?で試すtar cvfz yourtarball.tgz /your/path


0

受け取ったファイルを解凍するのと同様の問題がありました。ルートが所有するアーカイブにファイルを書き込む権限がなかったことがわかりました。sudoを使用して修正しました。


0

初心者向けにこのエラーが発生する理由の1つは、
ファイルが存在するディレクトリで操作を実行するのを忘れます
その場所に移動して、コマンドを実行します 
私のファイルはデスクトップにあるので 
〜/ Desktop#tar-cf done.tar abc xyz
xyzとabcはファイルであり、それらのファイルをdone.tarに保存しています。
他の場所でコマンドを実行すると、上記のエラーが発生します 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.