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 / 问题 / 1098172
Accepted
vpseg
vpseg
Asked: 2022-04-09 09:04:38 +0800 CST2022-04-09 09:04:38 +0800 CST 2022-04-09 09:04:38 +0800 CST

备份 ISC DHCPd 租用文件的正确方法是什么?

  • 772

根据this answer,DHCPd租约文件每小时清除一次。目标是连续备份租约文件,因此永远不会丢失租约。这很困难,因为不清楚小时计时器是基于系统时间(例如,文件在凌晨 1 点、凌晨 2 点、凌晨 3 点等重写)还是处理时间(service_start + 1h、service_start + 2h 等)。假设租约文件在凌晨 3 点清空,租约在 2:58:55 授予;备份租约文件的服务需要在清理文件之前快速运行。

DHCPd 进程将自己的文件备份到/var/lib/dhcpd/dhcpd.leases~. 最好的选择似乎是制作一个脚本,每小时将此文件备份到另一个位置。但是,如果重新启动 DHCPd 进程并且计时器相对于该进程,则备份任务上的小时标记可能会对齐,这可能会导致一个进程读取而另一个进程写入,这可能会破坏文件(取决于它是如何完成的)。因此,备份任务需要了解 DHCPd 何时启动。这变得越来越复杂。

备份 DHCPd 租约文件的“正确”方法是什么,因此不会丢失任何租约?

backup redhat isc-dhcp
  • 1 1 个回答
  • 59 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2022-04-09T10:20:28+08:002022-04-09T10:20:28+08:00

    从DHCP 来源:

          if (snprintf (backfname, sizeof backfname, "%s~", path_dhcpd_db)            >= sizeof backfname)
    
    [...]
    
          if (unlink (backfname) < 0 && errno != ENOENT) { 
    
    [...]
    
          if (link(path_dhcpd_db, backfname) < 0) { 
    

    先前的备份文件被删除,然后当前的租约文件被硬链接为带有尾随~.

    在 Linux 上,使用inotify(7)事件工具,硬链接被视为创建事件。

    我建议在发生此类事件时使用inotifywait(从包中)发出信号。inotify-tools人们应该期望它的幻影/var/lib/dhcpd/dhcpd.leases~直接准备好备份(它是原始的硬链接)。由于文件每次都是不同的文件(不同的inode),因此应该监视目录以进行正确检测,例如该--include选项可用于简化shell处理(不处理,即使读取的行被丢弃在虚拟变量):

    inotifywait -m -e create --include dhcpd.leases~ /var/lib/dhcpd | while read dummy; do
        do_backup /var/lib/dhcpd/dhcpd.leases~
    done
    

    如果命令不是最新的,--include在这种情况下它可能无法理解,测试必须在事件循环中完成:

    inotifywait -m -e create /var/lib/dhcpd | while read -r dir event filename; do
        if [ "$filename" = dhcpd.leases~ ]; then
            do_backup /var/lib/dhcpd/dhcpd.leases~
        fi
    done
    

    或者,该incron软件包(至少在 CentOS 8 Stream 上可用)可以与类似于以下内容的条目一起使用:

    /var/lib/dhcpd IN_CREATE,recursive=false if_correct_file_do_backup $#
    

    例如,if_correct_file_do_backup作为一个 shell 检查这是预期的文件名:

    #!/bin/sh
    
    if [ "$1" = dhcpd.leases~ ]; then
        do_backup /var/lib/dhcpd/dhcpd.leases~
    fi
    
    • 1

相关问题

  • 总大小(磁盘)与总大小(媒体)

  • 社区对备份解决方案的意见

  • 无法读取不同 LTO-3 驱动器上的 LTO-3 磁带

  • 使用 TSM 备份时跳过硬链接

  • 使用 rsync 维护名称更改的目录的副本

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +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