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希望どおりになっているかどうかを確認してください。主な問題ではないので、変更しない方が良いと思いますが、1 週間分のログだけを保存したい場合は、次のようにしてください。

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

次に、syslog、mysql、apache などの各サービスごとに、それぞれのログローテーションを構成するファイルがあります。Debian および Red Hat システムでは、すでに設定されているはずです。

logrotate をまだインストールしていない場合は、少し難しくなります。grep または tail を使用して最近のエントリを保存し、ファイルを削除して syslogd を再起動することを検討してください (例:service syslogd restartまたはpkill -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

関連情報