Linux

如何移動 /var/log 目錄

  • November 3, 2020

在我們的生產伺服器上,根掛載點有一個小驅動器//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)進行操作。

引用自:https://serverfault.com/questions/55984