1、rsync同步海量文件時/var分區滿問題
最近老是碰到/var分區滿的問題, 一直都找不到是哪個文件把分區漲爆了.
用下面的命令看/var目錄的大小, 只有81M.
#du -sh /var
81M /var
81M /var
但是用df命令看分區情況, 發現/var卻是滿滿的..
#df -h
/dev/sdc6 2.0G 2.0G 0 100% /var
/dev/sdc6 2.0G 2.0G 0 100% /var
機器在同步一些圖片, 我粗略估算一下大概有1,2千萬張圖片. 開始同步的時候很正常, 當rsync運行幾個小時之後, /var開始漸漸地變大, 然後爆滿. 這個時候rsync進程使用內存也就2MB, 我猜想由於文件太多, rsync在對比server和client端的文件list的時候使用/var分區的磁盤做爲臨時的stack, 把/var分區佔滿了..
#killall rsync
#df -h
/dev/sdc6 2.0G 109M 1.8G 6% /var
#df -h
/dev/sdc6 2.0G 109M 1.8G 6% /var
kill了rsync進程, 磁盤空間又釋放了... 無奈...
總結:
rsync在對比server和client端的文件list的時候使用了臨時文件,但是我們又看不到臨時文件在哪裏, 困惑了吧.
在linux中, 先創建一個臨時文件, 然後進程打開文件, 再調用unlink刪除文件, 但是文件這個時候還是打開的, 操作系統不會將它真正的刪除, 當進程不停地寫的時候, 分區就會慢慢地漲滿, 當進程退出的時候, 操作系統檢測到文件已經沒有被使用了, 纔會被刪除.
你也不必將var鏈接到大分區, 同步海量文件的時候, 你可以按目錄將你的任務切換成若干小任務就可以了.