Файловая система ext4 умеет уменьшаться штатно, при условии, что на разделе достаточно свободного места. В этом ее большое отличие от xfs, которая сжиматься не умеет вообще. Но есть важное ограничение: уменьшение ext4 возможно только в размонтированном виде. На живой системе это не работает.
Если нужно уменьшить корневой раздел, без перезагрузки не обойтись.
▪️ Классический способ. В идеальном мире вы загружаетесь с LiveCD, монтируете нужный раздел и выполняете:
/sbin/resize2fs /dev/sda1 40G
Файловая система на
/dev/sda1 будет уменьшена до 40 ГБ, при условии, что данных там меньше этого объема. Перед и после операции настоятельно рекомендуется проверить файловую систему:
/sbin/e2fsck -yf /dev/sda1
Если раздел смонтирован, ничего не получится:
resize2fs: On-line shrinking not supported
e2fsck: Cannot continue, aborting.
▪️ А если LiveCD недоступен? Вот тут начинается самое интересное. resize2fs можно выполнить из initramfs, то есть еще до загрузки основной системы. По сути, мы превращаем initramfs в мини-LiveCD.
1️⃣ Добавляем утилиты в initramfs. Создаем исполняемый файл
/etc/initramfs-tools/hooks/resizefs:
#!/bin/sh
set -e
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs
2️⃣ Добавляем скрипт выполнения. Создаем исполняемый файл
/etc/initramfs-tools/scripts/local-premount/resizefs:
#!/bin/sh
set -e
/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 40G
/sbin/e2fsck -yf /dev/sda1
3️⃣ Пересобираем initramfs. Смотрим доступные ядра:
ls /boot | grep config
И пересобираем образ, например для последнего ядра:
update-initramfs -u -k 6.1.0-22-amd64
После этого перезагружаемся. Процесс будет выполнен до монтирования root, а значит безопасно с точки зрения блокировок. Если что-то пойдет не так, всегда можно загрузиться с другого ядра, где initramfs не трогали.
#ext4 #filesystems
🧑💻 NetworkAdmin