@@ -137,6 +137,7 @@ jobs:
137137 sudo swapoff -a && sudo rm -f /swapfile /mnt/swapfile
138138 sudo -E apt-get -y purge azure-cli ghc* zulu* llvm* firefox google* dotnet* powershell openjdk* mongodb* moby* || true
139139 sudo -E apt-get -y update
140+ sudo -E apt-get -y install lvm2 btrfs-progs
140141 sudo -E apt-get -y install $(curl -fsSL is.gd/depends_ubuntu_2404)
141142 sudo -E systemctl daemon-reload
142143 sudo -E apt-get -y autoremove --purge
@@ -145,18 +146,43 @@ jobs:
145146
146147 - name : Combine Disks
147148 run : |
148- MNT_SIZE=$((($(df --block-size=1024 --output=avail /mnt | tail -1) - 1024*1024*1) * 1024))
149- sudo fallocate -l $MNT_SIZE /mnt/mnt.img
149+ # 仅修复核心错误:解决fallocate无效长度问题
150+ # 1. 定义安全计算函数(避免负数/非数值)
151+ calculate_safe_size() {
152+ local mount_point=$1
153+ local reserve_mb=$2
154+ # 获取可用空间(KB),过滤非数字字符
155+ local avail_kb=$(df --block-size=1024 --output=avail "$mount_point" 2>/dev/null | tail -1 | tr -d '[:space:]')
156+ # 验证数值有效性
157+ if ! [[ "$avail_kb" =~ ^[0-9]+$ ]]; then
158+ echo "Error: 无法获取 $mount_point 的可用空间"
159+ exit 1
160+ fi
161+ # 计算目标大小(字节),最小值设为100MB
162+ local reserve_kb=$((reserve_mb * 1024))
163+ local target_kb=$((avail_kb - reserve_kb))
164+ [ $target_kb -lt 102400 ] && target_kb=102400
165+ echo $((target_kb * 1024))
166+ }
167+
168+ # 2. 安全计算大小 + 替换fallocate为truncate(核心修复)
169+ MNT_SIZE=$(calculate_safe_size "/mnt" 1024)
170+ sudo truncate -s $MNT_SIZE /mnt/mnt.img
150171 MNT_NAME=$(sudo losetup -Pf --show /mnt/mnt.img)
151172 sudo pvcreate -f $MNT_NAME
152- ROOT_SIZE=$((($(df --block-size=1024 --output=avail / | tail -1) - 1024*1024*4) * 1024))
153- sudo fallocate -l $ROOT_SIZE /root.img
173+
174+ ROOT_SIZE=$(calculate_safe_size "/" 4096)
175+ sudo truncate -s $ROOT_SIZE /root.img
154176 ROOT_NAME=$(sudo losetup -Pf --show /root.img)
155177 sudo pvcreate -f $ROOT_NAME
156- sudo vgcreate actions $MNT_NAME $ROOT_NAME
178+
179+ # 3. 原逻辑保留,仅新增卷组创建容错
180+ sudo vgcreate actions $MNT_NAME $ROOT_NAME || {
181+ sudo vgremove -f actions && sudo vgcreate actions $MNT_NAME $ROOT_NAME
182+ }
157183 sudo lvcreate -n disk -l 100%FREE actions
158184 LV_NAME=$(sudo lvscan | awk -F "'" '{print $2}')
159- sudo mkfs.btrfs -L combinedisk $LV_NAME
185+ sudo mkfs.btrfs -f - L combinedisk $LV_NAME
160186 sudo mkdir -p /workdir
161187 sudo mount -o compress=zstd $LV_NAME /workdir
162188 sudo chown -R runner:runner /workdir && df -hT
0 commit comments