如何移动/ var / log目录


15

在生产服务器上,用于根安装点的驱动器很小//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。


在AskUbuntu上有一个关于相同问题的详细答案,网址为askubuntu.com/a/346579/422224
Eborbob

这不是答案,而是建议。如果可能,用于记录具有实时压缩的文件系统,例如btrfs。挂载此分区时,请使用挂载选项“ compress = lzo”或“ compress = zlib”。lzo提供更好的性能,zlib提供更好的压缩。
Massimo

Answers:


25

适当的设计

我假设您不能简单地扩展有关的文件系统(使用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

对于具有任何打开文件的每个守护程序(我希望至少syslog,inetd,sshd):

  • 重新配置守护进程no以登录到/ var / log
  • 刷新守护程序(kill -1/etc/init.d/script reload
  • 确认lsof | grep /var/log 守护程序已关闭其文件

挂载在/ var / log上。恢复旧的配置,再次SIGHUP / reload守护程序。

简单方法(停机)

创建一个新的LV /分区,然后将其正确地安装在/ var或/ var / log上。简单的方法是将服务器降为维护模式(单用户模式),并使用实际的控制台(而非ssh)进行操作。


8

其他人的答案都是非常正确的,因此您绝对应该首先阅读它们。

我只是想分享一下,因为如果您的情况像我的一样简单,那么它可以轻松地进行复制和粘贴:

停止系统日志并复制当前注销:

service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog

然后,将您的新位置挂载到/var/log。说这是一个名为/dev/sdb

mount /dev/sdb /var/log

现在您可以复制文件并重新启动系统日志:

cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start

假设这一切都发生在计算机生命周期的早期,rsyslog很可能是唯一运行的守护程序。YMMV!

PS-您可能也希望将其添加到您的产品fstab中。这是一种实现方式,再次假设安装非常简单:

cat /etc/mtab |grep /var/log >>/etc/fstab

(cf /server//a/267610/80606关于将mtab链接到fstab)


5
不错的解决方案。我要更改的一件事是用替换您的文件cp -rsudo tar cpfsudo tar xpf保留文件的所有权和权限,以免由于root以外的用户创建日志。
布伦达·贝尔

2

您可以做的另一件事是:

  • 停止打开了文件的进程 /var/log
  • 确认没有任何打开文件的进程/var/loglsof按照kubanskamac的建议使用)
  • 将您的磁盘移动/var/log到具有足够可用空间的另一个分区(按照您的示例,将是/home/log
  • 创建从/ var / log到/ home / log(ln -s /home/log /var/log)的符号链接
  • 重新启动您在第一步中停止的过程

请注意,这与我认为的良好做法相去甚远。这只是一种解决方法,因此您不必关闭服务器。正确的解决方案是创建一个具有足够空间的新分区/var/var/log分区(或扩展当前分区),


如果运行logrotate,执行链接提示会不会有任何效果?我不知道如果文件尚未链接,它是否会覆盖或破坏文件的位置……这可能意味着以后的维护工作更加麻烦。
巴特·

是的,最终似乎在服务器运行时执行此操作并不是很好。然后,我将看不到哪个进程仍在使用旧的/ var / log /。此外,我认为某些应用程序无法轻松处理符号链接,因此最终可能会破坏日志。也许我应该安排维护模式。实际上,当剩余空间不足时,我正在手动删除文件。mriedman:我将检查是否可以调整该分区的大小
Razique

0

基于@hwjp的另一种解决方案,如果您不能使用另一个驱动器卷来移动它们,则可以将虚拟驱动器卷创建到另一个具有更多可用空间的卷中(我就是这种情况):

创建虚拟卷:

A)做: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero:输入文件以提供用于初始化数据存储的字符流
  • of = VHD.img:要在/ thevolumeofyourchoice上创建为存储卷的图像文件
  • bs = 1M:一次最多读写1M
  • count = 1200:仅复制1200M(1GB)输入块

B)做:sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.img使用mkfs实用程序在VHD日志映像文件中格式化EXT4文件系统类型。

C)做:将sudo mkdir /thevolumeofyourchoice/vlogVHD-log挂载到目录(挂载点)

D)做: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1)要将VHD-log在系统启动时挂载到最终目录,请将此条目添加到/ etc / fstab文件中。

/thevolumeofyourchoice/VHD-log.img  /var/log/  ext4    defaults        0  0

移动旧的日志文件:

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

一切正常之后,您可以制作,备份或删除/ var / log-old。


-1

我只是:

apt install lsyncd
mv /var/log /varlog.root
mkdir /var/log /home/log
mount --bind /home/log /var/log

# set up lsyncd appropriately to sync real-time between /varlog.root & /var/log
service lsyncd start
sleep 3m

service rsyslog restart
# Proceed with all the other daemons
# to switch them over to the new /var/log and release /varlog.root
sleep 3m

# Then do this a few times until no processes use the old dir
lsof +D /varlog.root && rm -rf /varlog.root

保持原样/var/log安装/home/log好吗?我想这整个问题都不适合经验丰富的管理员。
kubanczyk

你什么意思?/ home / log是通过/ var / log挂载的,而不是相反的方式。是的,将其保持原样不是问题,只需确保它在每次引导时自动且足够早地恢复,以使所有进程都不要尝试在空的/ var / log挂载点中创建一些新日志。
亚历山大·谢布利金

很多时候,安全要求在实际的单独安装点上需要/ var / log和/ var / log / audit。否则,请保留它们,只需设置适当的日志轮换以避免不必要的磁盘使用。
布拉德,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.