fnos: 用 parted 创建系统分区时,末端设为 100%,安装系统后再缩小

解决系统盘设为 8G 时空间不足 #585
This commit is contained in:
bin456789
2026-03-25 19:22:34 +08:00
parent f0fc83a060
commit e93d71680c

View File

@ -2621,9 +2621,6 @@ create_part() {
mkfs.ntfs -f -F -L installer "/dev/$(xda 2)" #2 installer mkfs.ntfs -f -F -L installer "/dev/$(xda 2)" #2 installer
fi fi
elif [ "$distro" = fnos ]; then elif [ "$distro" = fnos ]; then
# 先用 100% 分区安装后再缩小没意义,因为小硬盘用 100% 还是装不了
# 因此直接用用户输入的分区大小
# 1. 官方安装器对系统盘大小的定义包含引导分区大小 # 1. 官方安装器对系统盘大小的定义包含引导分区大小
# 2. 官方 efi 用的是 1MiB-100M但我们用 1MiB-101MiB # 2. 官方 efi 用的是 1MiB-100M但我们用 1MiB-101MiB
@ -2655,19 +2652,25 @@ create_part() {
# The location 20480MiB is outside of the device /dev/vda. # The location 20480MiB is outside of the device /dev/vda.
# 但是 100% 分区后 end 就是 20480MiB # 但是 100% 分区后 end 就是 20480MiB
os_part_end=${expect_m}MiB
if [ "$expect_m" -ge "$max_can_use_m" ]; then if [ "$expect_m" -ge "$max_can_use_m" ]; then
echo "Expect size is equal/greater than max size. Setting to 100%" warn "Expect size is equal/greater than max size. Uses max size."
os_part_end=100% NEED_SHRINK_FNOS_OS_PART=false
FNOS_OS_PART_END_M=$max_can_use_m
else
NEED_SHRINK_FNOS_OS_PART=true
FNOS_OS_PART_END_M=$expect_m
fi fi
# 需关闭这几个特性,否则 grub 无法识别 # fnos 的 grub 是 debian 11 的
# 需关闭 metadata_csum_seed否则 grub 会进入 grub rescue 模式,但 efi 下一切正常
# orphan_file 不需要关,但是官方安装器安装的系统分区没有这个特性,因此我们也关闭它
ext4_opts="-O ^metadata_csum_seed,^orphan_file" ext4_opts="-O ^metadata_csum_seed,^orphan_file"
if is_efi; then if is_efi; then
parted /dev/$xda -s -- \ parted /dev/$xda -s -- \
mklabel gpt \ mklabel gpt \
mkpart BOOT fat32 1MiB 101MiB \ mkpart BOOT fat32 1MiB 101MiB \
mkpart SYSTEM ext4 101MiB $os_part_end \ mkpart SYSTEM ext4 101MiB 100% \
set 1 esp on set 1 esp on
update_part update_part
@ -2679,7 +2682,7 @@ create_part() {
parted /dev/$xda -s -- \ parted /dev/$xda -s -- \
mklabel gpt \ mklabel gpt \
mkpart BOOT ext4 1MiB 101MiB \ mkpart BOOT ext4 1MiB 101MiB \
mkpart SYSTEM ext4 101MiB $os_part_end \ mkpart SYSTEM ext4 101MiB 100% \
set 1 bios_grub on set 1 bios_grub on
update_part update_part
@ -2690,7 +2693,7 @@ create_part() {
parted /dev/$xda -s -- \ parted /dev/$xda -s -- \
mklabel msdos \ mklabel msdos \
mkpart primary 1MiB 101MiB \ mkpart primary 1MiB 101MiB \
mkpart primary 101MiB $os_part_end \ mkpart primary 101MiB 100% \
set 2 boot on set 2 boot on
update_part update_part
@ -4518,6 +4521,36 @@ install_fnos() {
# 删除 installer (trimfs.tgz) # 删除 installer (trimfs.tgz)
rm -rf /os/installer rm -rf /os/installer
# 缩小分区
if $NEED_SHRINK_FNOS_OS_PART; then
info "Shrink fnos os partition"
# 取消挂载
if is_efi; then
umount /os/boot/efi
fi
umount /os
# 101M 是 efi + bios_grub 分区,即使 bios 引导飞牛官方安装器也会生成一个 100M 预留分区
# 99M 是预留的文件系统和分区表的差值
# 一共 200M
apk add e2fsprogs-extra parted
e2fsck -p -f "/dev/$(xda 2)"
resize2fs "/dev/$(xda 2)" "$((FNOS_OS_PART_END_M - 200))M"
update_part
printf "yes" | parted /dev/$xda resizepart 2 "$((FNOS_OS_PART_END_M))MiB" ---pretend-input-tty
update_part
resize2fs "/dev/$(xda 2)"
update_part
apk del e2fsprogs-extra parted
# 重新挂载
mount "/dev/$(xda 2)" /os
if is_efi; then
mount -o "$(echo "$fstab_line_efi" | awk '{print $4}')" "/dev/$(xda 1)" /os/boot/efi
fi
fi
# 挂载 proc sys dev # 挂载 proc sys dev
mount_pseudo_fs /os mount_pseudo_fs /os