Debian Swap如何迁移
小樊
39
2025-12-28 15:34:05
Debian 交换空间迁移指南
一、迁移场景与准备
- 适用场景:将交换从交换分区迁到交换文件,或在同一磁盘/新磁盘上更换位置/调整大小,以及跨磁盘迁移后保持**休眠唤醒(resume)**正常。
- 准备工作:
- 备份重要数据;确保系统可用物理内存足以支撑迁移时短时关闭交换(执行 swapoff)。
- 查看当前交换与磁盘布局:
- 查看启用中的交换:swapon --show 或 cat /proc/swaps
- 查看分区与 UUID:lsblk -f、blkid
- 迁移前可先创建新交换并验证可用,再切换,降低风险。
二、迁移到交换文件(通用、灵活)
- 创建并启用新交换文件(示例为 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 --show 或 free -h
- 设置开机自动挂载:
- 追加到 /etc/fstab:echo ‘/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
- 获取新交换的 UUID:blkid
- 更新 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/fstab 与 resume,提升可移植性与稳定性。
- 调整 swappiness(默认通常为 60)以匹配负载与介质:
- 查看:cat /proc/sys/vm/swappiness
- 临时:sudo sysctl vm.swappiness=10
- 永久:在 /etc/sysctl.conf 添加 vm.swappiness=10 后执行 sudo sysctl -p
- 使用 LVM 管理交换逻辑卷可在后续更灵活地调整大小与位置。
- 验证命令汇总:swapon --show、free -h、blkid、cat /proc/cmdline。