feat(zram): 优化 zram 状态显示逻辑并支持多设备数据汇总

This commit is contained in:
严浩
2026-03-23 10:54:52 +08:00
parent b1cea78d4a
commit 88603904c0
+52 -14
View File
@@ -7,27 +7,65 @@
show_zram_status() { show_zram_status() {
echo "========== zram 运行战报 ==========" echo "========== zram 运行战报 =========="
# 获取 zram 信息并进行格式化处理
local stats=$(zramctl --raw --noheadings --output DATA,COMPR,TOTAL) if ! command -v zramctl >/dev/null 2>&1; then
echo "未安装 zramctl。"
return 1
fi
local table
table=$(zramctl --noheadings --output NAME,ALGORITHM,DISKSIZE,DATA,COMPR,TOTAL,COMP-RATIO,MOUNTPOINT 2>/dev/null || true)
if [ -z "$table" ]; then
echo "未发现活跃的 zram 设备。"
return 0
fi
printf '%s\n' "$table"
local stats
stats=$(zramctl --bytes --raw --noheadings --output DATA,COMPR,TOTAL 2>/dev/null || true)
if [ -z "$stats" ]; then if [ -z "$stats" ]; then
echo "未发现活跃的 zram 设备。" echo "未发现活跃的 zram 设备。"
return return 0
fi fi
# 提取数据 (单位通常是字节) local data_size compr_size total_mem saved_bytes ratio
local data_size=$(echo "$stats" | awk '{print $1}') # 存入的原始数据 read -r data_size compr_size total_mem <<EOF
local compr_size=$(echo "$stats" | awk '{print $2}') # 压缩后的大小 $(printf '%s\n' "$stats" | awk '{data += $1; compr += $2; total += $3} END {print data+0, compr+0, total+0}')
local total_mem=$(echo "$stats" | awk '{print $3}') # 实际占用的物理内存(含元数据) EOF
# 计算压缩率和节省空间 (转为 MB) if [ "$total_mem" -le 0 ]; then
local saved_mb=$(( (data_size - total_mem) / 1024 / 1024 )) echo "当前 zram 尚无可统计的数据。"
local ratio=$(awk "BEGIN {printf \"%.2f\", $data_size / $total_mem}") return 0
fi
echo "1. 原始数据量: $((data_size / 1024 / 1024)) MB" saved_bytes=$((data_size - total_mem))
echo "2. 实际占用内存: $((total_mem / 1024 / 1024)) MB" if [ "$saved_bytes" -lt 0 ]; then
echo "3. 压缩倍率: ${ratio}x" saved_bytes=0
echo "4. 为系统节省了: **${saved_mb} MB** 物理内存" fi
ratio=$(awk -v data="$data_size" -v total="$total_mem" 'BEGIN { printf "%.2f", data / total }')
format_bytes() {
awk -v bytes="$1" 'BEGIN {
split("B KiB MiB GiB TiB PiB", units, " ")
idx = 1
while (bytes >= 1024 && idx < 6) {
bytes /= 1024
idx++
}
printf "%.2f %s", bytes, units[idx]
}'
}
echo "----------- 汇总 -----------"
echo "1. 原始数据量: $(format_bytes "$data_size")"
echo "2. 压缩后大小: $(format_bytes "$compr_size")"
echo "3. 实际占用内存: $(format_bytes "$total_mem")"
echo "4. 压缩倍率: ${ratio}x"
echo "5. 为系统节省了: $(format_bytes "$saved_bytes") 物理内存"
echo "===================================" echo "==================================="
} }