ディスク容量がいっぱいのため、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
- 私は...するだろう
mv /var/log/*gz /var/log/*.0 /home/backup/var/log
yum clean packages
またはapt-get cleanで/var/cacheからデータを削除します- はい、/var/wwwを/homeなどに移動します
- おそらく /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