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

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

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

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

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

Я видел людей, использующих resize2fs но я не понимаю, изменяет ли он размер раздела.

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

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

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

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

  2. resize2fs /dev/whatever

  3. e2fsck /dev/whatever (просто чтобы узнать, в безопасности ли вы)

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

Хотя я никогда не видел такой ошибки, сначала сделайте резервную копию своих данных!

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

sudo resize2fs /dev/drive_to_grow

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 # print current data for a case
parted /dev/vda resizepart 2 yes -- -1s # resize /dev/vda2 first
parted /dev/vda resizepart 5 yes -- -1s # resize /dev/vda5
partprobe /dev/vda # re-read partition table
resize2fs /dev/vda5 # get your space

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
> (default)
> (default)
> p
> w

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

Просто чтобы прояснить, как я это делаю для тех, кто все еще читает эту ветку.
Если вы хотите изменить размер загрузочного раздела, вы должны загрузиться с «аварийного» диска bootcd или bootusb, который представляет собой просто Live Linux. Это позволяет вам запускать Linux на машине, отличной от диска, на котором вы хотите внести изменения.

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

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

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

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

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

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

Удачи

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

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

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

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

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

  1. Увеличение физического тома RAID было выполнено путем добавления двух новых дисков к серверу и использования инструмента OpenManage Server Administrator для добавления их к существующему тому RAID. Это заняло несколько дней, но не потребовало дополнительных человеческих усилий. Сервер продолжал работать с более низкими скоростями диска во время реконструкции диска RAID.
  2. Размер диска в блоках вырос с 15623782400 до 23435673600 (512-байтовых) блоков, но значение /sys/block/sdb/size все еще было на более низком уровне. Это было исправлено с помощью команды: echo 1 > /sys/block/sdb/device/rescan
    чтобы драйвер диска обновил свои знания о размере и форме диска. Это кажется плохо разрекламированной функцией: я догадался, что она делает, по названию!
  3. Я побежал parted , чтобы отредактировать метку диска и переместить ее копию в конце диска на новый конец диска. К счастью, он без поддержки угадал, чем я хочу заниматься, и подсказал мне. Сначала копия метки диска: Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? F
    А затем размер диска, отображаемый в метке диска: Warning: Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 7811891200 blocks) or continue with the current setting? Fix/Ignore? F
    Поэтому мне пришлось дважды ввести «F», а затем «q», чтобы выйти с исправленной меткой диска (и ее копией). Это исправило большую часть того, что нужно было исправить без каких-либо усилий и усилий.
  4. Пришлось отредактировать размер раздела, чтобы заполнить диск, но parted не позволил мне сделать это, пока диск был смонтирован, поэтому я использовал fdisk вместо: fdisk /dev/sdb d 1 n 1 (defaults were correct for full size of disk) t 1 11 (That's Microsoft basic data - which is the same as 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.

С помощью growpart и resize2fs пример:

$ 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.