Raz*_*que 18 linux debian log-files disk-space-utilization
在我们的生产服务器上,根挂载点有一个小驱动器/,
/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
Run Code Online (Sandbox Code Playgroud)
但我知道有些服务使用文件描述符,所以他们会继续使用/var/log或 inodes。
kub*_*zyk 27
适当的设计
我假设您无法简单地扩展有问题的文件系统(使用lvextend && ext2online),因为您没有使用 LVM 或使用错误的文件系统类型。
你的方法
如果您使用 SIGHUP (kill -1 pid) 向守护进程发送信号,那么您提出的建议可能会奏效。显然,您稍后需要在“mount -o bind / /somewhere”上执行并清理挂载的 /var/log 下剩余的内容。但它对我来说有一种难闻的气味,尤其是对生产而言。
避免停机,获得干净的结果(但操作起来很复杂)
忘记“挂载 -o 绑定”的想法,创建一个新的 LV/分区,但不要挂载它。
lsof | grep /var/log # lists open files in /var/log
Run Code Online (Sandbox Code Playgroud)
对于每个有任何打开文件的守护进程(我希望至少有 syslog、inetd、sshd):
kill -1 或 /etc/init.d/script reload)lsof | grep /var/log 该守护进程已关闭其文件挂载在 /var/log 上。恢复旧配置,再次 SIGHUP/重新加载守护进程。
简单的方法(停机时间)
创建一个新的 LV/分区并将其正确挂载到 /var 或 /var/log。简单的方法是将服务器关闭到维护模式(单用户模式),并使用实际的控制台(而不是 ssh)进行操作。
hwj*_*wjp 10
其他人的答案都非常好且正确,您绝对应该先阅读它们。
我只是想我会分享这个,因为它可以轻松复制和粘贴,如果你的案例像我的一样非常简单:
停止系统日志并复制当前日志:
service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog
Run Code Online (Sandbox Code Playgroud)
然后,将您的新位置挂载到/var/log. 说这是一个名为的新设备/dev/sdb
mount /dev/sdb /var/log
Run Code Online (Sandbox Code Playgroud)
现在您可以复制文件并重新启动系统日志:
cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start
Run Code Online (Sandbox Code Playgroud)
假设这一切发生在您机器生命周期的早期,rsyslog很可能是唯一运行的守护进程。天啊!
PS - 你可能也想把它添加到你的fstab。这是这样做的一种方法,再次假设一个非常简单的安装:
cat /etc/mtab |grep /var/log >>/etc/fstab
Run Code Online (Sandbox Code Playgroud)
(参见https://serverfault.com/a/267610/80606关于将 mtab 转换为 fstab)
| 归档时间: |
|
| 查看次数: |
60015 次 |
| 最近记录: |