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