Как расширить раздел и файловую систему ext4?

Вопрос или проблема

У меня есть диск на 400 ГБ с разделом ext4 размером 320 ГБ. Я бы хотел расширить раздел ext4, чтобы использовать оставшееся пространство (80 ГБ свободного пространства).

+--------------------------------+--------+
|             ext4               |  Free  |
+--------------------------------+--------+

Как я могу это сделать?

Я видел, как люди используют resize2fs, но я не понимаю, уменьшает ли это раздел.

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

Примечание: я говорю об размонтированном разделе данных без LVM, и у меня есть резервные копии, но я бы хотел избежать траты времени на восстановление.

Вы должны начать с размонтированного раздела. Если вы не можете его размонтировать (например, это ваш корневой раздел или что-то еще, что нужно системе для работы), используйте что-то вроде System Rescue CD.

  1. Запустите parted или gparted, если предпочитаете GUI, и измените размер раздела, чтобы использовать дополнительное пространство. Я предпочитаю gparted, так как он предоставляет наглядное графическое представление, очень похожее на ваше, нарисованное в вопросе.

  2. resize2fs /dev/whatever

  3. e2fsck /dev/whatever (просто чтобы убедиться, что все в порядке)

  4. Снова смонтируйте ваш раздел.

Несмотря на то, что я никогда не видел, чтобы это не срабатывало, позаботьтесь о резервном копировании ваших данных заранее!

Использование growpart и resize2fs пример:

Обратите внимание на пробел между /dev/sda и 1 в случае growpart /dev/sda 1:

Это две команды:

growpart  /dev/sda 1
resize2fs /dev/sda1
$ growpart /dev/sda 1
CHANGED: partition=1 start=2048 old: size=39999455 end=40001503 new: size=80000991,end=80003039
$ resize2fs /dev/sda1
resize2fs 1.45.4 (23-Sep-2019)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 5
The filesystem on /dev/sda1 is now 10000123 (4k) blocks long.

Если это не работает, как ожидается, это может быть связано с расширенным разделом, в этом случае подойдет этот ответ: https://unix.stackexchange.com/a/687489/124109

Да, вы можете увеличить EXT4 fs онлайн, если у вас уже настроен раздел. У вас настроен раздел? У вас есть LVM?

sudo resize2fs /dev/диск_который_надо_увеличить

fdisk действительно изменит размер вашего раздела, но если это корневой раздел (или, фактически, любой смонтированный раздел), он сначала должен быть размонтирован. Так что, скорее всего, оффлайн!

Как и в случае со всем, что связано с операциями с диском/файловой системой, я настоятельно рекомендую иметь резервную копию и проверенный, хорошо понятный процесс восстановления.

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

Например, вы только что обновили ваш план и у вас есть что-то вроде:

Disk /dev/vda: 83886080s
Number  Start    End        Size       Type      File system  Flags
1      2048s    194559s    192512s    primary   ext2         boot
2      196606s  51197951s  51001346s  extended
5      196608s  51197951s  51001344s  logical   ext4

Здесь /dev/vda2 – это ваш контейнер расширенного раздела.
И /dev/vda5 – основной раздел, который нам нужно изменить, чтобы увеличить его до полного доступного пространства.

Самый простой способ:

apt-get -y install parted
parted /dev/vda unit s print all # напечатать текущее состояние на случай
parted /dev/vda resizepart 2 yes -- -1s # сначала измените размер /dev/vda2 
parted /dev/vda resizepart 5 yes -- -1s # измените размер /dev/vda5
partprobe /dev/vda # пере-произведите таблицу разделов
resize2fs /dev/vda5 # получите ваше пространство

Принятый ответ несколько устарел: изменение размера файловой системы ext4 лучше производить онлайн, чем оффлайн, поскольку путь расширения онлайн используется гораздо чаще, чем оффлайн.

Сложнее может быть расширить основной раздел, если только вы не используете LVM и у вас нет свободного места в группе томов. Чтобы разширить раздел онлайн, можно использовать fdisk или parted; затем, вам нужно выполнить kpartx <устройство>, чтобы сообщить ядру об изменениях. Если вы используете LVM, то нужно pvresize только что измененного раздела, прежде чем lvresize тома.

Наконец, вы можете использовать resize2fs на вашей файловой системе.

parted может resize разделы и их файловые системы.

Parted не работает на ext4 в CentOS. Я был вынужден использовать fdisk для удаления и пересоздания раздела, что (я подтвердил) работает без потери данных. Я следовал шагам на http://geekpeek.net/resize-filesystem-fdisk-resize2fs/. Вот они вкратце:

$ sudo fdisk /dev/sdx 
> c
> u
> p
> d
> p
> w
$ sudo fdisk /dev/sdx 
> c
> u
> p
> n
> p
> 1
> (по умолчанию)
> (по умолчанию)
> p
> w

Вы можете использовать fdisk или cfdisk, чтобы изменить (или пересоздать) раздел (просто убедитесь, что вы не измените его начальную границу), затем перезагрузите (не обязательно, см. ниже) и resize2fs. Но вообще предпочтительно использовать LVM-2 вместо MBR/GPT, так как это позволяет вносить изменения без перезагрузки ядра.

UPD.: Говоря в общем, перезагрузка системы редко нужна — это зависит от того, обновит ли ядро свое внутреннее представление о том, какова планировка разделов. Такие инструменты, как partx, partprobe и даже hdparm (если я правильно помню) могут помочь в этом.

Просто чтобы пояснить, как я это делаю для тех, кто все еще читает эту ветку.
Если вы хотите изменить размер загрузочного раздела, то вам необходимо загрузиться с загрузочного CD или USB “спасения”, который просто является Live Linux. Это позволяет запустить Linux на машине, отличной от той, на которой вы хотите внести изменения.

Я думаю, что лучше всего для “спасения” CD или USB в данном случае подойдет загрузочный USB или CD с gparted
Случаи, когда вам нужен образ спасения
1. Раздел, который нужно расширить, является последним разделом, но вы загрузили его и не можете размонтировать.
sda1 = загрузка (или swap)
sda2 = swap (или загрузка)
sda3 = /
Неиспользуемое пространство

  1. Если раздел, который нужно расширить, НЕ последний, вы должны использовать загрузочный образ gparted, чтобы переместить или изменить размер разделов.
    sda1 = загрузка
    sda2 = / (раздел, который нужно расширить, не последний)
    sda3 = swap
    неиспользованное пространство

Если вы хотите изменить размер смонтированного раздела, который не является “корневым” разделом (/), например /home, который является другим разделом, то нет необходимости использовать образ спасения. Это особенно верно, если это последний раздел.
sda1 = загрузка
sda2 = /
sda3 = /home
неиспользованное пространство
-или-
sda1 = /
sda2 = /home
неиспользованное пространство

Это ситуация, в которой я оказываюсь, когда беру образ с меньшего жесткого диска или SSD и переношу его на больший SSD.

В этом случае вам просто нужно размонтировать /home, пока вы его расширяете. Но чтобы размонтировать /home, вы должны убедиться, что не вошли в учетную запись пользователя, чья домашняя директория находится в нем. Поскольку домашняя директория пользователя “root” находится непосредственно под корнем системы, как в /root, если вы можете войти в root, то можете размонтировать /home

Я выхожу из графической среды (KDE / Gnome / и т. д.) и использую [CTRL] + [ALT] + [F1], чтобы перейти на экран командной строки.
Если вы только что вышли из сеанса пользователя, Linux может занять 20-30 секунд для завершения закрытия файлов, поэтому могут возникнуть ошибки при попытке размонтировать /home.
1. размонтировать /home (я повторяю эту команду, если она не выполняется в течение до 30 секунд, затем смотрю на другие сеансы, чтобы убедиться, что не нахожусь “cd /home/xxx” где-нибудь.)
2. parted /dev/sda
a. изменить размер x (x = раздел, который вы хотите изменить, используйте “p”, чтобы получить список разделов)
b. Введите последний сектор изменения размера = “-1” (минус 1 означает на 1 сектор к концу диска)
c. q (выход из parted)
3 resize2fs /dev/sda”x” (x = раздел, который нужно изменить. Это также перемонтирует файловую систему)
4. df -м (проверяю /home, чтобы убедиться, что он изменился)
Я ни разу не терял файлы и не повреждал диск, используя этот метод.

Удачи

Меня попросили расширить диск, смонтированный как /scratch на сервере Dell с CentOS 7, без прерывания работы текущих пользователей. Это был раздел XFS на диске RAID 0 с обычной меткой диска GPT. То же самое может быть выполнено с разделом ext4 почти таким же образом – смотрите ниже.

Вот как я это сделал без демонтажа, перезагрузки или прерывания работы системы. Я использовал только команды Linux (и инструменты RAID компании Dell):

  1. Расширение физического тома RAID было выполнено путем добавления двух новых дисков на сервер и с помощью инструмента OpenManage Server Administrator, чтобы добавить их к существующему тому RAID. Это заняло несколько дней для завершения, но не потребовало дополнительных усилий человека. Сервер продолжал работать с меньшей скоростью работы диска в течение реконструкции диска RAID.
  2. Размер диска в блоках увеличился с 15623782400 до 23435673600 блоков (512 байт), но значение /sys/block/sdb/size оставалось на прежнем уровне. Это было исправлено с помощью команды:
    echo 1 > /sys/block/sdb/device/rescan

    чтобы заставить драйвер диска обновить свои данные о размере и форме диска. Это, кажется, плохо рекламируемая функция: я догадывался, что она делает, исходя из названия!
  3. Я запустил parted, чтобы отредактировать метку диска и переместить ее копию в конец диска до нового конца диска. К счастью, она догадалась, что я хотел сделать, без особых на то указаний и предложила мне выполнить эти действия. Сперва, копия метки диска:

    Ошибка: резервная GPT таблица не находится в конце диска, как должна быть. Это может означать, что другая операционная система считает диск меньшим. Исправить, переместив копию в конец (и удалив старую копию)?
    Fix/Игнорировать/Отменить? F

    И затем размер диска, как он отражен в метке диска:

    Предупреждение: не все доступное пространство для /dev/sdb используется, вы можете исправить GPT, чтобы использовать все пространство (дополнительные 7811891200 блоков), или продолжить с текущими настройками?
    Fix/Игнорировать? F

    Так что я должен был дважды ввести “F” и затем “q”, чтобы выйти с исправленными метками диска (и их копиями). Это исправило большинство проблем без какого-либо тяжелого мышления или работы.
  4. Мне нужно было отредактировать размер раздела, чтобы он занял диск целиком, но parted не позволял мне это сделать, пока диск был все еще смонтирован — поэтому я использовал вместо этого fdisk:
    fdisk /dev/sdb
    d 1
    n 1 (по умолчанию были правильны для полного размера диска)
    t 1
    11 (Это Microsoft basic data — то же самое, что и для xfs).
    w

    Обратите внимание, что я установил, что он использовал правильный начальный номер блока, 2048. Иначе это бы не сработало. Мне повезло использовать два инструмента с одной и той же конвенцией для начального блока, но я все же проверил начальный блок заранее.
  5. Я также использовал parted в этот момент, чтобы дать разделу то же имя, что и раньше, поскольку fdisk не поддерживает именование разделов. Небольшая деталь.
  6. Я использовал partprobe /dev/sdbpartprobe /dev/sdb1 на всякий случай) для принуждения ОС заново прочитать таблицу разделов. Думаю, что только первая команда действительно внесла изменение.
  7. Наконец, я использовал xfs_growfs -d /scratch, что заняло всего 1,6 секунды, чтобы увеличить раздел до его окончательного размера, заполнив вновь расширенный диск.

Это также работало бы с томами ext4: единственное отличие — использование resize2fs /dev/sdb1 вместо xfs_growfs -d /scratch — и использование правильного номера типа раздела для ext4 вместо xfs. Команда fdisk может перечислить номера типов для обычных дисковых систем, включая ext4.

.

Ответ или решение

Конечно, расширение partitions и файловых систем в Linux, таких как ext4, является обыденной задачей для системных администраторов и ИТ-специалистов. При рассмотрении такого вопроса важно тщательно проследить все этапы процесса, чтобы избежать потери данных и обеспечить успешное завершение операции.

Шаг 1: Подготовка

Прежде чем приступить к расширению, убедитесь, что раздел, который вы хотите расширить, размонтирован. Это особенно важно, если это не является корневым разделом. Если невозможно размонтировать (например, это корневой раздел системы), вам потребуется загрузиться с живого дистрибутива Linux, такого как System Rescue CD.

Шаг 2: Бэкапы

Даже при слаженной организации процесса всегда сохраняется риск выхода из строя, поэтому рекомендуется предварительно создать резервную копию всех необходимых данных. Это обеспечит уверенность в случае непредвиденных сбоев.

Шаг 3: Изменение размера раздела

  1. Использование parted или gparted:

    • Запустите gparted (графический интерфейс) или parted для работы в консольном режиме.
    • Выберите нужный диск и измените размер раздела, чтобы занять все свободное пространство на диске.
    • В gparted это можно сделать с помощью простого перемещения ползунка до конца свободного пространства.
  2. Изменение размера через fdisk:

    • Запустите fdisk /dev/sda и удалите существующий раздел с помощью команды ‘d’. Важно: Это не уничтожит данные, если вы не измените начальную позицию раздела.
    • Создайте новый раздел с помощью ‘n’, используя те же начальные и новые конечные параметры, покрывающие все доступное пространство.
    • Обязательно примените изменения командой ‘w’ и перезагрузите таблицу разделов с помощью partprobe.

Шаг 4: Расширение файловой системы

После того как размер раздела изменен, выполните команду resize2fs /dev/sda1. Это расширит файловую систему до границ нового размера раздела.

Шаг 5: Проверка состояния файловой системы

После расширения выполните проверку файловой системы с помощью e2fsck /dev/sda1. Это подтвердит, что расширение прошло успешно и файловая система остается в консистентном состоянии.

Шаг 6: Повторный монтирование раздела

По завершении всех операций, раздел можно снова монтировать и использовать. Теперь вы должны увидеть увеличенное доступное пространство.

Заключительные замечания

В целом, процесс расширения раздела ext4 и файловой системы достаточно прост, если следовать соответствующему набору инструкций. Основное внимание следует уделить правильности действий на этапе изменения первоначальной точки начала раздела и проведению операций в правильной последовательности, чтобы избежать потерь данных. Убедитесь, что все изменения были корректно восприняты операционной системой перед повторным использованием раздела.

Оцените материал
Добавить комментарий

Капча загружается...