feat(zram): 优化 zram 状态显示逻辑并支持多设备数据汇总
This commit is contained in:
+52
-14
@@ -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 "==================================="
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user