Этот скрипт добавит нужные утилиты в initramfs (e2fsck, resize2fs, lvm):
cat << 'EOF' > /etc/initramfs-tools/hooks/resizefs
#!/bin/sh
PREREQ=""
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs
copy_exec /sbin/lvm
EOF
chmod +x /etc/initramfs-tools/hooks/resizefs
cat << 'EOF' > /etc/initramfs-tools/scripts/local-premount/resizefs
#!/bin/sh
set -e
# Флаг, чтобы не выполнять повторно
if [ -e /run/shrink-done ]; then
echo "[shrink-root] Already done"
exit 0
fi
echo "[shrink-root] Starting shrink..."
# Проверка и уменьшение ext4 ФС
e2fsck -fy /dev/mapper/pve-root
resize2fs /dev/mapper/pve-root 10G
# Уменьшение LVM тома
lvm lvreduce -L 10G -y /dev/pve/root
# Флаг выполнения
touch /run/shrink-done
echo "[shrink-root] Done."
EOF
chmod +x /etc/initramfs-tools/scripts/local-premount/resizefs
⚠️ Важно: мы кладём скрипт в scripts/local-premount/, потому что этот этап запускается до монтирования root — только тогда безопасно делать resize2fs.
update-initramfs -u
Проверь, что скрипт реально попал:
lsinitramfs /boot/initrd.img-$(uname -r) | grep resizefs
вы выводе должно быть
scripts/local-premount/resizefs
После загрузки проверь:
lsblk
lvs
df -h /
Ты должен увидеть:
rm /etc/initramfs-tools/hooks/resizefs
rm /etc/initramfs-tools/scripts/local-premount/resizefs
update-initramfs -u
🔁 Если хочешь уменьшить до другого размера, просто поменяй 10G на нужное значение в обоих местах:
resize2fs /dev/mapper/pve-root 10G
lvm lvreduce -L 10G -y /dev/pve/root
🛟 Если что-то пойдёт не так
Помог с этим чатгпт
Проверено на двух инстансах проксмос 8.4.1
на одном все было отлично, на втором df -h / показывал правильный размер, а вот lsblk нет. то есть размер лвм тома не изменился
вылечилось запуском
lvreduce -L 10G /dev/mapper/pve-root
прямо на работающем проксмокс