ラズパイのような少メモリ環境で安全にrsyncを実行する方法

組み込みLinuxのような少メモリの環境では気をつけないと rsync が原因でシステムがクラッシュする場合があります.

クラッシュする理由はメモリ不足

rsync はファイルを転送する前に先ずファイルのリストを作ります.リストはメモリ上に一時保存されます.そのサイズは,ディレクトリやファイルが大量にあると,当然増加します.またリストを作る処理は再帰処理になっていて,これがまたメモリを消費します.

通常のPCやLinuxサーバーならメモリやswap領域が潤沢にあるので滅多に問題になりません.しかし組み込みLinuxだとメモリ容量が8MBとか128MBしかない,ということが有ります.ラズパイぐらいの環境だと1GBぐらいのメモリが使えますが,Webカメラなどの実メモリを沢山つかうデバイスを使っていたり,on-memoryのデータベースなどを動かしているとメモリが枯渇する場合があります.問題はメモリが枯渇するとシステムはクラッシュする点です.

なんかよく分からないけど時々 Linuxマシンが固まる.再起動すると直る.原因はcronで仕込んでいたファイルバックアップのrsyncプロセスだった,ということが少メモリ環境では起こりえます.めったに遭遇できない現象ですが,そういう事例もあるということは知っておいて損はありません.

rsync のメモリ使用量を減す方法

普段使っている rsync コマンドに "--no-inc-recursive" をつけるだけです.

$ rsync --no-inc-recursive  -av コピー元 コピー先

これで劇的にメモリ使用量が減ります.デメリットは処理速度が少し落ちる点です.