私は非常に限られたLinuxオンボードを備えたサンプルNASサーバー(QNAP TS-210)を持っています(Optware / IPKGを使用していくつかの改善がありましたが)。私はLinux初心者です。インターネットを検索した後、rsyncを使用してNASハードドライブと外部USBドライブ間でファイルを同期し、CRONを使用して定期的にスクリプトを実行する独自のバックアップスクリプトを作成できました。
数日前までは、すべてが大丈夫でした。バックアップスクリプトによって生成された電子メールには、IO error encountered -- skipping file deletion
バックアップしている多くのリソース(フォルダ)に関する情報が含まれ始めます。 SSHを介して同じスクリプトを実行すると、「」のcannot send file with empty name in...
後に「」が続くエラー行がたくさん表示されますrsync error: some files/attrs were not transferred (see previous errors)
。
私がバックアップしたものは100%Windowsからインポートされます(私はコンピュータをバックアップするときにNASのみを使用します)。システムは、空の名前を持つファイルの生成を許可しません。この問題は数日間のみ発生し、数週間(休日)にバックアップを変更しませんでした。したがって、これは(私のNASの)Linuxの問題であるに違いありません。
問題は、ファイルが空の名前で表示される原因は何ですか?です。どのように削除できますか(cd
rsyncレポートに記載されているフォルダに移動して操作を実行すると、ls -ls
「ファイル名が空です」などの項目は表示されません)、次のrsyncパスは終了しません。エラーが発生します。最後に、将来的にそのようなファイルを取得するのを防ぐ方法は何ですか?
答え1
私はこれがrsyncの誤りだとは思わない。関連コードがあるので、これをカーネルレベルの問題として正しく表示したと思います。rsyncのflist.c
ソース内容は次のとおりです。
1729 for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
1730 unsigned name_len;
1731 char *dname = d_name(di);
...
1746 if (dname[0] == '\0') {
1747 io_error |= IOERR_GENERAL;
1748 rprintf(FERROR_XFER,
1749 "cannot send file with empty name in %s\n",
1750 full_fname(fbuf));
実際、このコード行はrsync開発者が追加したものです。2007年8月に戻りました。特にこの状況では次のようになります。
If readdir() gives us an empty name, reject it.
つまり、readdir()
それ自体(ディレクトリ内のファイルのリストを返すカーネル関数)は、空の文字列を含む項目を返します。規定によると、このようなことは絶対に起こってはいけません。から引用公開グループ仕様:
The readdir() function shall not return directory entries containing empty names.
ls
そのディレクトリで作業を実行すると消えるので、一時的な問題のように聞こえます。 (また働いてreaddir()
消えるからです。)
したがって、あなたの質問に答えるには:
原因はファイルシステムの破損のようです。カーネルドライバエラーからハードウェアエラーまで、すべてが原因である可能性があります。同期しているディレクトリがシンボリックリンクを介してアクセスされているか、問題になる可能性があるネットワーク境界自体にまたがっていることを確認することも価値があります。
これを削除するには:一般的なファイルシステムの回復チェックリスト:fsckなど。
将来これを防ぐには:再帰リストを事前に強制するようにスクリプトに指示できるとします。しかし、すでに注意を払っているので(そして休暇から戻ってきたので)正しいことだと思います。このようなことが再び発生した場合は、見続けて箱の上にジャンプします。
これが役に立つことを願って幸運を祈ります!