tar が "/rw/internal_apps/rainbow/filebrowser-xxx/proc/29826/exe で失敗します。

tar が "/rw/internal_apps/rainbow/filebrowser-xxx/proc/29826/exe で失敗します。

tar組み込みバージョンのLinuxを実行しているデバイスのシステムディレクトリにアクセスしようとしましたが、失敗します。これはstderrの最後の行です。

tar: /rw/internal_apps/rainbow/filebrowser-45905a3/proc/29826/task/29826/exe: cannot read link: No such file or directory
tar: /rw/internal_apps/rainbow/filebrowser-45905a3/proc/29826/exe: cannot read link: No such file or directory
tar: /rw/internal_apps/rainbow/filebrowser-45905a3/proc/32037/task/32037/exe: cannot read link: No such file or directory
tar: /rw/internal_apps/rainbow/filebrowser-45905a3/proc/32037/exe: cannot read link: No such file or directory
tar: /rw/0/var/run/samba/nmbd/unexpected: socket ignored
tar: /rw/0/var/run/samba/unexpected: socket ignored
tar: /rw/0/var/run/ntpd.sock: socket ignored
tar: /rw/0/var/run/dbus/system_bus_socket: socket ignored
tar: error exit delayed from previous errors

同じエラーがたくさんあるようです。それでは、tar最初のエラーを削除または無視するのはどうでしょうか?tar特定のタイプのいくつかのエラーは許可されていますが、エラーの数が特定のしきい値を超えると、あきらめるように感じますか?

何千ものファイルを手動で除外しないソリューションを好む。

Busyboxのtarを使用してください。

アップデート:私が実行したコマンドsudo tar -czf /tmp/1.tar / --exclude=tmp --exclude=shares --exclude=media --exclude sys --exclude kcore

答え1

少なくともこの--exclude=proc除外リストに追加する必要があります。

これ/procファイルシステムは、ディレクトリが作成され、ファイルが読み込まれると動的に生成される複合システムなので、「保存」する必要はありません。

具体的には、/proc/<pid>/exeプロセスが継続して<pid>実行されている間にのみ存在し、tarが実際にアーカイブを決定して実際にアーカイブを実行している間にプロセスが終了する可能性があります。また/proc、(たとえば)下のほとんどの「一般」ファイルは/proc/cmdlineサイズがゼロであるとマークされており、直接読み取ると内容があるにもかかわらず空のファイルとして保存されます。

tarが最初のものを捨てたり無視しないのはなぜですか?

次のように、最初のエラーの後に簡単に減らすことができます。

set -o pipefail  # optional, use it if you want to check the exit status
tar -cf ... 2>&1 | sed 5q

tarは特定の種類のエラーを許可しますが、エラーの数が特定のしきい値を超えると放棄します。

tarそのようなことはありません。少なくともGNUやbusybox tar(使用中)ではありません。

tar: /rw/0/var/run/ntpd.sock: socket ignored

これは警告にすぎず、終了ステータスには影響しません。しかし、/var/run通常これはtmpfs(完全にメモリ常駐ファイルシステム)なので/dev

答え2

ログを分析できます。おそらく "sbinm"メッセージには異なるラベルがあります。 (「sbinm」で検索しましたが、車の羨望についての言及だけが見つかりました。)

重要ではないと思われるメッセージを削除してください。 tarを使用してstderrをファイルにリダイレクトし、2> tar.errorsawkを介して実行します。

awkLog='
$(NF) ~ /socket ignored/ { next; }
$(NF-1) ~ /cannot read link/ { next; }
{ ++Bad [$(NF)]; }
END { for (k in Bad) printf ("%8d %s\n", Bad[k], k); }
'
awk '-F:' "${awkLog}" tar.errors

これにより、すべてのエラーの数が印刷されます(特に無視されたエラーは除く)。

各タイプの例を追跡して調査し、無視リストに追加するか、根本的な問題を解決するのか、アーカイブから除外するか(user414777の説明を参照)、または他のアクションを決定します。これには少し調査が必要な場合がありますが、必要に応じて追加の質問を投稿できます。

たとえば、あなたの質問の2つのエラータイプはすべて一時ファイル、つまりSambaのソケットと現在実行されている特定のプロセスに関する詳細情報へのリンク(実際には一部のブラウザでどこかにキャッシュされているように見える)が原因で発生しますします。 Tarはこれらの項目を除外することは絶対に正しいです。約2分間は役に立たず、移動したシステムに復元すると問題が発生する可能性があります。

もう一つの一般的な問題は、ファイルが絶えず変更されることです。 Tarはライブスナップショットではありません。アーカイブするファイルのリストを作成して処理します。その結果、サイズが変更または削除されたファイルはエラーになり、最近追加されたファイルはありません。

関連情報