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.errors
awkを介して実行します。
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はライブスナップショットではありません。アーカイブするファイルのリストを作成して処理します。その結果、サイズが変更または削除されたファイルはエラーになり、最近追加されたファイルはありません。