温馨提示×

Debian Swap如何迁移

小樊
39
2025-12-28 15:34:05
栏目: 智能运维

Debian 交换空间迁移指南

一、迁移场景与准备

  • 适用场景:将交换从交换分区迁到交换文件,或在同一磁盘/新磁盘上更换位置/调整大小,以及跨磁盘迁移后保持**休眠唤醒(resume)**正常。
  • 准备工作:
    • 备份重要数据;确保系统可用物理内存足以支撑迁移时短时关闭交换(执行 swapoff)。
    • 查看当前交换与磁盘布局:
      • 查看启用中的交换:swapon --showcat /proc/swaps
      • 查看分区与 UUIDlsblk -fblkid
    • 迁移前可先创建新交换并验证可用,再切换,降低风险。

二、迁移到交换文件(通用、灵活)

  • 创建并启用新交换文件(示例为 2G,可按需调整):
    • 创建文件:
      • 推荐:sudo fallocate -l 2G /swapfile
      • 兼容方式:sudo dd if=/dev/zero of=/swapfile bs=1G count=2
    • 设置权限:sudo chmod 600 /swapfile
    • 初始化为交换:sudo mkswap /swapfile
    • 启用交换:sudo swapon /swapfile
    • 验证:swapon --showfree -h
  • 设置开机自动挂载:
    • 追加到 /etc/fstabecho ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab
  • 切换为默认使用新交换(可选,设置更高优先级):
    • 临时:sudo swapon --priority 100 /swapfile
    • 或在 /etc/fstab 中为新条目加上 pri=100(如:/swapfile none swap sw,pri=100 0 0)
  • 禁用旧交换(确认新交换稳定后再执行):
    • 分区:sudo swapoff /dev/sdXN
    • 文件:sudo swapoff /old/swapfile
    • 同步更新 /etc/fstab,删除旧条目。

三、迁移到新交换分区或跨磁盘

  • 创建并初始化新交换分区(示例分区为 /dev/sdXN):
    • 分区类型设为 Linux swap(可用 fdisk/gdisk)
    • 初始化:sudo mkswap /dev/sdXN
    • 启用:sudo swapon /dev/sdXN
  • 若需从旧交换分区迁移内容(通常不必,交换内容无持久语义,直接启用新分区即可):
    • 备份旧分区:sudo dd if=/dev/sdXN of=/path/backup.img bs=4M
    • 恢复到新分区:sudo dd if=/path/backup.img of=/dev/sdXY bs=4M
  • 更新 /etc/fstab 使用新分区的 UUID(推荐用 UUID 而非设备名):
    • 获取 UUID:blkid
    • /etc/fstab 中改为:UUID=xxxx-xxxx none swap sw 0 0
  • 如从分区迁到文件,或反之,按第二部分的步骤创建并启用新目标,再禁用旧目标并更新 /etc/fstab

四、迁移后保留休眠唤醒 resume

  • 获取新交换的 UUIDblkid
  • 更新 initramfs 的 resume 配置:
    • 编辑:sudo nano /etc/initramfs-tools/conf.d/resume
    • 写入:RESUME=UUID=新交换的UUID
  • 更新 initramfs 并重启:
    • sudo update-initramfs -u
    • sudo reboot
  • 验证:
    • 检查内核参数:cat /proc/cmdline(应含 resume=UUID=…
    • 检查是否启用:swapon --show
    • 测试休眠:执行 systemctl hibernate 验证能否正常唤醒。

五、常见问题与优化

  • 关闭交换前务必确认可用内存充足,避免 OOM;生产环境建议先评估负载。
  • 使用 UUID 而非设备名(如 /dev/sda2)配置 /etc/fstabresume,提升可移植性与稳定性。
  • 调整 swappiness(默认通常为 60)以匹配负载与介质:
    • 查看:cat /proc/sys/vm/swappiness
    • 临时:sudo sysctl vm.swappiness=10
    • 永久:在 /etc/sysctl.conf 添加 vm.swappiness=10 后执行 sudo sysctl -p
  • 使用 LVM 管理交换逻辑卷可在后续更灵活地调整大小与位置。
  • 验证命令汇总:swapon --showfree -hblkidcat /proc/cmdline

0