Linux
如何移動 /var/log 目錄
在我們的生產伺服器上,根掛載點有一個小驅動器
/
,/var/log
佔用了太多空間,我必須手動刪除一些文件。我怎麼能/var/log/
說/home/log
沒有重新啟動?這是我的想法:
$ mkdir /home/log $ rsync -a /var/log /home/log $ mount --bind /home/log /var/log $ /etc/init.d/rsyslof restart
但我知道有些服務使用文件描述符,所以他們會繼續使用
/var/log
或inode。
適當的設計
我假設您無法簡單地擴展有問題的文件系統(使用
lvextend && ext2online
),因為您沒有使用 LVM 或使用錯誤的文件系統類型。你的方法
如果您使用 SIGHUP (kill -1 pid) 向守護程序發出信號,您提出的建議*可能會起作用。*顯然,您稍後需要“mount -o bind / /somewhere”並清理已安裝在 /var/log 下的內容。但它對我來說有一種難聞的氣味,尤其是對生產而言。
避免停機,獲得乾淨的結果(但做起來很複雜)
忘記“mount -o bind”的想法,創建一個新的 LV/分區,但不要掛載它。
lsof | grep /var/log # lists open files in /var/log
對於每個有任何打開文件的守護程序(我希望至少 syslog、inetd、sshd):
- 重新配置守護程序 no 以記錄到 /var/log
- 刷新守護程序(
kill -1
或/etc/init.d/script reload
)- 確認
lsof | grep /var/log
該守護程序已關閉其文件掛載在 /var/log 上。恢復舊配置,再次 SIGHUP/重新載入守護程序。
簡單的方法(停機時間)
創建一個新的 LV/分區並將其正確安裝在 /var 或 /var/log 上。簡單的方法是將伺服器關閉到維護模式(單使用者模式),並使用實際的控制台(不是 ssh)進行操作。