debug
This commit is contained in:
52
src/main.sh
52
src/main.sh
@@ -179,7 +179,7 @@ detect_lvm() {
|
||||
# 二次检测:通过 lsblk 查看 TYPE
|
||||
if [[ "$LVM_DETECTED" == false ]]; then
|
||||
local root_type
|
||||
root_type=$(lsblk -no TYPE "$ROOT_DEVICE" 2>/dev/null | head -1)
|
||||
root_type=$(lsblk -no TYPE "$ROOT_DEVICE" 2>/dev/null | head -1) || true
|
||||
if [[ "$root_type" == "lvm" ]]; then
|
||||
LVM_DETECTED=true
|
||||
info "检测到 LVM 架构(通过 lsblk)"
|
||||
@@ -198,7 +198,7 @@ get_disk_for_partition() {
|
||||
local part="$1"
|
||||
# 通过 lsblk 获取父级磁盘设备
|
||||
local disk
|
||||
disk=$(lsblk -no PKNAME "$part" 2>/dev/null | head -1)
|
||||
disk=$(lsblk -no PKNAME "$part" 2>/dev/null | head -1) || true
|
||||
if [[ -z "$disk" ]]; then
|
||||
die "无法获取 $part 的父级磁盘设备"
|
||||
fi
|
||||
@@ -212,10 +212,10 @@ get_partition_number() {
|
||||
local part="$1"
|
||||
# 从设备名提取分区号,如 /dev/sda1 -> 1, /dev/vda2 -> 2
|
||||
local num
|
||||
num=$(echo "$part" | grep -oP '\d+$')
|
||||
num=$(echo "$part" | grep -oP '\d+$') || true
|
||||
if [[ -z "$num" ]]; then
|
||||
# 尝试 p 分隔格式,如 /dev/mmcblk0p1 -> 1
|
||||
num=$(echo "$part" | grep -oP 'p\K\d+$')
|
||||
num=$(echo "$part" | grep -oP 'p\K\d+$') || true
|
||||
fi
|
||||
if [[ -z "$num" ]]; then
|
||||
die "无法从 $part 提取分区号"
|
||||
@@ -238,11 +238,11 @@ print_disk_status() {
|
||||
if [[ "$LVM_DETECTED" == true ]]; then
|
||||
info "--- LVM 信息 ---"
|
||||
info "物理卷 (PV):"
|
||||
pvs 2>/dev/null | tee -a "$LOG_FILE"
|
||||
{ pvs 2>/dev/null || true; } | tee -a "$LOG_FILE"
|
||||
info "卷组 (VG):"
|
||||
vgs 2>/dev/null | tee -a "$LOG_FILE"
|
||||
{ vgs 2>/dev/null || true; } | tee -a "$LOG_FILE"
|
||||
info "逻辑卷 (LV):"
|
||||
lvs 2>/dev/null | tee -a "$LOG_FILE"
|
||||
{ lvs 2>/dev/null || true; } | tee -a "$LOG_FILE"
|
||||
echo ""
|
||||
fi
|
||||
info "===================================="
|
||||
@@ -260,17 +260,21 @@ check_expandable_space() {
|
||||
}
|
||||
|
||||
#---------------------------------------
|
||||
# 安全提取数值(去除小数部分,兼容 set -e)
|
||||
# 安全提取数值(去除小数/前缀/后缀,兼容 set -e)
|
||||
#---------------------------------------
|
||||
parse_int() {
|
||||
# 从字符串中提取整数部分,忽略小数和后缀
|
||||
# 输入: "8217.60" / "8.22g" / " 100 " 等
|
||||
# 输出: 纯整数字符串,如 "8217" / "8" / "100"
|
||||
# 从字符串中提取整数部分
|
||||
# 输入: "8217.60" / "<19.00" / "8.22g" / " 100 " / "0" 等
|
||||
# 输出: 纯整数字符串,如 "8217" / "19" / "8" / "100" / "0"
|
||||
local val="$1"
|
||||
# 去除首尾空格
|
||||
val=$(echo "$val" | xargs)
|
||||
# 提取整数部分(兼容小数点)
|
||||
echo "$val" | awk '{printf "%d", $1}'
|
||||
# 去除首尾空格、< > 前缀、非数字字符(保留小数点)
|
||||
val=$(echo "$val" | tr -d '<>' | sed 's/[^0-9.]//g')
|
||||
if [[ -z "$val" ]] || [[ "$val" == "." ]]; then
|
||||
echo "0"
|
||||
return
|
||||
fi
|
||||
# 用 awk 取整数部分
|
||||
echo "$val" | awk '{printf "%d", $1+0}'
|
||||
}
|
||||
|
||||
#---------------------------------------
|
||||
@@ -278,19 +282,19 @@ parse_int() {
|
||||
#---------------------------------------
|
||||
check_lvm_space() {
|
||||
# 获取根设备所在的 VG
|
||||
ROOT_VG=$(lvs -no vg_name "$ROOT_DEVICE" 2>/dev/null | xargs)
|
||||
ROOT_VG=$(lvs -no vg_name "$ROOT_DEVICE" 2>/dev/null | xargs) || true
|
||||
if [[ -z "$ROOT_VG" ]]; then
|
||||
die "无法获取根逻辑卷所在的卷组"
|
||||
fi
|
||||
info "根目录所在卷组 (VG): $ROOT_VG"
|
||||
|
||||
# 获取 VG 的可用空间(人类可读格式,用于显示)
|
||||
VG_FREE_HUMAN=$(vgs -no vg_free "$ROOT_VG" --units g --nosuffix 2>/dev/null | xargs)
|
||||
VG_FREE_HUMAN=$(vgs -no vg_free "$ROOT_VG" --units g --nosuffix 2>/dev/null | tr -d '<> ' ) || true
|
||||
info "卷组 $ROOT_VG 可用空间: ${VG_FREE_HUMAN}G"
|
||||
|
||||
# 检查 VG 是否有剩余空间(以 MB 为单位判断)
|
||||
local vg_free_raw
|
||||
vg_free_raw=$(vgs -no vg_free "$ROOT_VG" --units m --nosuffix 2>/dev/null)
|
||||
vg_free_raw=$(vgs -no vg_free "$ROOT_VG" --units m --nosuffix 2>/dev/null) || true
|
||||
VG_FREE_NUM=$(parse_int "$vg_free_raw")
|
||||
info "卷组可用空间: ${VG_FREE_NUM}MB"
|
||||
|
||||
@@ -299,9 +303,9 @@ check_lvm_space() {
|
||||
info "卷组可用空间不足,将检查是否需要扩展物理卷 (PV)..."
|
||||
expand_pv_if_needed
|
||||
# 重新获取可用空间
|
||||
vg_free_raw=$(vgs -no vg_free "$ROOT_VG" --units m --nosuffix 2>/dev/null)
|
||||
vg_free_raw=$(vgs -no vg_free "$ROOT_VG" --units m --nosuffix 2>/dev/null) || true
|
||||
VG_FREE_NUM=$(parse_int "$vg_free_raw")
|
||||
VG_FREE_HUMAN=$(vgs -no vg_free "$ROOT_VG" --units g --nosuffix 2>/dev/null | xargs)
|
||||
VG_FREE_HUMAN=$(vgs -no vg_free "$ROOT_VG" --units g --nosuffix 2>/dev/null | tr -d '<> ') || true
|
||||
if [[ -z "$VG_FREE_NUM" ]] || [[ "$VG_FREE_NUM" -lt 100 ]]; then
|
||||
die "卷组 $ROOT_VG 没有足够的可用空间进行扩容(需要至少 100MB)"
|
||||
fi
|
||||
@@ -316,7 +320,7 @@ check_lvm_space() {
|
||||
expand_pv_if_needed() {
|
||||
# 获取 VG 对应的 PV
|
||||
local pv_dev
|
||||
pv_dev=$(pvs -no pv_name "$ROOT_VG" 2>/dev/null | xargs)
|
||||
pv_dev=$(pvs -no pv_name "$ROOT_VG" 2>/dev/null | xargs) || true
|
||||
if [[ -z "$pv_dev" ]]; then
|
||||
die "无法获取卷组 $ROOT_VG 的物理卷"
|
||||
fi
|
||||
@@ -547,9 +551,9 @@ verify_result() {
|
||||
echo ""
|
||||
if [[ "$LVM_DETECTED" == true ]]; then
|
||||
info "--- LVM 信息 ---"
|
||||
pvs 2>/dev/null | tee -a "$LOG_FILE"
|
||||
vgs 2>/dev/null | tee -a "$LOG_FILE"
|
||||
lvs 2>/dev/null | tee -a "$LOG_FILE"
|
||||
{ pvs 2>/dev/null || true; } | tee -a "$LOG_FILE"
|
||||
{ vgs 2>/dev/null || true; } | tee -a "$LOG_FILE"
|
||||
{ lvs 2>/dev/null || true; } | tee -a "$LOG_FILE"
|
||||
echo ""
|
||||
fi
|
||||
info "===================================="
|
||||
|
||||
Reference in New Issue
Block a user