温馨提示×

centos swapper恢复过程

小樊
44
2025-12-23 13:39:41
栏目: 智能运维

CentOS 交换空间 Swapper 恢复流程

一、先快速判断与启用

  • 查看当前交换状态:free -hswapon --show。若显示 Swap: 0B,说明未启用。
  • 临时启用:
    • 交换文件:sudo swapon /swapfile
    • 交换分区:sudo swapon /dev/sdXN 或 LVM 逻辑卷:sudo swapon /dev/mapper/centos-swap
  • 持久化:在 /etc/fstab 添加对应条目并验证
    • 文件:/swapfile swap swap defaults 0 0
    • 分区或 LVM:/dev/mapper/centos-swap swap swap defaults 0 0
  • 再次验证:swapon --showfree -h。以上步骤可快速恢复被禁用的 Swap。

二、有备份时的恢复(交换分区或交换文件)

  • 确认设备/文件路径:swapon -s
  • 如备份为压缩包先解压:gunzip /backup/swap/file.img.gz
  • 恢复:
    • 分区:dd if=/backup/swap/swap_backup.img of=/dev/sdXN bs=4M status=progress
    • 文件:dd if=/backup/swap/swapfile_backup.img of=/swapfile bs=4M status=progress
  • 启用:swapon /dev/sdXNswapon /swapfile
  • 验证:swapon --showfree -h
  • 建议操作在单用户/救援模式下进行,并确保充足磁盘空间

三、无备份时的重建(按场景操作)

  • 场景 A:使用交换文件
    1. 创建:sudo fallocate -l 2G /swapfile(或 dd if=/dev/zero of=/swapfile bs=1M count=2048
    2. 安全设置:sudo chmod 600 /swapfile
    3. 格式化:sudo mkswap /swapfile
    4. 启用:sudo swapon /swapfile
    5. 持久化:在 /etc/fstab 添加 /swapfile swap swap defaults 0 0
    6. 验证:swapon --showfree -h
  • 场景 B:使用 LVM 交换逻辑卷(如误删或丢失)
    1. 查看卷组:sudo vgs
    2. 重建 LV(示例名 centos/swap,大小 2G):sudo lvcreate -L 2G -n swap centos
    3. 格式化:sudo mkswap /dev/mapper/centos-swap
    4. 启用:sudo swapon /dev/mapper/centos-swap
    5. 持久化:在 /etc/fstab 添加 /dev/mapper/centos-swap swap swap defaults 0 0
    6. 验证:swapon --showfree -h
  • 场景 C:进入 dracut 紧急模式且提示 /dev/centos/swap does not exist
    1. 在 dracut 中挂载根分区:mkdir /tmp/root && mount /dev/mapper/centos-root /tmp/root
    2. 编辑:vi /tmp/root/etc/default/grub,将 rd.lvm.lv=centos/swapGRUB_CMDLINE_LINUX 中删除并保存
    3. 挂载 /boot:mkdir /tmp/boot && mount /dev/vda1 /tmp/boot(设备名以实际为准)
    4. 编辑:vi /tmp/boot/grub2/grub.cfg,删除所有 linux16 ... rd.lvm.lv=centos/swap ... 的启动项参数
    5. 重启:reboot
    6. 系统启动后按“场景 B”重建 centos/swap 并写回 /etc/fstab

四、启动失败或卡在 swapper 的应急排查

  • 查看内核日志:dmesg | grep -i "swapper\|panic";查看上次启动日志:journalctl -b -1
  • 进入单用户/救援模式修复:
    • CentOS 6:GRUB 编辑内核行,末尾加 single 启动
    • CentOS 7:将 ro 改为 rw,行尾追加 init=/bin/bash 启动
  • 若因 LVM/设备不存在导致无法挂载,按“场景 C”清理 rd.lvm.lv=centos/swap 后启动,再重建交换
  • 若日志出现 “task swapper blocked for more than 120 seconds”,多与磁盘/存储 I/O 超时相关,优先排查底层存储、RAID、宿主机资源等。

五、验证与优化建议

  • 验证:swapon --showfree -hcat /proc/swaps 应能看到已启用的交换设备/文件与大小
  • 适度调整 vm.swappiness(默认通常为 60):
    • 临时:sudo sysctl vm.swappiness=10
    • 永久:在 /etc/sysctl.conf 加入 vm.swappiness=10 并执行 sudo sysctl -p
  • 不建议将 swappiness 设为 0(可能导致 OOM 风险增大)。

0