首页主机资讯Debian inotify更新后如何迁移数据

Debian inotify更新后如何迁移数据

时间2025-11-25 20:56:04发布访客分类主机资讯浏览553
导读:Debian inotify更新后的数据迁移方案 一、迁移总览与准备 明确迁移路径:源目录(如:/data)→ 目标目录(如:/data_new),或本地 → 远程(如:user@host:/data)。 安装工具:确保系统具备rsync...

Debian inotify更新后的数据迁移方案

一、迁移总览与准备

  • 明确迁移路径:源目录(如:/data)→ 目标目录(如:/data_new),或本地 → 远程(如:user@host:/data)。
  • 安装工具:确保系统具备rsyncinotify-tools,用于基线全量迁移与变更追平。
    • Debian/Ubuntu:sudo apt-get install -y rsync inotify-tools
  • 备份与校验:先对关键数据做全量备份,迁移后通过校验和或抽样比对确认一致性。
  • 权限与所有权:迁移后保持UID/GID权限位一致,避免应用异常。
  • 变更窗口:尽量在低峰期执行,减少对线上影响。

二、基线全量迁移

  • 本地迁移(一次性全量,随后用 inotify 追平增量):
    • rsync -aAX --info=progress2 --delete /data/ /data_new/
    • 说明:-aAX 保留权限/属主/扩展属性;–delete 保持两端一致;末尾斜杠确保按目录内容同步。
  • 远程迁移(一次性全量):
    • rsync -avzP --delete /data/ user@host:/data/
  • 校验建议:
    • 生成校验清单对比:
      • find /data -type f -exec sha256sum { } ; | sort > /tmp/src.sha256
      • find /data_new -type f -exec sha256sum { } ; | sort > /tmp/dst.sha256
      • diff -u /tmp/src.sha256 /tmp/dst.sha256
    • 或抽样比对关键文件/子目录。

三、用 inotify 追平增量

  • 事件选择建议:优先监听能代表“写入完成”的事件,如close_write,并补充create、delete、move,以降低重复触发与漏同步风险。
  • 本地追平脚本(systemd 友好):
    • 保存为:/usr/local/bin/inotify-sync.sh
    • 内容:
      • #!/usr/bin/env bash
        set -Eeuo pipefail
        SRC=“/data”
        DST=“/data_new”
        LOG=“/var/log/inotify-sync.log”
        exec > > “$LOG” 2> & 1
        inotifywait -m -r -e close_write,create,delete,move --format ‘%w%f %e’ “$SRC” | while IFS=’ ’ read -r FILE EVENT; do
        case “$EVENT” in
        CREATE|MOVED_TO|MODIFY|CLOSE_WRITE)
        REL=“${ FILE#$SRC/} ”
        mkdir -p “$DST/$(dirname “$REL”)”
        rsync -aAX --inplace “$FILE” “$DST/$REL”
        ; ;
        DELETE|MOVED_FROM)
        REL=“${ FILE#$SRC/} ”
        rm -f “$DST/$REL”
        ; ;
        esac
        done
    • 权限与自启:
      • chmod +x /usr/local/bin/inotify-sync.sh
      • 创建服务:/etc/systemd/system/inotify-sync.service
        • [Unit] Description=Inotify to sync /data → /data_new
          After=network.target
        • [Service] Type=simple ExecStart=/usr/local/bin/inotify-sync.sh Restart=always User=root
        • [Install] WantedBy=multi-user.target
      • systemctl daemon-reload & & systemctl enable --now inotify-sync.service
  • 远程追平脚本(通过 rsync 推送到远端):
    • 将上面脚本中的 rsync 行替换为:
      • rsync -avzP --inplace “$FILE” “user@host:$DST/${ FILE#$SRC/} ”
  • 运行要点:
    • 使用**–inplace**减少目标端重写;
    • 如需更稳健的重试与退避,可在脚本中加入循环与 sleep;
    • 若需守护与日志轮转,可结合 systemd 的 StandardOutput/StandardError 与 logrotate。

四、切换与回滚

  • 切换步骤:
    • 短暂停止写入或进入维护模式;
    • 再次执行一次全量 rsync以追平最后秒级变更:rsync -aAX --delete /data/ /data_new/
    • 原子切换:
      • 方式A:mv /data /data_bak & & mv /data_new /data
      • 方式B(绑定挂载切换):mount --bind /data_new /data & & umount /data_new
    • 启动应用,观察日志与监控。
  • 回滚预案:
    • 若异常,立即切回:mv /data /data_new & & mv /data_bak /data,并恢复应用。
  • 清理:确认稳定后,按需归档或删除**/data_bak**。

五、性能与稳定性调优

  • 内核 inotify 限制:监控大量文件时需提升阈值,避免“Too many open files/监控丢失”。
    • 查看:cat /proc/sys/fs/inotify/{ max_user_watches,max_queued_events,max_user_instances}
    • 临时提升:
      • echo 10000000 > /proc/sys/fs/inotify/max_user_watches
      • echo 10000000 > /proc/sys/fs/inotify/max_queued_events
      • echo 65535 > /proc/sys/fs/inotify/max_user_instances
    • 永久生效:/etc/sysctl.d/99-inotify.conf
      • fs.inotify.max_user_watches = 10000000
      • fs.inotify.max_queued_events = 10000000
      • fs.inotify.max_user_instances = 65535
      • 执行:sysctl -p /etc/sysctl.d/99-inotify.conf
  • 脚本与 rsync 优化:
    • 事件去抖:对同一文件短时间多次变更可加入简单延时去抖(如 0.5–2 秒)再触发 rsync;
    • 排除无关路径:–exclude ‘*.tmp’ --exclude ‘/cache’;
    • 资源控制:限制并发与速率,避免占满 I/O。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian inotify更新后如何迁移数据
本文地址: https://pptw.com/jishu/755950.html
Debian inotify在虚拟机中如何使用 Debian inotify如何自定义通知方式

游客 回复需填写必要信息