2

Windowsでcygwinを介して2台のマシン間のrsyncファイル転送を保護しようとしています。

rsync が作成するすべてのログ ファイルの場所はどこですか? 私は現在使用しています

rsync -e ssh -avzP --delete "/cygdrive/C/secure/data/" "/cygdrive/D/data" --log-file=/cygdrive/C/secure/log/c.log

rsyncが開始すると、「ファイルリストの構築」と表示されますが、これはメモリ内で行われますか、それとも一時ファイルをどこかに書き込んでいますか?

4

1 に答える 1

0

「ファイルリストの構築...」がメモリ内で発生するのか、それともどこかに保存されるのかを尋ねました。rsync のソース、つまり を見てみましょうflist.c

2089         rprintf(FLOG, "building file list\n");
2090         if (show_filelist_p())
2091                 start_filelist_progress("building file list");
2092         else if (inc_recurse && INFO_GTE(FLIST, 1) && !am_server)
2093                 rprintf(FCLIENT, "sending incremental file list\n");
2094 
2095         start_write = stats.total_written;
2096         gettimeofday(&start_tv, NULL);
2097 
2098         if (relative_paths && protocol_version >= 30)
2099                 implied_dirs = 1; /* We send flagged implied dirs */
2100 
2101 #ifdef SUPPORT_HARD_LINKS
2102         if (preserve_hard_links && protocol_version >= 30 && !cur_flist)
2103                 init_hard_links();
2104 #endif
2105 
2106         flist = cur_flist = flist_new(0, "send_file_list");
2107         if (inc_recurse) {
2108                 dir_flist = flist_new(FLIST_TEMP, "send_file_list");
2109                 flags |= FLAG_DIVERT_DIRS;
2110         } else
2111                 dir_flist = cur_flist;

flist_new何もせずに、新しいファイル リスト プールを割り当てるだけです。文字列パラメーターは、メモリ不足エラーについて通知するためにあります。

次に、ファイル リストを送信するための行が数百行あります。rprintfエラーメッセージの可能性を除いて、呼び出しは一切ありません。そのループで最も興味深い関数呼び出しは への呼び出しsend_file_nameですが、これらも呼び出しrprintfません。

そうです、それはファイルをメモリに構築し、自分でソースにパッチを適用しないとログに記録できません。さらに、rsync のすべてがログ ファイルに記録されるわけではなく、一部のメッセージは画面に直接出力されます。実際、進行状況の設定によっては、単純なシェル リダイレクトを使用した方がよい場合もあります。(またはtee、出力をファイルと標準出力に同時に出力するために使用します。)

于 2015-05-21T10:18:38.610 に答える