XFS备份恢复实战:xfsdump与xfsrestore在CentOS 7中的完整指南
1. 为什么还要聊XFS备份这件事XFS这个文件系统只要你碰过CentOS 7基本绕不开。默认安装就是它跑数据库、跑容器、跑大文件存储底层十有八九是XFS。但有意思的是很多人天天用它却从来没认真想过一个问题这玩意儿要是崩了数据怎么回来我见过太多这样的情况——服务器跑得好好的某天突然断电或者手滑执行了不该执行的命令再或者磁盘出现坏道XFS直接给你甩一个挂载失败。这时候才想起来找备份结果发现要么没备要么备了不知道怎么恢复。XFS的备份恢复跟ext4那套思路不太一样它有自己的一套工具链用错了方法轻则恢复不全重则把原始数据也搭进去。这篇内容就是把我这些年踩过的坑、验证过的方案从头到尾捋一遍。不管你是刚接触Linux运维的新手还是已经管着几十台机器但一直没系统整理过XFS备份策略的老手都能从这里找到能直接用的东西。核心关键词就几个xfsdump、xfsrestore、XFS备份、XFS恢复、CentOS 7。我会把每个命令的参数掰开揉碎讲清楚把备份策略的选择逻辑说明白把恢复过程中那些容易翻车的地方提前给你标出来。先说一个基本认知XFS的备份工具是xfsdump和xfsrestore这一对它们跟tar、rsync不是一回事。tar和rsync是文件级别的复制xfsdump是文件系统级别的转储它能保留XFS特有的属性比如扩展属性、ACL、项目配额信息等。这就是为什么在XFS环境下做完整备份时优先考虑xfsdump而不是tar——tar在遇到某些特殊文件时可能会丢东西而xfsdump是专门为XFS设计的兼容性最好。但xfsdump也不是万能的。它只能备份已挂载的XFS文件系统不能备份未挂载的它支持增量备份但增量是基于dump级别的不是基于时间的它恢复的时候可以交互式选择要恢复哪些内容这个功能很强大但也很容易用错。这些细节后面会一个一个展开。2. XFS备份恢复的核心工具与原理拆解2.1 xfsdump和xfsrestore到底在干什么xfsdump的工作方式跟传统备份工具有一个本质区别它直接跟XFS文件系统的内部结构打交道。当你执行xfsdump的时候它会读取文件系统的inode信息、目录结构、扩展属性然后把这些数据打包成一个dump文件。这个dump文件不是简单的文件集合它包含了文件系统的元数据信息所以恢复的时候能够还原出完整的目录树和文件属性。xfsdump支持三种备份级别级别0全量备份、级别1到9增量备份。级别0就是完整备份整个文件系统级别1到9是增量备份基于上一次更低级别的备份来做差异。比如你先做了级别0然后做级别1级别1只备份自级别0之后变化的数据。再做级别2就只备份自级别1之后变化的数据。这个机制跟传统磁带备份的 grandfather-father-son 策略很像但xfsdump把它内置到了工具里。xfsrestore则是反过来它读取dump文件把数据写回文件系统。它支持交互式恢复也就是说你可以在恢复过程中选择只恢复某些文件或目录而不是全部恢复。这个功能在误删文件后特别有用——你不需要恢复整个文件系统只需要从dump文件里把误删的那几个文件捞出来就行。2.2 为什么不用tar或rsync做XFS备份这个问题我被问过很多次。tar和rsync当然可以用来备份XFS上的文件但它们有几个硬伤第一扩展属性和ACL。XFS支持扩展属性xattr和访问控制列表ACL这些在SELinux环境下特别重要。tar默认不保留扩展属性需要加--xattrs参数而且不同版本的tar行为还不一致。rsync也需要加-X和-A参数才能保留。xfsdump则是原生支持不需要额外配置。第二稀疏文件处理。XFS上如果有稀疏文件比如虚拟机磁盘镜像tar和rsync处理起来要么效率低要么会破坏稀疏特性。xfsdump能正确识别稀疏文件备份和恢复后稀疏特性保持不变。第三项目配额和实时子卷。XFS的项目配额信息、实时子卷realtime subvolume这些特性tar和rsync根本处理不了。xfsdump可以完整保留。第四增量备份的可靠性。tar做增量备份需要依赖外部工具比如tar的--newer参数配合时间戳文件容易出错。xfsdump的增量级别是文件系统内部记录的可靠性高得多。当然xfsdump也有缺点它只能备份整个文件系统不能只备份某个目录虽然可以指定子目录但会失去增量备份的能力它不支持压缩需要配合管道用gzip或xz它不能跨文件系统备份。所以实际工作中我通常是这样搭配的全量备份用xfsdump日常文件同步用rsync临时打包用tar。各取所长。2.3 备份介质的选择逻辑xfsdump可以把备份写到哪里答案是任何可以写成文件的地方。本地磁盘、外部存储、网络文件系统NFS、磁带设备都可以。但不同介质对备份策略的影响很大。写到本地磁盘是最简单的但有个致命问题如果本地磁盘坏了备份也跟着没了。所以本地磁盘备份只能作为短期快照不能作为唯一的备份手段。写到NFS是常见做法但NFS的性能和稳定性取决于网络。我遇到过NFS服务器突然断开导致xfsdump中断的情况dump文件写了一半恢复的时候发现不完整。所以用NFS做备份介质时一定要确保网络稳定并且dump完成后做校验。写到磁带设备比如LTO磁带是传统方案容量大、成本低但恢复速度慢而且需要专门的磁带机。现在用的人越来越少了但在一些特定场景下仍然有用。我的建议是至少两份备份一份本地一份远程。本地用xfsdump写到另一块磁盘远程用xfsdump写到NFS或者通过管道传给其他备份系统。这样即使本地磁盘全挂远程还有一份。3. 实操环境准备与备份策略设计3.1 环境检查和工具安装在开始备份之前先确认几件事。第一你的CentOS 7上有没有安装xfsdump。默认情况下CentOS 7最小化安装可能不带这个包需要手动装# 检查是否已安装 rpm -qa | grep xfsdump # 如果没有用yum安装 yum install -y xfsdump第二确认要备份的文件系统是XFS。用df -T或者mount命令查看df -T | grep xfs输出会显示文件系统类型确认是xfs才行。如果是ext4那xfsdump用不了得换其他方案。第三确认文件系统已挂载。xfsdump只能备份已挂载的XFS文件系统未挂载的没法直接备份。这一点跟一些其他备份工具不同需要注意。第四检查磁盘空间。备份文件的大小通常跟原文件系统已用空间差不多取决于是否有稀疏文件和压缩确保目标位置有足够空间。可以用xfsdump -p先做一次预估或者直接看df -h的结果。3.2 备份策略的制定备份策略的核心就三个问题备什么、备到哪、多久备一次。备什么如果是系统盘通常备份整个根文件系统排除/proc、/sys、/dev这些虚拟文件系统但xfsdump会自动跳过这些。如果是数据盘就看数据的重要程度和变化频率。备到哪前面说了至少两份本地一份远程一份。本地可以是另一块物理磁盘或者LVM卷远程可以是NFS或者对象存储通过管道上传。多久备一次这取决于数据变化的速度和你能容忍丢失多少数据。变化快的每天增量、每周全量变化慢的每周全量就够了。xfsdump的增量级别机制让这个变得很灵活周一做级别0周二到周日做级别1下周一再做级别0如此循环。我一般会设计这样的策略备份类型频率保留周期工具全量备份级别0每周一次4周xfsdump增量备份级别1每天一次7天xfsdump关键文件同步每小时24小时rsync这个表格里的参数不是固定的你可以根据自己的实际情况调整。关键是全量备份和增量备份要配合使用不能只做增量否则恢复的时候要按顺序恢复所有增量非常麻烦。3.3 备份脚本的编写要点手动执行xfsdump只适合测试生产环境一定要写成脚本配合cron定时执行。脚本里需要处理几个关键点第一备份文件的命名。建议包含日期、级别、文件系统标识比如backup_root_level0_20250101.dump。这样恢复的时候一眼就能看出是哪个时间点、哪个级别的备份。第二日志记录。每次备份的执行结果、耗时、文件大小都要记录到日志里方便排查问题。xfsdump本身有-v参数可以输出详细信息重定向到日志文件就行。第三错误处理。如果备份失败要能发出告警。最简单的做法是检查xfsdump的退出码非零就发邮件或者写系统日志。第四旧备份清理。保留太多备份会占满磁盘需要定期删除过期的。可以用find命令按时间删除或者用脚本维护一个备份列表。下面是一个我常用的备份脚本框架#!/bin/bash # XFS备份脚本 # 用法./xfs_backup.sh 文件系统挂载点 备份目标目录 备份级别 MOUNT_POINT$1 BACKUP_DIR$2 LEVEL$3 DATE$(date %Y%m%d_%H%M%S) HOSTNAME$(hostname) FS_NAME$(echo $MOUNT_POINT | tr / _) BACKUP_FILE${BACKUP_DIR}/backup${FS_NAME}_level${LEVEL}_${DATE}.dump LOG_FILE${BACKUP_DIR}/backup.log # 检查参数 if [ -z $MOUNT_POINT ] || [ -z $BACKUP_DIR ] || [ -z $LEVEL ]; then echo 用法: $0 挂载点 备份目录 级别 exit 1 fi # 检查挂载点是否存在且为XFS if ! mount | grep -q on ${MOUNT_POINT} type xfs; then echo 错误: ${MOUNT_POINT} 不是已挂载的XFS文件系统 | tee -a $LOG_FILE exit 1 fi # 检查备份目录是否存在 if [ ! -d $BACKUP_DIR ]; then echo 错误: 备份目录 ${BACKUP_DIR} 不存在 | tee -a $LOG_FILE exit 1 fi # 执行备份 echo [$(date)] 开始备份 ${MOUNT_POINT} 级别 ${LEVEL} $LOG_FILE xfsdump -l $LEVEL -L ${HOSTNAME}_${FS_NAME}_level${LEVEL} -M ${HOSTNAME}_${FS_NAME} -f $BACKUP_FILE $MOUNT_POINT $LOG_FILE 21 # 检查结果 if [ $? -eq 0 ]; then SIZE$(du -h $BACKUP_FILE | cut -f1) echo [$(date)] 备份成功: ${BACKUP_FILE} (${SIZE}) $LOG_FILE else echo [$(date)] 备份失败! $LOG_FILE # 这里可以加告警逻辑比如发邮件 exit 1 fi # 清理超过30天的备份 find $BACKUP_DIR -name backup*.dump -mtime 30 -delete echo [$(date)] 清理完成 $LOG_FILE这个脚本里-l指定备份级别-L是备份会话标签-M是媒体标签-f指定输出文件。这些参数后面会详细解释。4. 全量备份与增量备份的完整操作流程4.1 全量备份级别0实操全量备份是基础第一次备份必须做级别0。命令格式如下xfsdump -l 0 -L session_label -M media_label -f /backup/root_level0.dump /逐个参数解释-l 0指定备份级别为0即全量备份。-L session_label会话标签用来标识这次备份。建议包含主机名、文件系统、日期等信息方便后续识别。-M media_label媒体标签标识备份介质。如果备份文件跨多个磁带或文件这个标签会记录在第一个文件里。-f /backup/root_level0.dump指定备份输出文件。如果是磁带设备就写设备路径比如/dev/st0。/要备份的文件系统挂载点。执行过程中xfsdump会输出进度信息包括已备份的文件数、数据量等。如果文件系统很大这个过程可能持续几个小时。建议在业务低峰期执行。有一个细节需要注意xfsdump默认会备份文件系统的所有内容包括已删除但inode还保留的文件。如果你确定不需要这些可以加-e参数跳过。但大多数情况下保留这些更安全。备份完成后检查dump文件是否完整# 查看dump文件信息 xfsdump -I -f /backup/root_level0.dump这个命令会输出dump文件的详细信息包括备份级别、会话标签、媒体标签、备份时间、文件系统UUID等。确认这些信息正确说明备份文件是完整的。4.2 增量备份级别1到9实操增量备份的前提是已经做过更低级别的备份。比如要做级别1必须先有级别0的备份。命令格式xfsdump -l 1 -L session_label_level1 -M media_label -f /backup/root_level1.dump /xfsdump会自动找到上一次级别0的备份记录记录在/var/lib/xfsdump/inventory目录下然后只备份自那之后变化的数据。这里有一个关键点xfsdump的增量是基于inventory的。inventory是xfsdump维护的一个数据库记录了每次备份的会话信息。如果你删除了inventory或者换了机器增量备份就找不到基准了会退化成全量备份。所以千万不要手动删除/var/lib/xfsdump/inventory目录。查看当前inventory里的备份记录xfsdump -I这个命令会列出所有已记录的备份会话包括级别、时间、标签等。你可以根据这个输出确认增量备份的基准是否正确。增量备份的大小通常比全量小很多但也不是绝对的。如果文件系统变化很大增量备份可能接近全量的大小。所以做增量备份时也要确保目标位置有足够空间。4.3 备份到远程NFS的实操把备份写到NFS是常见做法。先挂载NFSmount -t nfs 192.168.1.100:/backup /mnt/nfs_backup然后xfsdump直接写到NFS挂载点xfsdump -l 0 -L root_full -M nfs_backup -f /mnt/nfs_backup/root_level0.dump /但NFS有个问题如果网络中断xfsdump会失败dump文件可能不完整。所以建议先写到本地临时目录完成后再复制到NFS# 先写本地 xfsdump -l 0 -L root_full -M local_temp -f /tmp/root_level0.dump / # 再复制到NFS cp /tmp/root_level0.dump /mnt/nfs_backup/ # 校验复制后的文件大小是否一致 ls -l /tmp/root_level0.dump /mnt/nfs_backup/root_level0.dump这样即使NFS出问题本地还有一份完整的备份。复制完成后可以删除本地临时文件释放空间。4.4 备份文件的压缩与校验xfsdump本身不支持压缩但可以通过管道配合gzip或xzxfsdump -l 0 -L root_full -M compressed -f - / | gzip /backup/root_level0.dump.gz注意这里的-f -表示输出到标准输出然后通过管道传给gzip。恢复的时候需要先解压gzip -dc /backup/root_level0.dump.gz | xfsrestore -f - /mnt/restore压缩能节省空间但会增加CPU开销而且恢复时多了一步解压。如果磁盘空间不是特别紧张我一般不建议压缩因为压缩后的dump文件如果损坏恢复起来更麻烦。校验备份文件的完整性可以用xfsdump -I -f查看信息也可以用md5sum计算校验和md5sum /backup/root_level0.dump /backup/root_level0.dump.md5恢复前先校验md5sum -c /backup/root_level0.dump.md5如果校验失败说明文件损坏需要重新备份。5. 恢复操作的全流程与关键细节5.1 恢复前的准备工作恢复之前先确认几件事第一确认要恢复到哪个文件系统。xfsrestore可以把数据恢复到原文件系统也可以恢复到另一个XFS文件系统。如果是恢复到原文件系统要确保文件系统已挂载且有空余空间。如果是恢复到新文件系统先创建并挂载# 创建新文件系统假设用/dev/sdb1 mkfs.xfs /dev/sdb1 mkdir /mnt/restore mount /dev/sdb1 /mnt/restore第二确认dump文件的完整性。用xfsdump -I -f查看信息或者用md5sum校验。第三确认inventory状态。如果要恢复增量备份需要按顺序恢复先恢复级别0再恢复级别1再恢复级别2以此类推。xfsrestore会自动读取inventory里的记录找到正确的恢复顺序。第四停止相关服务。如果恢复到原文件系统恢复过程中文件会被覆盖正在运行的服务可能会出错。建议先停止相关服务恢复完成后再启动。5.2 全量恢复实操全量恢复的命令格式xfsrestore -f /backup/root_level0.dump /mnt/restore这个命令会把dump文件里的所有内容恢复到/mnt/restore目录。如果/mnt/restore就是原文件系统的挂载点那就相当于原地恢复。xfsrestore默认是非交互式的也就是说它会自动恢复所有内容不需要人工干预。恢复过程中会输出进度信息包括已恢复的文件数、数据量等。恢复完成后检查文件是否完整# 对比原文件系统和恢复后的文件系统 ls -la /mnt/restore # 检查关键文件是否存在 cat /mnt/restore/etc/passwd如果恢复的是根文件系统还需要注意权限和SELinux上下文。xfsrestore会尽量保留这些信息但有时候需要手动修复# 恢复SELinux上下文 restorecon -Rv /mnt/restore5.3 增量恢复实操增量恢复需要按顺序进行。假设你有级别0、级别1、级别2三个备份# 先恢复级别0 xfsrestore -f /backup/root_level0.dump /mnt/restore # 再恢复级别1 xfsrestore -f /backup/root_level1.dump /mnt/restore # 最后恢复级别2 xfsrestore -f /backup/root_level2.dump /mnt/restorexfsrestore会自动处理增量关系你只需要按顺序执行就行。但要注意增量恢复必须按顺序不能跳过中间的级别。比如不能直接恢复级别2而不恢复级别1否则数据会不完整。如果inventory记录完整xfsrestore也可以自动找到所有相关的备份文件一次性恢复xfsrestore -f /backup/root_level0.dump -r /mnt/restore-r参数表示累积恢复xfsrestore会读取inventory找到所有相关的增量备份按顺序恢复。但这个功能依赖于inventory的完整性如果inventory丢失或损坏就只能手动按顺序恢复了。5.4 交互式恢复只捞回误删的文件这是xfsrestore最实用的功能之一。假设你不小心删了/home/user/important.txt不需要恢复整个文件系统只需要从dump文件里把这个文件捞出来xfsrestore -f /backup/root_level0.dump -i /mnt/restore-i参数进入交互式模式。进入后会看到一个类似shell的界面可以用ls、cd命令浏览dump文件里的目录结构xfsrestore ls xfsrestore cd home/user xfsrestore ls xfsrestore add important.txt xfsrestore extractadd命令把文件加入恢复列表extract执行恢复。恢复完成后文件会出现在/mnt/restore/home/user/important.txt。交互式模式还支持quit退出、help查看帮助。这个功能在误删文件后特别有用比重装系统或者从完整备份里找文件快得多。5.5 恢复到不同文件系统的注意事项有时候需要把备份恢复到另一个文件系统比如把旧磁盘的数据迁移到新磁盘。这时候要注意几点第一目标文件系统必须是XFS。xfsrestore只能恢复到XFS文件系统不能恢复到ext4或其他类型。第二目标文件系统要有足够空间。恢复前用df -h确认。第三UUID和标签。如果目标文件系统要替换原文件系统可能需要修改UUID和标签避免冲突# 查看当前UUID blkid /dev/sdb1 # 修改UUID xfs_admin -U generate /dev/sdb1 # 修改标签 xfs_admin -L new_label /dev/sdb1第四引导加载程序。如果恢复的是系统盘还需要重新安装GRUB# 假设新磁盘是/dev/sdb grub2-install /dev/sdb grub2-mkconfig -o /boot/grub2/grub.cfg这些步骤在系统迁移场景下很常见但容易被忽略。特别是GRUB如果不重装新磁盘没法引导。6. 常见问题排查与避坑经验实录6.1 备份过程中的典型报错与解决报错一xfsdump: ERROR: cannot open /var/lib/xfsdump/inventory这个错误通常是因为inventory目录不存在或权限不对。解决方法是手动创建并设置权限mkdir -p /var/lib/xfsdump/inventory chmod 755 /var/lib/xfsdump/inventory如果还是不行检查SELinux是否阻止了xfsdump访问这个目录# 查看SELinux状态 getenforce # 如果是Enforcing尝试临时设为Permissive测试 setenforce 0如果设为Permissive后正常说明是SELinux策略问题需要调整策略或添加规则。报错二xfsdump: ERROR: filesystem is not mountedxfsdump只能备份已挂载的文件系统。确认挂载点是否正确mount | grep xfs如果文件系统确实没挂载先挂载再备份。报错三xfsdump: ERROR: media label not specified这个错误是因为没有指定-M参数。xfsdump要求必须指定媒体标签加上就行xfsdump -l 0 -L session -M media -f /backup/root.dump /报错四xfsdump: ERROR: cannot write to /backup/root.dump目标位置没有写权限或空间不足。检查权限和空间# 检查权限 ls -ld /backup # 检查空间 df -h /backup6.2 恢复过程中的典型报错与解决报错一xfsrestore: ERROR: cannot open dump filedump文件不存在或路径不对。确认文件路径和权限ls -l /backup/root_level0.dump报错二xfsrestore: ERROR: dump file is corrupteddump文件损坏。用md5sum校验如果确实损坏只能重新备份。报错三xfsrestore: ERROR: cannot create directory目标文件系统空间不足或权限不够。检查空间和权限df -h /mnt/restore ls -ld /mnt/restore报错四xfsrestore: ERROR: restore failed: No space left on device目标文件系统空间不足。清理空间或换更大的文件系统。6.3 常见问题速查表问题现象可能原因解决方法xfsdump报inventory错误inventory目录不存在或权限不对创建目录并设置权限xfsdump报文件系统未挂载文件系统未挂载先挂载再备份xfsdump报媒体标签未指定缺少-M参数加上-M参数xfsdump报无法写入目标位置权限或空间问题检查权限和空间xfsrestore报dump文件损坏文件损坏用md5sum校验重新备份xfsrestore报空间不足目标文件系统空间不够清理空间或换文件系统增量恢复后数据不完整恢复顺序错误或inventory丢失按顺序恢复检查inventory恢复后SELinux上下文错误SELinux上下文未恢复执行restorecon6.4 独家避坑经验坑一inventory丢失导致增量备份失效。我遇到过有人为了清理空间把/var/lib/xfsdump/inventory目录删了结果所有增量备份都找不到基准只能重新做全量。这个目录很小占不了多少空间千万别删。坑二备份文件没有校验。有一次备份完成后没校验恢复的时候才发现dump文件不完整白白浪费了几个小时。从那以后我每次备份完都做md5sum校验恢复前再校验一次。坑三增量备份级别用错。xfsdump的增量级别是1到9但很多人以为级别越高备份越全其实不是。级别1是基于级别0的增量级别2是基于级别1的增量以此类推。级别越高依赖链越长恢复越麻烦。我一般只用级别0和级别1最多用到级别2。坑四恢复时覆盖了原数据。有一次帮人恢复误删的文件直接恢复到原目录结果把现有文件也覆盖了。正确的做法是恢复到临时目录确认无误后再复制回去。坑五忽略了SELinux。在SELinux Enforcing模式下恢复后的文件可能因为上下文不对而无法访问。恢复后记得执行restorecon -Rv修复上下文。坑六备份脚本没有错误处理。有人写了个备份脚本但没检查xfsdump的退出码备份失败了也不知道。建议脚本里加上错误检查和告警。坑七备份文件放在同一个磁盘。这是最危险的。磁盘坏了数据和备份一起没。至少要把备份放到另一块磁盘或远程位置。坑八没有定期测试恢复。备份做得再好没测试过恢复流程真出事的时候可能手忙脚乱。建议每季度至少做一次恢复演练确保流程通畅。6.5 性能优化建议xfsdump的性能主要受磁盘I/O和网络带宽影响。如果备份速度慢可以考虑几个优化方向第一调整块大小。xfsdump默认的块大小是64KB可以通过-b参数调整。增大块大小能提高吞吐量但也会增加内存占用。一般设到256KB或512KB比较合适xfsdump -b 262144 -l 0 -L session -M media -f /backup/root.dump /第二使用多线程压缩。如果通过管道压缩用pigz代替gzip可以利用多核xfsdump -l 0 -L session -M media -f - / | pigz /backup/root.dump.gz第三避开业务高峰期。备份会占用磁盘I/O影响业务性能。安排在低峰期执行。第四使用专用备份网络。如果备份到NFS走专用网络接口能避免影响业务网络。第五定期清理旧备份。保留太多备份会占满磁盘也会拖慢备份速度。建议保留最近4周的全量备份和最近7天的增量备份。7. 备份策略的长期维护与扩展思路备份不是做一次就完事了需要长期维护。我一般会做这几件事每月检查一次备份日志确认所有备份任务都正常执行没有失败记录。如果发现失败及时排查原因。每季度做一次恢复演练从备份文件里恢复几个关键文件确认恢复流程通畅。演练不需要恢复整个文件系统挑几个文件测试就行。每半年审查一次备份策略看看数据量变化、业务需求变化是否需要调整备份频率、保留周期、存储位置。每年做一次全面审计检查备份介质的健康状态如果是磁带或外部磁盘检查备份脚本的兼容性系统升级后可能需要调整检查inventory的完整性。扩展方面如果数据量持续增长单机备份可能不够用可以考虑集中式备份方案。比如用Bacula、Amanda这类专业备份软件它们支持多客户端、多介质、自动化调度适合大规模环境。但这类软件配置复杂学习成本高小规模环境用xfsdump加脚本就够了。另一个扩展方向是异地备份。本地备份只能防磁盘故障防不了火灾、水灾、盗窃这些灾难。异地备份可以通过定期把备份文件复制到远程位置实现或者直接用云存储作为备份目标。但要注意数据安全和传输加密避免敏感数据泄露。还有一个思路是结合快照技术。如果文件系统在LVM上可以先做LVM快照再对快照做xfsdump。这样备份过程中文件系统可以继续读写不影响业务。但LVM快照需要预留空间而且快照本身也有性能开销需要权衡。最后说一个我自己的习惯每次做重大变更之前先手动做一次全量备份。比如升级系统、调整分区、迁移数据之前先备份一份心里踏实。这个习惯帮我避免了好几次灾难虽然多花了一点时间但比起数据丢失的代价这点时间完全值得。