web-dev-qa-db-ja.com

centos 100%disk full-ログファイル、履歴などを削除する方法

ディスク容量がいっぱいのため、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を他のパーティションに移動する以外にどのファイルを削除するかわかりません

そしてもう1つ、/dev/sda5のログファイルや履歴などを削除する正しい方法は何ですか?

8
kopeklan
  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パーティションを削除してください。
2
Erik Johansson

すばやく汚い:/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
Steven Monday

/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 '{}' \;

また、/etc/logrotate.confのlogrotate設定が適切であることを確認してください。それらはあなたの主な問題ではないので、それらを変更すべきではないと思いますが、おそらく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
1
Mikel