温馨提示×

Ubuntu Swap怎么在不同硬盘间分配

小樊
44
2025-12-24 06:49:47
栏目: 智能运维

Ubuntu 在多块硬盘间分配 Swap 的可行方案

  • 使用多个交换分区(每块盘一个),通过 /etc/fstabpri= 设置优先级,实现按磁盘性能或剩余空间自动分配与回退。
  • 使用交换文件(每块盘一个),同样以 pri= 控制优先级,便于随时增删与迁移。
  • 使用 ZRAM(内核压缩内存)作为第一层高速交换,再叠加一块或多块硬盘上的交换分区/文件作为第二层,兼顾性能与容量。

方案一 多交换分区按优先级分配

  • 步骤
    1. 在目标硬盘上创建并初始化交换分区(示例为 /dev/sdb1
      • 分区类型设为 Linux swap(82)sudo fdisk /dev/sdb → n → t → 82 → w
      • 格式化:sudo mkswap /dev/sdb1
    2. 启用测试:sudo swapon /dev/sdb1
    3. 持久化:获取 UUIDsudo blkid /dev/sdb1
      写入 /etc/fstab(示例,优先级 10 高于默认 0):
      UUID=xxxx-xxxx-xxxx none swap sw,pri=10 0 0
    4. 如需在旧盘保留部分交换,重复以上步骤为旧盘创建分区(如 /dev/sda2),并在 fstab 中给较低优先级(如 pri=1)。
    5. 验证:swapon --showfree -h,应看到多块盘上的 Swap 均已启用,且按 pri 优先使用高优先级盘。
    6. 调整/移除:先 sudo swapoff /dev/sdXN,再修改 /etc/fstabsudo swapon -a
      说明:使用分区方式时,推荐用 UUID 而非设备名,避免盘序变化导致错误挂载。

方案二 多交换文件按优先级分配

  • 步骤
    1. 在目标硬盘创建交换文件(示例在 /mnt/data/swapfile2,大小 8G
      • 创建:sudo fallocate -l 8G /mnt/data/swapfile2(若失败可用 dd if=/dev/zero of=/mnt/data/swapfile2 bs=1G count=8
      • 权限:sudo chmod 600 /mnt/data/swapfile2
      • 格式化:sudo mkswap /mnt/data/swapfile2
    2. 启用测试:sudo swapon /mnt/data/swapfile2
    3. 持久化:写入 /etc/fstab(示例,优先级 5)
      /mnt/data/swapfile2 none swap sw,pri=5 0 0
    4. 如需多盘,重复创建并分配不同优先级;验证:swapon --show
    5. 调整/移除:sudo swapoff /mnt/data/swapfile2,再编辑 /etc/fstabsudo swapon -a
      说明:交换文件更灵活,易于在不同硬盘间迁移与调整大小。

方案三 ZRAM 叠加硬盘交换

  • 思路
    • 启用 ZRAM 作为第一层高速交换(压缩内存,低延迟),再配置一块或多块硬盘上的交换分区/文件作为第二层,容量不足时自动落到硬盘。
  • 快速启用 ZRAM(Ubuntu 桌面版通常已内置)
    • 查看/启用服务:sudo systemctl enable --now zramswap.service
    • 查看状态:zramctlswapon --show
  • 叠加硬盘交换
    • 按方案一或二创建并挂载硬盘上的交换(如 pri=1),系统将优先使用 ZRAM,超出后再使用硬盘交换。
      说明:ZRAM 能显著减少磁盘 I/O,适合作为前置层;当内存压力继续升高,再由硬盘交换承接。

关键注意事项

  • 使用 UUID 而非设备名(如 /dev/sda1)写入 /etc/fstab,提升可靠性。
  • 正确设置 pri= 实现“优先用哪块盘”:数值越大优先级越高;未设置时默认为 0
  • 变更前先 sudo swapoff -a,变更后用 sudo swapon -a 使 /etc/fstab 生效,并用 swapon --showfree -h 校验。
  • 若从旧盘迁移,记得在 /etc/fstab 中移除旧盘 swap 条目,避免开机报错或误用旧盘。
  • 硬盘空间不足或误配过大交换文件,可能导致系统无法进入图形界面;必要时进入 TTY 检查并释放空间。

0