Linux 设置 swap 虚拟内存 zram 内存教程

😂 这篇文章最后更新于488天前,您需要注意相关的内容是否还可用。
目录导航
  • Linux 上添加 swap
  • btrfs linux 上添加 swap
  • Linux 上设置 zram
  • Linux 上添加 swap

    命令:

    1. cd /usr
    2. mkdir swap
    3. dd if=/dev/zero of=/usr/swap/swapfile bs=1M count=4096
    4. mkswap /usr/swap/swapfile
    5. swapon /usr/swap/swapfile
    6. echo "/usr/swap/swapfile swap swap defaults 0 0" >> /etc/fstab
    7. reboot

    请注意,这些命令可能需要 root 权限才能执行。若报错:swapon: command not found,则可能是无配置环境变量,可以尝试以下方法:

    1. 使用 sudo 命令获取 root 权限,例如 sudo swapon /usr/swap/swapfile
    2. 使用 swapon 命令的完整路径,例如 /sbin/swapon /usr/swap/swapfile

    可以编写成脚本,例如 swap.sh

    #!/usr/bin/env bash
    #root 执行记得给这个脚本 chmod -R 777 权限不然执行不了。
    #修改交换空间大小 1G 500M 自行修改
    sudo fallocate -l 0.5G /swapfile 
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile
    #交换空间使用权重
    sysctl vm.swappiness=100
    #开机启用交换空间
    echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

    btrfs linux 上添加 swap

    如果系统是 btrfs 则需要按照以下注意事项操作:

    自 5.0 内核之后,Btrfs 才支持创建 Swapfile ,而且有一些特别的要求:

    • Swapfile 不能放在 snapshotted subvolume (快照子卷)上。
    • 不支持跨多设备文件系统上的 Swapfile 。

    所以正确的做法是:新建一个 non-snapshotted subvolume ,然后在该子卷之下创建禁用压缩的 Swapfile 。

    [psiace@fedora /]$ cd /
    # 创建 non-snapshotted subvolume 。
    [psiace@fedora /]$ sudo btrfs subvolume create swap
    Create subvolume './swap'
    # 进入子卷。
    [psiace@fedora /]$ cd swap
    # 新建长度为 0 的 Swapfile 。
    [psiace@fedora swap]$ sudo truncate -s 0 ./swapfile
    # 设置交换文件的属性,使其免于 copy-on-write 。
    [psiace@fedora swap]$ sudo chattr +C ./swapfile
    # 禁用压缩。
    [psiace@fedora swap]$ sudo btrfs property set ./swapfile compression none

    设定 Swapfile 作为 Swap 成分之一:

    # 将 Swapfile 填充至合适的大小,一般选择内存空间的一半或者与内存空间相当。
    # 这里仅仅是为了好玩,选择了巨量的 32GiB ,有浪费之嫌。
    [psiace@fedora swap]$ sudo dd if=/dev/zero of=./swapfile bs=1M count=32768 status=progress
    33980153856 字节(34 GB,32 GiB)已复制,20 s,1.7 GB/s
    记录了 32768+0 的读入
    记录了 32768+0 的写出
    34359738368 字节(34 GB,32 GiB)已复制,21.2624 s,1.6 GB/s
    # 设置正确的权限。
    [psiace@fedora swap]$ sudo chmod 600 ./swapfile
    # 格式化 Swapfile 作为交换类型。
    [psiace@fedora swap]$ sudo mkswap ./swapfile
    正在设置交换空间版本 1,大小 = 32 GiB (34359734272  个字节)
    无标签,UUID=2e48f371-62a9-487a-9613-382b386b2836
    # 激活交换文件,并设定优先级。
    # 由于 zram 的优先级是 100 ,所以这里设定成 50 。毕竟 zram 的性能比 swapfile 要强不少。
    [psiace@fedora swap]$ sudo swapon --priority 50 ./swapfile

    检查 Swap 空间并设置自动挂载

    # 使用 free 查看概览。
    [psiace@fedora ~]$ free -m
                   total        used        free      shared  buff/cache   available
    Mem:           15453        5206         290         109        9956        9808
    Swap:          40959           2       40957
    # 使用 swapon 查看详情。
    [psiace@fedora ~]$ swapon -s
    Filename             Type      Size     Used   Priority
    /dev/zram0      partition   8388604     2560        100
    /swap/swapfile  file       33554428        0         50
    # 编辑 fstab ,添加指定条目以完成挂载。
    # 这里必须带上子卷名,UUID 可以不写。
    [psiace@fedora ~]$ sudo nano /etc/fstab
    /swap/swapfile    none    swap    defaults    0    0

    如果设置后 swap 没有用开机自启,注意上述命令的 swap 路径是否与实际一致,本文是在根目录做的示例。以上代码改成 bash 脚本放文件一键执行:

    #!/usr/bin/env bash
    #root 执行记得给这个脚本 chmod -R 777 权限不然执行不了。
    #修改交换空间大小 1G 500M 自行修改
    sudo btrfs subvolume create /swap
    sudo truncate -s 0 /swap/swapfile
    sudo chattr +C /swap/swapfile
    sudo btrfs property set /swap/swapfile compression none
    # 这里设置 swap 大小 512M 自行修改
    sudo dd if=/dev/zero of=/swap/swapfile bs=1M count=512 status=progress
    sudo chmod 600 /swap/swapfile
    sudo mkswap /swap/swapfile
    sudo swapon --priority 50 /swap/swapfile
    echo '/swap/swapfile none swap defaults 0 0' >> /etc/fstab

    新建好的文件例如命名为 swap.sh,记得用 chmod 777 ./swap.sh 文件授权即可
    来源:在 Fedora 上为 Btrfs 新建 32GiB Swapfile

    Linux 上设置 zram

    效率比 swap 更高点,建议设置

    在终端中输入 sudo modprobe zram 来加载 zram 模块(省略)
    在终端中输入 sudo swapoff /dev/zram0 来关闭 zram0
    输入 sudo zramctl --reset /dev/zram0 来重置 zram0
    sudo zramctl --find 创建一个新的 zram 设备,它会返回一个设备名,例如 /dev/zram0
    输入 sudo zramctl --size 1024M /dev/zram0 来设置该设备的大小
    输入 sudo mkswap /dev/zram0 来创建交换分区
    输入 sudo swapon /dev/zram0 来开启 zram0

    shell 脚本,直接复制到命令行执行即可:

    sudo swapoff /dev/zram0;
    sudo zramctl --reset /dev/zram0;
    sudo zramctl --find;
    sudo zramctl --size 512M /dev/zram0;
    sudo mkswap /dev/zram0;
    sudo swapon /dev/zram0;

    /usr/bin/init-zram-swapping 是一个脚本文件,它用于在 Ubuntu 系统中初始化和配置 zram 交换分区 12。这个脚本的内容大致如下