Назад | Перейти на главную страницу

Можно ли в режиме онлайн сжать том EXT4 с помощью LVM?

Сегодня я попробовал это на своей машине с OpenSUSE 12.3 (ядро 3.7):

# resize2fs /dev/mapper/system-srv 2G
resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mapper/system-srv is mounted on /srv; on-line resizing required
resize2fs: On-line shrinking not supported

/dev/mapper/system-srv это том EXT4.

Это действительно не поддерживается или мне что-то не хватает?

Как сказано в сообщении, вы можете только расти файловая система ext4 в режиме онлайн. Если вы хотите уменьшить его, вам нужно сначала размонтировать его.

По словам сопровождающего файловой системы ext4, Тед Ц'О:

К сожалению, онлайн-сжатие не поддерживается.

Да, вы можете сжимать / перемещать / увеличивать корневой раздел без перезагрузки (ни livecd, ни usbkey): проконсультируйтесь с этим ответом. Он очень хорошо написан, и ему легко следовать, хотя он довольно длинный и немного рискованный.

resize2fs не может сжиматься онлайн ext4 перегородки. Это ограничение при применении к корневому разделу может заставить вас подумать, что вы не можете избежать перезагрузки хоста, чтобы разрешить сжатие root раздел, чего вы, возможно, захотите избежать. Связанный процесс позволит вам размонтировать корневой раздел без перезагрузки. Так что в этом свете это, строго говоря, не онлайн изменение размера в отношении смонтированного состояния раздела, однако остается изменение размера в режиме онлайн в отношении сетевого статуса или доступности хоста.

Конечно, если вы хотите увеличить только свой раздел ext4, вам следует придерживаться обычного рабочего resize2fs решения.

Общее решение, которое я связал, будет работать, например, с любым типом выделенного решения или VPS.

TL; DR; это решение подразумевает pivot_root к tmpfs так что вы можете umount безопасно ваш корневой раздел живи и возиться с ним. После этого вы pivot_root обратно в свой новый корневой раздел.

Это позволяет практически любые манипуляции с корневой файловой системой (переместить ее, изменить файловую систему, изменить ее физическое устройство ...).

Я лично использовал это, и он также очень хорошо работает в системе debian, но руководство было изначально написано в 2007 году для redhat, ответ, который я дал, был обновлен для CentOS7. Очень вероятно, что он будет работать на вашем OpenSUSE, хотя, вероятно, с некоторой адаптацией.

Если дело касается удаленного сервера без консоли, вы можете сжать файловую систему с помощью initramfs при перезагрузке. Вам нужно добавить resize2fs в initramfs и запустить его перед монтированием root.

Пример Debian / Ubuntu:

/ etc / initramfs-tools / hooks / resizefs (исполняемый файл):

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case $1 in
    prereqs)
        prereqs
        exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs

exit 0

/ etc / initramfs-tools / scripts / local-premount / resizefs (исполняемый файл)

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case "$1" in
    prereqs)
        prereqs
        exit 0
    ;;
esac

/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 5G
/sbin/e2fsck -yf /dev/sda1

Теперь запустите update-initramfs, перезагрузитесь, проверьте размер, удалите эти скрипты и снова обновите intiramfs.

Для dracut (Fedora, CentOS) используйте ту же логику (/usr/lib/dracut/modules.d).

Это очень полезно для шифрования или перемещения файлов rootfs, когда для нового раздела нет свободного места.