centos 100% 磁碟已滿 - 如何刪除日誌檔案、歷史記錄等?

centos 100% 磁碟已滿 - 如何刪除日誌檔案、歷史記錄等?

mysqld 不會啟動,因為磁碟空間已滿:

101221 14:06:50 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
101221 14:06:50 [ERROR] Can't start server: can't create PID file: No space left on device

跑步df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              16G  3.2G   12G  23% /
/dev/sda5             4.8G  4.6G     0 100% /var
/dev/sda3             430G  855M  407G   1% /home
/dev/sda1              76M   24M   49M  33% /boot
tmpfs                 956M     0  956M   0% /dev/shm

du -sh */var

12K     account
56M     cache
24K     db
32K     empty
8.0K    games
1.5G    lib
8.0K    local
32K     lock
221M    log
16K     lost+found
0       mail
24K     named
8.0K    nis
8.0K    opt
8.0K    preserve
8.0K    racoon
292K    run
70M     spool
8.0K    tmp
76K     webmin
2.6G    www
20K     yp

/dev/sda5,有網站檔案/var/www

/var/www因為這是第一次,除了移動到其他分割區之外,我不知道要刪除哪些文件

還有一件事,刪除日誌檔案、歷史記錄等的正確方法是什麼/dev/sda5

答案1

快速而骯髒:將您的移動/var/www/home/www,然後創建一個符號連結:

rsync -a /var/www /home &&
rm -r /var/www &&
ln -s /home/www /var/www

長期來看:也許將您的/var/www/var/log目錄放入它們自己的專用分區中。您可以縮小/home並使用釋放的空間來建立​​合適的分割區。

答案2

  1. 我會mv /var/log/*gz /var/log/*.0 /home/backup/var/log
  2. yum clean packages或 apt-get clean 從 /var/cache 刪除內容
  3. 是的,將 /var/www 移到 /home
  4. 也許刪除 /var 分割區..

答案3

細分是什麼/var/lib?如果它像我的系統一樣,那麼大部分(例如 500 MB)都被/var/lib/mysql?佔用了。

其他數字看起來都很正常合理,令人感動/var/lib/mysql,也是/var/www唯一現實的長期解決方案。

為了刪除舊的日誌文件,您的日誌是否正在輪換,例如您是否有/var/log/messages/var/log/messages.1/var/log/messages.2.gz等,或者可能是/var/log/messages-20101221/var/log/messages-20101220.gz等?

消除這些的明顯方法是按年齡,例如

# find /var/log -type f -mtime +14 -print
# find /var/log -type f -mtime +14 -exec rm '{}' \;

另外,請檢查您的 logrotate 設定是否/etc/logrotate.conf符合您的要求。我想說你不應該改變它們,因為它們不是你的主要問題,但也許你只想保留一周的日誌,在這種情況下嘗試這樣的事情:

daily
rotate 7
create
compress
include /etc/logrotate.d

然後每個服務都有文件,例如 syslog、mysql、apache 等,用於為每個服務配置日誌輪換。在 Debian 和 Red Hat 系統上,應該已經為您設定好了。

如果您還沒有 logrotate,那就有點困難了。我會考慮使用 grep 或 tail 保存最近的條目,然後刪除文件並重新啟動 syslogd (例如service syslogd restartpkill -HUP syslogd.

最後,我專門針對這種情況編寫的腳本是diskuse

# test -d ~/bin || mkdir ~/bin
# svn cat http://svn.mikelward.com/svn/scripts/diskuse > ~/bin/diskuse
# chmod +x ~/bin/diskuse
# ~/bin/diskuse -A /var > ~/biggest-files-in-var.txt
# head ~/biggest-files-in-var.txt
# ~/bin/diskuse -T -A /var > ~/biggest-dirs-in-var.txt
# head ~/biggest-dirs-in-var.txt
# ~/bin/diskuse -a 1d /var > ~/biggest-files-in-var-that-changed-today.txt
# head ~/biggest-files-in-var-that-changed-today.txt

相關內容