From 29023e0f44dab002abfd8cf65634b2b5718f50b0 Mon Sep 17 00:00:00 2001 From: bin456789 Date: Fri, 22 Aug 2025 22:47:15 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E4=BF=AE=E5=A4=8D=20wmic=20memorychip?= =?UTF-8?q?=20=E8=8E=B7=E5=8F=96=E7=9A=84=E5=86=85=E5=AD=98=E4=B8=BA=200?= =?UTF-8?q?=20=E6=97=B6=E6=97=A0=E6=B3=95=E7=94=A8=20/proc/meminfo=20?= =?UTF-8?q?=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #417 --- reinstall.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/reinstall.sh b/reinstall.sh index 82b38d9..e2b5aa0 100644 --- a/reinstall.sh +++ b/reinstall.sh @@ -2107,6 +2107,10 @@ install_pkg() { done >&2 } +is_valid_ram_size() { + is_digit "$1" && [ "$1" -gt 0 ] +} + check_ram() { ram_standard=$( case "$distro" in @@ -2134,7 +2138,7 @@ check_ram() { ) if is_in_windows; then - ram_size=$(wmic memorychip get capacity | awk -F= '{sum+=$2} END {print sum/1024/1024}') + ram_size=$(wmic memorychip get capacity | awk -F= '{sum+=$2} END {if(sum>0) print sum/1024/1024}') else # lsmem最准确但 centos7 arm 和 alpine 不能用,debian 9 util-linux 没有 lsmem # arm 24g dmidecode 显示少了128m @@ -2143,12 +2147,12 @@ check_ram() { install_pkg lsmem ram_size=$(lsmem -b 2>/dev/null | grep 'Total online memory:' | awk '{ print $NF/1024/1024 }') - if [ -z $ram_size ]; then + if ! is_valid_ram_size "$ram_size"; then install_pkg dmidecode - ram_size=$(dmidecode -t 17 | grep "Size.*[GM]B" | awk '{if ($3=="GB") s+=$2*1024; else s+=$2} END {print s}') + ram_size=$(dmidecode -t 17 | grep "Size.*[GM]B" | awk '{if ($3=="GB") s+=$2*1024; else s+=$2} END {if(s>0) print s}') fi - if [ -z $ram_size ]; then + if ! is_valid_ram_size "$ram_size"; then install_pkg lshw # 不能忽略 -i,alpine 显示的是 System memory ram_str=$(lshw -c memory -short | grep -i 'System Memory' | awk '{print $3}') @@ -2159,12 +2163,12 @@ check_ram() { # 用于兜底,不太准确 # cygwin 要装 procps-ng 才有 free 命令 - if [ -z $ram_size ]; then + if ! is_valid_ram_size "$ram_size"; then ram_size_k=$(grep '^MemTotal:' /proc/meminfo | awk '{print $2}') ram_size=$((ram_size_k / 1024 + 64 + 4)) fi - if [ -z $ram_size ] || [ $ram_size -le 0 ]; then + if ! is_valid_ram_size "$ram_size"; then error_and_exit "Could not detect RAM size." fi