AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 55984
Accepted
Razique
Razique
Asked: 2009-08-20 00:44:14 +0800 CST2009-08-20 00:44:14 +0800 CST 2009-08-20 00:44:14 +0800 CST

如何移动 /var/log 目录

  • 772

在我们的生产服务器上,根挂载点有一个小驱动器/, /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。

linux debian disk-space-utilization log-files
  • 6 6 个回答
  • 66010 Views

6 个回答

  • Voted
  1. Best Answer
    kubanczyk
    2009-08-20T01:26:12+08:002009-08-20T01:26:12+08:00

    适当的设计

    我假设您无法简单地扩展有问题的文件系统(使用lvextend && ext2online),因为您没有使用 LVM 或使用错误的文件系统类型。

    你的方法

    如果您使用 SIGHUP (kill -1 pid) 向守护程序发出信号,您提出的建议可能会起作用。显然,您稍后需要“mount -o bind / /somewhere”并清理已安装在 /var/log 下的内容。但它对我来说有一种难闻的气味,尤其是对生产而言。

    避免停机,获得干净的结果(但做起来很复杂)

    忘记“mount -o bind”的想法,创建一个新的 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/重新加载守护进程。

    简单的方法(停机时间)

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

    • 27
  2. hwjp
    2012-06-08T10:18:51+08:002012-06-08T10:18:51+08:00

    其他人的答案都非常出色且正确,您绝对应该先阅读它们。

    我只是想我会分享这个,因为它可以轻松复制和粘贴,如果你的情况像我一样非常简单:

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

    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
    

    (参见https://serverfault.com/a/267610/80606关于将 mtab 转换为 fstab)

    • 10
  3. mfriedman
    2009-08-20T02:41:45+08:002009-08-20T02:41:45+08:00

    您可以做的另一件事是:

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

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

    • 2
  4. Gayan Weerakutti
    2020-11-04T06:13:10+08:002020-11-04T06:13:10+08:00

    要将日志目录移动到其他位置:

    sudo service rsyslog stop
    cd /var
    sudo mv log /path/to/new/location/
    sudo ln -s /path/to/new/location/log
    sudo service rsyslog start
    
    • 1
  5. Mike Castro Demaria
    2020-01-12T02:07:07+08:002020-01-12T02:07:07+08:00

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

    创建虚拟卷:

    一)做: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) 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 文件中添加此条目。

    /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

    你可以 mv,备份或删除 /var/log-old 一切都可以。

    • 0
  6. Alexander Shcheblikin
    2018-05-15T09:28:26+08:002018-05-15T09:28:26+08:00

    我只想:

    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
    
    • -1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve