Linux ZRAM内存压缩技术

一个仅少量增加CPU性能占用换来成倍的内存,性能约硬盘SWAP的100倍,压缩比绝大多数情况1:5,如今内存涨价最友好的技术。

如今内存、硬盘的价格因AI的高需求价格不是一般的贵,是以往正常价格的3-6倍,尤其是大内存、大存储的硬盘更是超级溢价,现在的ZRAM内存压缩技术也是相当成熟,压缩比高达1:5甚至能够更高,代价却仅仅只是少量的增加CPU的计算量,而Andorid、ChromeOS、Fedora / openSUSE桌面版都已经默认启用了ZRAM,因为这不仅性能极高还能避免硬盘SWAP的读写延长硬盘寿命,当然这样的技术我也不用过多解释,你仅需问AI或搜索引擎自己了解此技术,我们可以立马步入正题教你怎么开启。

环境要求:Ubuntu24.04,Debian11、12、13,Centos7.x、8Steam、9Steam、Rocky8.1、8.8、9.2,Fedora32、31、30(理论来说几乎绝大多数的Linux系统都可以开启,只是有些系统自带内核太老了需要你自行升级或安装ZRAM模块才能够支持开启,我提供的脚本能直接覆盖这些比较主流的发行系统)

Linux工具箱(脚本):shell.cdn1.vip

步骤:直接执行工具箱脚本-选项1-选项29-选项1-全部回车就可以开启

==================================
       ZRAM 内存压缩管理       
==================================
---------- 内存压缩详情 ----------
物理内存: 1967 MB  |  建议 ZRAM: 983 MB (50%)
状态: 未开启
----------------------------------
1. 开启 ZRAM 内存压缩
2. 关闭 ZRAM 内存压缩
3. 修改 ZRAM 大小/算法
==================================
请选择 [1-3] 或按 'b' 返回: 1
正在检查 ZRAM 依赖...
ZRAM 依赖检查通过
请输入 ZRAM 大小(MB),直接回车保持/默认 983(物理内存 1967MB): 

可用压缩算法:
  1) lzo
  2) lzo-rle
  3) lz4
  4) lz4hc
  5) 842
  6) zstd  (当前/推荐,回车选用)
请选择算法编号,直接回车使用 zstd: 

正在停用可能冲突的发行版 ZRAM 服务...
正在应用 ZRAM: 983MB / 算法 zstd ...
已配置 systemd 开机自启 (zram-setup.service)
ZRAM 已生效: /dev/zram0 (983MB, zstd),重启后仍会自动生效
---------- 内存压缩详情 ----------
物理内存: 1967 MB  |  建议 ZRAM: 983 MB (50%)
状态: 已开启
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd          983M   4K   59B   20K       2 [SWAP]
设备 zram0: 算法=zstd  原始=4096B  压缩后=59B  压缩比=69.42
----------------------------------
按任意键继续...                                                                                                                                                 
图片[1]-Linux ZRAM内存压缩技术-日出资源网
演示图

可以看到我Web主服务器也就7.5G,因为部署的项目很多还有各种Python爬虫脚本经常爆内存,配置了ZRAM后内存现在非常够用压缩比来到了1:6.9非常惊人,你还可以再添加一个硬盘SWAP作为兜底

当然我也准备了开机脚本默认都是根据物理物理内存的50%你可以自行调整

Ubuntu24.04:

#!/bin/bash
# Ubuntu 24.04/26.04 开机脚本:开启 ZRAM(默认物理内存50%),并设置开机自启

zram_setup_all() {
  export DEBIAN_FRONTEND=noninteractive

  # 1. 确保 zramctl 存在
  command -v zramctl >/dev/null 2>&1 || {
    apt-get update -qq
    apt-get install -y -qq util-linux
  }

  # 2. 加载 ZRAM 模块;系统不支持时直接结束,不安装新内核
  if ! modprobe zram 2>/dev/null; then
    echo "当前系统缺少 ZRAM 内核模块,跳过配置"
    return 1
  fi

  # 3. 停用系统自带的 ZRAM 服务,避免冲突
  for svc in zramswap.service zram-config.service; do
    systemctl disable --now "$svc" 2>/dev/null || true
  done

  # 4. 计算大小(内存50%)并选可用的最高效算法
  RAM_MB=$(awk '/^MemTotal:/ {printf "%d", $2/1024}' /proc/meminfo)
  SIZE_MB=$((RAM_MB * 50 / 100))
  [ "$SIZE_MB" -lt 64 ] && SIZE_MB=64
  [ ! -b /dev/zram0 ] && [ -e /sys/class/zram-control/hot_add ] \
    && cat /sys/class/zram-control/hot_add >/dev/null 2>&1
  ALGS=$(cat /sys/block/zram0/comp_algorithm 2>/dev/null | tr -d '[]')
  ALG=lzo
  for a in zstd lz4hc lz4 lzo-rle lzo; do
    echo " $ALGS " | grep -q " $a " && { ALG=$a; break; }
  done

  # 5. 写配置
  mkdir -p /etc/linux-toolbox /etc/modules-load.d
  echo zram > /etc/modules-load.d/zram.conf
  printf 'SIZE_MB=%s\nALGORITHM=%s\n' "$SIZE_MB" "$ALG" > /etc/linux-toolbox/zram.conf

  # 6. 写开机应用脚本(同样不含 exit,用函数 return)
  cat > /etc/linux-toolbox/zram-apply.sh <<'EOF'
#!/bin/bash
# ZRAM 开机应用脚本(由开机脚本自动生成)
zram_apply() {
  . /etc/linux-toolbox/zram.conf
  SIZE_MB=${SIZE_MB:-512}
  ALGORITHM=${ALGORITHM:-lzo}
  modprobe zram 2>/dev/null || true
  awk 'NR>1 && $1 ~ /zram/ {print $1}' /proc/swaps 2>/dev/null | while read d; do
    swapoff "$d" 2>/dev/null || true
  done
  for d in /dev/zram*; do
    [ -e "$d" ] && zramctl --reset "$d" 2>/dev/null || true
  done
  if [ -e /sys/class/zram-control/hot_remove ]; then
    for id in $(ls -d /sys/block/zram* 2>/dev/null | sed 's|.*/zram||' | sort -rn); do
      echo "$id" > /sys/class/zram-control/hot_remove 2>/dev/null || true
    done
  fi
  if [ ! -b /dev/zram0 ]; then
    if [ -e /sys/class/zram-control/hot_add ]; then
      cat /sys/class/zram-control/hot_add >/dev/null 2>&1 || true
    else
      modprobe -r zram 2>/dev/null || true
      modprobe zram num_devices=1 2>/dev/null || modprobe zram 2>/dev/null || true
    fi
  fi
  [ -b /dev/zram0 ] || return 1
  zramctl /dev/zram0 --size "${SIZE_MB}M" --algorithm "$ALGORITHM" 2>/dev/null || true
  if [ "$(cat /sys/block/zram0/disksize 2>/dev/null || echo 0)" = "0" ]; then
    echo "$ALGORITHM" > /sys/block/zram0/comp_algorithm 2>/dev/null || true
    echo $((SIZE_MB * 1024 * 1024)) > /sys/block/zram0/disksize 2>/dev/null \
      || echo "${SIZE_MB}M" > /sys/block/zram0/disksize || return 1
  fi
  mkswap /dev/zram0 >/dev/null || return 1
  swapon /dev/zram0 -p 100 2>/dev/null || swapon /dev/zram0 || return 1
  return 0
}
zram_apply
EOF
  chmod +x /etc/linux-toolbox/zram-apply.sh

  # 7. 写 systemd 服务并启用
  cat > /etc/systemd/system/zram-setup.service <<'EOF'
[Unit]
Description=ZRAM Setup
DefaultDependencies=no
After=local-fs.target
Before=swap.target
Conflicts=zramswap.service zram-config.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/linux-toolbox/zram-apply.sh

[Install]
WantedBy=multi-user.target
EOF
  systemctl daemon-reload
  systemctl enable --now zram-setup.service
  return 0
}
zram_setup_all

Debian11、12、13:

#!/bin/bash
# Debian 11/12/13 开机脚本:开启 ZRAM(默认物理内存50%),并设置开机自启
set -e
export DEBIAN_FRONTEND=noninteractive

if ! command -v zramctl >/dev/null 2>&1; then
  apt-get update -qq
  apt-get install -y -qq util-linux
fi

RAM_MB=$(awk '/^MemTotal:/ {printf "%d", $2/1024}' /proc/meminfo)
SIZE_MB=$((RAM_MB * 50 / 100))
[ "$SIZE_MB" -lt 64 ] && SIZE_MB=64

# 加载模块并选择可用的最高效算法
modprobe zram 2>/dev/null || true
if [ ! -b /dev/zram0 ] && [ -e /sys/class/zram-control/hot_add ]; then
  cat /sys/class/zram-control/hot_add >/dev/null 2>&1 || true
fi
ALGS=$(cat /sys/block/zram0/comp_algorithm 2>/dev/null | tr -d '[]')
ALG=lzo
for a in zstd lz4hc lz4 lzo-rle lzo; do
  echo " $ALGS " | grep -q " $a " && { ALG=$a; break; }
done

mkdir -p /etc/linux-toolbox /etc/modules-load.d
echo zram > /etc/modules-load.d/zram.conf
cat > /etc/linux-toolbox/zram.conf <<EOF
SIZE_MB=${SIZE_MB}
ALGORITHM=${ALG}
EOF

cat > /etc/linux-toolbox/zram-apply.sh <<'EOF'
#!/bin/bash
. /etc/linux-toolbox/zram.conf
SIZE_MB=${SIZE_MB:-512}
ALGORITHM=${ALGORITHM:-lzo}
modprobe zram 2>/dev/null || true
awk 'NR>1 && $1 ~ /zram/ {print $1}' /proc/swaps 2>/dev/null | while read d; do
  swapoff "$d" 2>/dev/null || true
done
for d in /dev/zram*; do
  [ -e "$d" ] && zramctl --reset "$d" 2>/dev/null || true
done
if [ -e /sys/class/zram-control/hot_remove ]; then
  for id in $(ls -d /sys/block/zram* 2>/dev/null | sed 's|.*/zram||' | sort -rn); do
    echo "$id" > /sys/class/zram-control/hot_remove 2>/dev/null || true
  done
fi
if [ ! -b /dev/zram0 ]; then
  if [ -e /sys/class/zram-control/hot_add ]; then
    cat /sys/class/zram-control/hot_add >/dev/null 2>&1 || true
  else
    modprobe -r zram 2>/dev/null || true
    modprobe zram num_devices=1 2>/dev/null || modprobe zram 2>/dev/null || true
  fi
fi
[ -b /dev/zram0 ] || exit 1
zramctl /dev/zram0 --size "${SIZE_MB}M" --algorithm "$ALGORITHM" 2>/dev/null || true
if [ "$(cat /sys/block/zram0/disksize 2>/dev/null || echo 0)" = "0" ]; then
  echo "$ALGORITHM" > /sys/block/zram0/comp_algorithm 2>/dev/null || true
  echo $((SIZE_MB * 1024 * 1024)) > /sys/block/zram0/disksize 2>/dev/null \
    || echo "${SIZE_MB}M" > /sys/block/zram0/disksize || exit 1
fi
mkswap /dev/zram0 >/dev/null
swapon /dev/zram0 -p 100 2>/dev/null || swapon /dev/zram0
EOF
chmod +x /etc/linux-toolbox/zram-apply.sh

cat > /etc/systemd/system/zram-setup.service <<'EOF'
[Unit]
Description=ZRAM Setup
DefaultDependencies=no
After=local-fs.target
Before=swap.target
Conflicts=zramswap.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/linux-toolbox/zram-apply.sh

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now zram-setup.service

Centos7.x、8Steam、8、9Steam、Alibaba-Cloud-Linux-3:

#!/bin/bash
# CentOS 7.x/8-Stream/9-Stream、Alibaba Cloud Linux 通用开机脚本
# 功能:开启 ZRAM(默认物理内存50%),并设置开机自启

zram_setup_all() {
  # 1. 确保 zramctl 存在(这些系统一般自带,兜底兼容 dnf/yum)
  if ! command -v zramctl >/dev/null 2>&1; then
    if command -v dnf >/dev/null 2>&1; then
      dnf install -y -q util-linux
    else
      yum install -y -q util-linux
    fi
  fi

  # 2. 加载 ZRAM 模块;系统不支持时直接结束
  if ! modprobe zram 2>/dev/null; then
    echo "当前系统缺少 ZRAM 内核模块,跳过配置"
    return 1
  fi

  # 3. 停用可能存在的 zram 服务,避免冲突(保险起见)
  for svc in zramswap.service zram-config.service swap-create@zram0.service; do
    systemctl disable --now "$svc" 2>/dev/null || true
  done

  # 4. 计算大小(内存50%)并选可用的最高效算法(7/8只有lzo,9/阿里云选zstd)
  RAM_MB=$(awk '/^MemTotal:/ {printf "%d", $2/1024}' /proc/meminfo)
  SIZE_MB=$((RAM_MB * 50 / 100))
  [ "$SIZE_MB" -lt 64 ] && SIZE_MB=64
  [ ! -b /dev/zram0 ] && [ -e /sys/class/zram-control/hot_add ] \
    && cat /sys/class/zram-control/hot_add >/dev/null 2>&1
  ALGS=$(cat /sys/block/zram0/comp_algorithm 2>/dev/null | tr -d '[]')
  ALG=lzo
  for a in zstd lz4hc lz4 lzo-rle lzo; do
    echo " $ALGS " | grep -q " $a " && { ALG=$a; break; }
  done

  # 5. 写配置
  mkdir -p /etc/linux-toolbox /etc/modules-load.d
  echo zram > /etc/modules-load.d/zram.conf
  printf 'SIZE_MB=%s\nALGORITHM=%s\n' "$SIZE_MB" "$ALG" > /etc/linux-toolbox/zram.conf

  # 6. 写开机应用脚本(同样不含 exit,用函数 return)
  cat > /etc/linux-toolbox/zram-apply.sh <<'EOF'
#!/bin/bash
# ZRAM 开机应用脚本(由开机脚本自动生成)
zram_apply() {
  . /etc/linux-toolbox/zram.conf
  SIZE_MB=${SIZE_MB:-512}
  ALGORITHM=${ALGORITHM:-lzo}
  modprobe zram 2>/dev/null || true
  awk 'NR>1 && $1 ~ /zram/ {print $1}' /proc/swaps 2>/dev/null | while read d; do
    swapoff "$d" 2>/dev/null || true
  done
  for d in /dev/zram*; do
    [ -e "$d" ] && zramctl --reset "$d" 2>/dev/null || true
  done
  if [ -e /sys/class/zram-control/hot_remove ]; then
    for id in $(ls -d /sys/block/zram* 2>/dev/null | sed 's|.*/zram||' | sort -rn); do
      echo "$id" > /sys/class/zram-control/hot_remove 2>/dev/null || true
    done
  fi
  if [ ! -b /dev/zram0 ]; then
    if [ -e /sys/class/zram-control/hot_add ]; then
      cat /sys/class/zram-control/hot_add >/dev/null 2>&1 || true
    else
      modprobe -r zram 2>/dev/null || true
      modprobe zram num_devices=1 2>/dev/null || modprobe zram 2>/dev/null || true
    fi
  fi
  [ -b /dev/zram0 ] || return 1
  zramctl /dev/zram0 --size "${SIZE_MB}M" --algorithm "$ALGORITHM" 2>/dev/null || true
  if [ "$(cat /sys/block/zram0/disksize 2>/dev/null || echo 0)" = "0" ]; then
    echo "$ALGORITHM" > /sys/block/zram0/comp_algorithm 2>/dev/null || true
    echo $((SIZE_MB * 1024 * 1024)) > /sys/block/zram0/disksize 2>/dev/null \
      || echo "${SIZE_MB}M" > /sys/block/zram0/disksize || return 1
  fi
  mkswap /dev/zram0 >/dev/null || return 1
  swapon /dev/zram0 -p 100 2>/dev/null || swapon /dev/zram0 || return 1
  return 0
}
zram_apply
EOF
  chmod +x /etc/linux-toolbox/zram-apply.sh

  # 7. 写 systemd 服务并启用(用 /bin/bash 调起,规避 SELinux 对 /etc 下脚本的执行限制)
  cat > /etc/systemd/system/zram-setup.service <<'EOF'
[Unit]
Description=ZRAM Setup
DefaultDependencies=no
After=local-fs.target
Before=swap.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash /etc/linux-toolbox/zram-apply.sh

[Install]
WantedBy=multi-user.target
EOF
  systemctl daemon-reload
  systemctl enable --now zram-setup.service
  return 0
}
zram_setup_all

Rocky8.1、8.8、9.2:

#!/bin/bash
# Rocky Linux 8.x/9.x 通用开机脚本:开启 ZRAM(默认物理内存50%),并设置开机自启

zram_setup_all() {
  # 1. 确保 zramctl 存在(Rocky 一般自带,兜底安装)
  command -v zramctl >/dev/null 2>&1 || dnf install -y -q util-linux

  # 2. 加载 ZRAM 模块;系统不支持时直接结束
  if ! modprobe zram 2>/dev/null; then
    echo "当前系统缺少 ZRAM 内核模块,跳过配置"
    return 1
  fi

  # 3. 停用可能存在的 zram 服务,避免冲突(Rocky 一般没有,保险起见)
  for svc in zramswap.service zram-config.service swap-create@zram0.service; do
    systemctl disable --now "$svc" 2>/dev/null || true
  done

  # 4. 计算大小(内存50%)并选可用的最高效算法(8.x只有lzo,9.x会选中zstd)
  RAM_MB=$(awk '/^MemTotal:/ {printf "%d", $2/1024}' /proc/meminfo)
  SIZE_MB=$((RAM_MB * 50 / 100))
  [ "$SIZE_MB" -lt 64 ] && SIZE_MB=64
  [ ! -b /dev/zram0 ] && [ -e /sys/class/zram-control/hot_add ] \
    && cat /sys/class/zram-control/hot_add >/dev/null 2>&1
  ALGS=$(cat /sys/block/zram0/comp_algorithm 2>/dev/null | tr -d '[]')
  ALG=lzo
  for a in zstd lz4hc lz4 lzo-rle lzo; do
    echo " $ALGS " | grep -q " $a " && { ALG=$a; break; }
  done

  # 5. 写配置
  mkdir -p /etc/linux-toolbox /etc/modules-load.d
  echo zram > /etc/modules-load.d/zram.conf
  printf 'SIZE_MB=%s\nALGORITHM=%s\n' "$SIZE_MB" "$ALG" > /etc/linux-toolbox/zram.conf

  # 6. 写开机应用脚本(同样不含 exit,用函数 return)
  cat > /etc/linux-toolbox/zram-apply.sh <<'EOF'
#!/bin/bash
# ZRAM 开机应用脚本(由开机脚本自动生成)
zram_apply() {
  . /etc/linux-toolbox/zram.conf
  SIZE_MB=${SIZE_MB:-512}
  ALGORITHM=${ALGORITHM:-lzo}
  modprobe zram 2>/dev/null || true
  awk 'NR>1 && $1 ~ /zram/ {print $1}' /proc/swaps 2>/dev/null | while read d; do
    swapoff "$d" 2>/dev/null || true
  done
  for d in /dev/zram*; do
    [ -e "$d" ] && zramctl --reset "$d" 2>/dev/null || true
  done
  if [ -e /sys/class/zram-control/hot_remove ]; then
    for id in $(ls -d /sys/block/zram* 2>/dev/null | sed 's|.*/zram||' | sort -rn); do
      echo "$id" > /sys/class/zram-control/hot_remove 2>/dev/null || true
    done
  fi
  if [ ! -b /dev/zram0 ]; then
    if [ -e /sys/class/zram-control/hot_add ]; then
      cat /sys/class/zram-control/hot_add >/dev/null 2>&1 || true
    else
      modprobe -r zram 2>/dev/null || true
      modprobe zram num_devices=1 2>/dev/null || modprobe zram 2>/dev/null || true
    fi
  fi
  [ -b /dev/zram0 ] || return 1
  zramctl /dev/zram0 --size "${SIZE_MB}M" --algorithm "$ALGORITHM" 2>/dev/null || true
  if [ "$(cat /sys/block/zram0/disksize 2>/dev/null || echo 0)" = "0" ]; then
    echo "$ALGORITHM" > /sys/block/zram0/comp_algorithm 2>/dev/null || true
    echo $((SIZE_MB * 1024 * 1024)) > /sys/block/zram0/disksize 2>/dev/null \
      || echo "${SIZE_MB}M" > /sys/block/zram0/disksize || return 1
  fi
  mkswap /dev/zram0 >/dev/null || return 1
  swapon /dev/zram0 -p 100 2>/dev/null || swapon /dev/zram0 || return 1
  return 0
}
zram_apply
EOF
  chmod +x /etc/linux-toolbox/zram-apply.sh

  # 7. 写 systemd 服务并启用(用 /bin/bash 调起,规避 SELinux 对 /etc 下脚本的执行限制)
  cat > /etc/systemd/system/zram-setup.service <<'EOF'
[Unit]
Description=ZRAM Setup
DefaultDependencies=no
After=local-fs.target
Before=swap.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash /etc/linux-toolbox/zram-apply.sh

[Install]
WantedBy=multi-user.target
EOF
  systemctl daemon-reload
  systemctl enable --now zram-setup.service
  return 0
}
zram_setup_all

Fedora32、31、30:

#!/bin/bash
# Fedora 通用开机脚本(32 及更新版本):开启 ZRAM(默认物理内存50%),并设置开机自启
# 注意:全程不使用 exit 关键字(部分面板会过滤),统一用函数 return

zram_setup_all() {
  # 1. 确保 zramctl 存在(Fedora 自带,兜底安装)
  command -v zramctl >/dev/null 2>&1 || dnf install -y -q util-linux

  # 2. 加载 ZRAM 模块;系统不支持时直接结束
  if ! modprobe zram 2>/dev/null; then
    echo "当前系统缺少 ZRAM 内核模块,跳过配置"
    return 1
  fi

  # 3. 压制 Fedora 33+ 自带的 zram-generator,避免和本脚本抢设备
  #    写一个空配置到 /etc/systemd 可覆盖 /usr/lib/systemd 的默认配置
  if [ -f /usr/lib/systemd/zram-generator.conf ] || rpm -q zram-generator-defaults >/dev/null 2>&1; then
    : > /etc/systemd/zram-generator.conf
  fi
  for svc in swap-create@zram0.service zramswap.service zram-config.service dev-zram0.swap; do
    systemctl disable --now "$svc" 2>/dev/null || true
  done
  # 若自带的 zram swap 已挂上,先卸掉
  awk 'NR>1 && $1 ~ /zram/ {print $1}' /proc/swaps 2>/dev/null | while read d; do
    swapoff "$d" 2>/dev/null || true
  done

  # 4. 计算大小(内存50%)并选可用的最高效算法(Fedora 会选中 zstd)
  RAM_MB=$(awk '/^MemTotal:/ {printf "%d", $2/1024}' /proc/meminfo)
  SIZE_MB=$((RAM_MB * 50 / 100))
  [ "$SIZE_MB" -lt 64 ] && SIZE_MB=64
  [ ! -b /dev/zram0 ] && [ -e /sys/class/zram-control/hot_add ] \
    && cat /sys/class/zram-control/hot_add >/dev/null 2>&1
  ALGS=$(cat /sys/block/zram0/comp_algorithm 2>/dev/null | tr -d '[]')
  ALG=lzo
  for a in zstd lz4hc lz4 lzo-rle lzo; do
    echo " $ALGS " | grep -q " $a " && { ALG=$a; break; }
  done

  # 5. 写配置
  mkdir -p /etc/linux-toolbox /etc/modules-load.d
  echo zram > /etc/modules-load.d/zram.conf
  printf 'SIZE_MB=%s\nALGORITHM=%s\n' "$SIZE_MB" "$ALG" > /etc/linux-toolbox/zram.conf

  # 6. 写开机应用脚本(同样不含 exit,用函数 return)
  cat > /etc/linux-toolbox/zram-apply.sh <<'EOF'
#!/bin/bash
# ZRAM 开机应用脚本(由开机脚本自动生成)
zram_apply() {
  . /etc/linux-toolbox/zram.conf
  SIZE_MB=${SIZE_MB:-512}
  ALGORITHM=${ALGORITHM:-lzo}
  modprobe zram 2>/dev/null || true
  awk 'NR>1 && $1 ~ /zram/ {print $1}' /proc/swaps 2>/dev/null | while read d; do
    swapoff "$d" 2>/dev/null || true
  done
  for d in /dev/zram*; do
    [ -e "$d" ] && zramctl --reset "$d" 2>/dev/null || true
  done
  if [ -e /sys/class/zram-control/hot_remove ]; then
    for id in $(ls -d /sys/block/zram* 2>/dev/null | sed 's|.*/zram||' | sort -rn); do
      echo "$id" > /sys/class/zram-control/hot_remove 2>/dev/null || true
    done
  fi
  if [ ! -b /dev/zram0 ]; then
    if [ -e /sys/class/zram-control/hot_add ]; then
      cat /sys/class/zram-control/hot_add >/dev/null 2>&1 || true
    else
      modprobe -r zram 2>/dev/null || true
      modprobe zram num_devices=1 2>/dev/null || modprobe zram 2>/dev/null || true
    fi
  fi
  [ -b /dev/zram0 ] || return 1
  zramctl /dev/zram0 --size "${SIZE_MB}M" --algorithm "$ALGORITHM" 2>/dev/null || true
  if [ "$(cat /sys/block/zram0/disksize 2>/dev/null || echo 0)" = "0" ]; then
    echo "$ALGORITHM" > /sys/block/zram0/comp_algorithm 2>/dev/null || true
    echo $((SIZE_MB * 1024 * 1024)) > /sys/block/zram0/disksize 2>/dev/null \
      || echo "${SIZE_MB}M" > /sys/block/zram0/disksize || return 1
  fi
  mkswap /dev/zram0 >/dev/null || return 1
  swapon /dev/zram0 -p 100 2>/dev/null || swapon /dev/zram0 || return 1
  return 0
}
zram_apply
EOF
  chmod +x /etc/linux-toolbox/zram-apply.sh

  # 7. 写 systemd 服务并启用(用 /bin/bash 调起,规避 SELinux 对 /etc 下脚本的执行限制)
  cat > /etc/systemd/system/zram-setup.service <<'EOF'
[Unit]
Description=ZRAM Setup
DefaultDependencies=no
After=local-fs.target
Before=swap.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash /etc/linux-toolbox/zram-apply.sh

[Install]
WantedBy=multi-user.target
EOF
  systemctl daemon-reload
  systemctl enable --now zram-setup.service
  return 0
}
zram_setup_all
注意 1 本网站名称:日出资源网
2 本站永久域名:www.rnmcnm.com
3 如图片或链接或内容失效等问题请联系站长或评论区留言,我每天都在线以效率为主更新~
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像-日出资源网
欢迎您留下宝贵的见解!
提交
头像-日出资源网

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容