在我们的生产服务器上,根挂载点有一个小驱动器/
,
/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/分区,但不要挂载它。
对于每个有任何打开文件的守护进程(我希望至少 syslog、inetd、sshd):
kill -1
或/etc/init.d/script reload
)lsof | grep /var/log
该守护进程已关闭其文件挂载在 /var/log 上。恢复旧配置,再次 SIGHUP/重新加载守护进程。
简单的方法(停机时间)
创建一个新的 LV/分区并将其正确安装在 /var 或 /var/log 上。简单的方法是将服务器关闭到维护模式(单用户模式),并使用实际的控制台(不是 ssh)进行操作。
其他人的答案都非常出色且正确,您绝对应该先阅读它们。
我只是想我会分享这个,因为它可以轻松复制和粘贴,如果你的情况像我一样非常简单:
停止系统日志并复制当前日志:
然后,将您的新位置安装在
/var/log
. 假设这是一个新设备,名为/dev/sdb
现在您可以将文件复制回来并重新启动系统日志:
假设这一切都发生在机器生命周期的早期,
rsyslog
很可能是唯一运行的守护进程。YMMV!PS - 你可能也想把它添加到你
fstab
的。这是这样做的一种方法,再次假设一个非常简单的安装:(参见https://serverfault.com/a/267610/80606关于将 mtab 转换为 fstab)
您可以做的另一件事是:
/var/log
/var/log
(lsof
按照 kubanskamac 的建议使用)/var/log
到具有足够可用空间的另一个分区(按照您的示例,这将是/home/log
)ln -s /home/log /var/log
)的符号链接请注意,这远非我认为的良好做法。这只是一种解决方法,因此您不必关闭服务器。正确的解决方案是创建一个具有足够空间的新分区
/var
或/var/log
分区(或扩展当前分区),要将日志目录移动到其他位置:
基于@hwjp 的另一种解决方案,如果您不能使用另一个驱动器卷来移动它们,您可以在另一个有更多可用空间的卷中创建一个虚拟驱动器卷(这是我的情况):
创建虚拟卷:
一)做:
sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200
B) do :
sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.img
使用 mkfs 实用程序格式化 VHD-log 映像文件中的 EXT4 文件系统类型。C) do :
sudo mkdir /thevolumeofyourchoice/vlog
将 VHD-log 挂载到一个目录(挂载点)D)做:
sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog
D1) 要在系统启动时将 VHD-log 挂载到最终目录,请在 /etc/fstab 文件中添加此条目。
移动旧日志文件:
E)做:
service rsyslog stop
lsof | grep /var/log
在 /var/log 中列出打开的文件并关闭所需的守护进程(在我的例子中是 apach2,freshclam)cp -rp /var/log/* /thevolumeofyourchoice/vlog
(cp -p 与 --preserve=mode,ownership,timestamps 相同)F)做:
sudo umount /thevolumeofyourchoice/vlog
sudo mv /var/log /var/log-old
sudo mkdir /var/log
sudo chgrp syslog /var/log
sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /var/log
G)做:
service rsyslog start
并重新启动您停止的其他服务最后仔细检查:
您可以执行 -
lsof | grep /var/log
列出 /var/log 中的打开文件并验证它们指向 /var/log 而不是 /var/log-old你可以 mv,备份或删除 /var/log-old 一切都可以。
我只想: