温馨提示×

CentOS Swap如何进行数据恢复

小樊
37
2025-11-23 17:58:03
栏目: 智能运维

CentOS Swap 数据恢复与修复指南

一、先明确你的目标

  • 若只是 Swap 被禁用或配置丢失,目标是让系统重新启用 Swap(快速恢复服务可用性)。
  • 若你误删了 LVM 逻辑卷或分区(如 /dev/centos/swap),导致系统无法启动并进入 dracut 模式,目标是修复启动参数与 LVM 映射,使系统正常引导。
  • 若你误删了 正在使用的 Swap 文件 且里面有需要抢救的敏感数据,目标是立刻停止写入、卸载并离线恢复文件(成功率取决于是否被覆盖)。

二、快速恢复 Swap 功能(配置丢失或被禁用)

  • 检查当前状态:free -hswapon --show
  • 启用现有 Swap:
    • 使用交换文件:sudo swapon /swapfile
    • 使用交换分区:sudo swapon /dev/sdXN
  • 持久化配置:编辑 /etc/fstab,为对应条目添加(示例):
    • 交换文件:/swapfile swap swap defaults 0 0
    • 交换分区:/dev/sdXN swap swap defaults 0 0
  • 验证:sudo swapon --show 或重启后 free -h
  • 如系统曾因 Swap 配置错误无法启动,进入救援/单用户后,优先修正 /etc/fstab 中错误的 swap 挂载行,再重启。

三、LVM 逻辑卷或分区丢失导致无法启动的修复

  • 进入救援环境(如 dracut shell),先挂载根分区(LVM 示例):
    • mkdir /tmp/root
    • mount /dev/centos/root /tmp/root
  • 修正内核启动参数(两种常见位置,二选一或都改):
    • GRUB 配置:/tmp/root/etc/default/grub
      • rd.lvm.lv=centos/swapGRUB_CMDLINE_LINUX 中移除,仅保留 rd.lvm.lv=centos/root
    • 也可检查并修正 /tmp/root/boot/grub2/grub.cfg 中的同名参数
  • 同步 initramfs(若使用 LVM):
    • chroot /tmp/root
    • dracut -f(或 dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
  • 退出并重启:exitreboot
  • 进入系统后,按需重建 Swap(见第四节)。

四、误删 Swap 文件后的文件级数据抢救(高风险、低成功率)

  • 立刻停止对 Swap 的写入并卸载(若已启用):sudo swapoff -a
  • 备份当前 Swap 区域(离线镜像,便于后续分析):
    • 交换文件:sudo dd if=/swapfile of=/backup/swapfile_backup.img bs=4M status=progress
    • 交换分区:sudo dd if=/dev/sdXN of=/backup/swap_part_backup.img bs=4M status=progress
  • 使用文件恢复工具对镜像进行分析与尝试提取(示例思路):
    • extundelete、photorec、scalpel 等工具对镜像进行扫描
    • 注意:Swap 内容高度易变,一旦被覆盖,无法保证恢复
  • 若仅需彻底清除敏感数据(而非恢复),可使用安全擦除工具(如 secure-deletesswap)对 Swap 区域覆写,防止被恢复。

五、重建与验证 Swap(修复完成后)

  • 创建新的交换文件(示例,大小按内存与业务需求调整):
    • sudo fallocate -l 2G /swapfile
    • sudo chmod 600 /swapfile
    • sudo mkswap /swapfile
    • sudo swapon /swapfile
  • 持久化:在 /etc/fstab 添加 /swapfile swap swap defaults 0 0
  • 验证:free -hswapon --show
  • 可选优化:调整 vm.swappiness(示例设为 10):
    • 临时:sudo sysctl vm.swappiness=10
    • 永久:在 /etc/sysctl.conf 添加 vm.swappiness=10 后执行 sudo sysctl -p

0