Чи можливо в режимі он-лайн зменшити об'єм EXT4 за допомогою LVM?


47

Сьогодні я спробував це на своїй машині з 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.

Це справді непідтримується, або я щось пропускаю?

Відповіді:


68

Як сказано в повідомленні, ви можете вирощувати лише файлову систему в режимі он-лайн. Якщо ви хочете його скоротити, вам потрібно спочатку його відключити.

За словами сервісного сервера файлової системи ext4 , Тед Цьо:

На жаль, он-лайн скорочення не підтримується.


12
Шкода ...
Алісія

5
Що з головою?
Майкл Хемптон

16
@MichaelHampton - якийсь дебіл, який відстрілює месенджера? : D
тинк

2
Це було 10 років тому. Це вже реалізовано?
duane

@duane Ні. Це не так. Це, ймовірно, ніколи не буде.
Майкл Хемптон

17

Так, ви можете зменшити / перемістити / виростити кореневий розділ без перезавантаження (ні livecd, ні usbkey): зверніться до цієї відповіді . Це дуже добре написано і легко дотримуватися, хоча досить довго і трохи ризиковано.

resize2fs не може скоротити онлайн- ext4розділи . Це обмеження при застосуванні до кореневого розділу може призвести до того, що ви не можете уникнути перезавантаження хоста, щоб дозволити скорочення rootрозділу, що ви можете уникнути. Зв'язаний процес дозволить вам виконувати бездротове завантаження кореневого розділу. Таким чином , в цьому світлі, строго кажучи , онлайн зміна розміру в ставленні до державі розділу встановлено, проте він залишається онлайн зміна розмірів щодо мережі Інтернет статусу або досяжності хоста.

Звичайно, якщо ви хочете лише виростити свій розділ ext4, вам слід дотримуватися звичайних робочих resize2fsрішень.

Загальне рішення, яке я пов’язую, працюватиме, наприклад, на будь-якому виді виділеного рішення або VPS.

TLDR; це рішення має на увазі , pivot_rootщоб tmpfsтаким чином ви можете umountбезпечно кореневий розділ жити і возитися з ним. Після завершення роботи ви pivot_rootповернетесь до нового кореневого розділу.

Це дозволяє майже будь-які маніпуляції з кореневою файловою системою (перемістити її, змінити файлову систему, змінивши її фізичний пристрій ...).

Я особисто це використовував, і він дуже добре працює і на системі debian, але спочатку керівництво було написано в 2007 році для redhat, відповідь, яку я пов’язував, була оновлена ​​для CentOS7. Цілком ймовірно, що він буде працювати на вашому OpenSUSE, хоча, ймовірно, з певною адаптацією.


4
Це не "онлайн" щодо порівняння з "ростом в Інтернеті". Усі служби повинні бути вимкнені, і ваша коренева файлова система стає недоступною. Можливо, варто порівняти це з підходом livecd або initramfs / rdshell у цьому коментарі. Мені б не хотілося, щоб люди були збентежені цим.
Брайан Крісман

2
@BrianChrisman Це справді ґетча, яка заслуговує на роз'яснення, і що я сподіваюся, що я поширився з редагуванням у своєму дописі. Велике спасибі за відгуки.
vaab

Що мені подобається у посиланні на рішення, що це «майже в Інтернеті». Я зробив цю конкретну справу, кодувавши невеликий скрипт та інструменти в команді dracut та запустивши результуючі initramfs від kexec. Якби це могло якось тримати відкритий сеанс ssh через процес, це було б найкраще. Я вважаю, що якщо ви будуєте підроблений корінь з sshd та потрібними файлами, запускайте інший sshd (тому що ви входили в ssh'd) на іншому порту, тоді ви можете перевірити ssh на інший порт і перевірити підключення, перш ніж продовжувати лоботомізувати систему.
Брайан Крісман

13

Якщо випадок - це віддалений сервер без консолі, ви можете зменшити файлову систему за допомогою 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 / script / 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, перезавантажте, перевірте розмір, видаліть ці сценарії та update-intiramfs знову.

Для малювання (Fedora, CentOS) використовуйте ту саму логіку (/usr/lib/dracut/modules.d).

Це дуже корисно для скріптування або переміщення кореневих файлів, не маючи вільного місця для нового розділу.


2
Це працює як шарм. Зауважте, що вам потрібно запустити update-initramfs з опцією -u.
Діомідіс Спінеліс

Класно. У моєму випадку мені теж потрібно було update-grub.
Войцех Качмарек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.