- Live resize of a GPT partition on Linux
- Расширение диска или раздела Linux
- Шаг 1. Расширение раздела
- Обычные тома (part)
- 1. С помощью утилиты growpart (без отмонтирования раздела)
- 2. С помощью утилиты fdisk/parted (требуется отмонтировать раздел)
- LVM
- Шаг 2. Изменение размера для файловой системы
- Увеличение разделов с Gparted
Live resize of a GPT partition on Linux
The safest way to do this is to boot using an emergency medium (a live CD or the like) and use GParted, which will resize both the partition and the filesystem it contains. This will work only if the partition is not currently being used, though.
If you can’t afford any downtime, though, you could try using gdisk instead of parted . You’ll need to delete the partition you want to resize and create a new one in its place with the same start point, much as you’d have done with fdisk . gdisk is willing to work on an in-use disk, although the kernel might not register any changes. In that case, you may need to use partprobe or kpartx to get the kernel to accept the new partition table, or even reboot the computer if that doesn’t work. (This should all be pretty similar to using fdisk .)
This usually only works with more recent Linux distributions. Tools needed:
A GPT partition stores a backup header at the end of the disk. If you have resized the underlying device, the backup header will be somewhere in the middle. The first step is to move the partition header to the end of the disk.
Assuming the disk is /dev/sda and the partition is /dev/sda3 (must also be the last partition):
Then delete, the last partition and re-create it:
sgdisk -d 3 /dev/sda sgdisk -N 3 /dev/sda
You’ll usually see a message indicating that the kernel is unable to re-load the partition table. You have to run partprobe so the partition is registered with the new size:
If this is unsuccessful, you’ll have to reboot the virtual machine. After that you can grow your filesystem with the appropriate tool, for ext4 etc.:
Caution: running sgdisk can be destructive. Make sure you have proper backup procedures in place.
Here’s an example that an automated tool uses to resize a partition online, in one run:
sgdisk -d 1 -n 1:2048:0 -c 1: -u 1:E485F29F-A1F4-4953-9DD8-799EAEA0119B -t 1:0700 /dev/xvda
Here’s list of options to sgdisk command:
- -d 1 delete’s first partition
- -n 1:2048:0 says create new partition «number 1», with starting sector 2048. End sector = «0» which means «use all available space for this partition
- -u sets unique guid for that partition (this is specific for GPT partitions); you could use ‘R’ for GUID to be set to a random value. You could also get current partitions’s id through gdisk /dev/xvda; p output to reuse the same uid
- -t 1:0700 basically means first partition is of typecode ‘0700’.
/dev/xvda was the disk which we repartitioned.
So it deletes and creates a new partition on its place right away.
PS. A few notes on typecode ‘0700’. From man SGDISK(8)
-t, --typecode=partnum: Change a single partition's type code. You enter the type code using either a two-byte hexadecimal number, as
described earlier, or a fully-specified GUID value, such as EBD0A0A2-B9E5-4433-87C0-68B6B72699C7.
Found best explanation for what ‘0700’ means here — http://www.rodsbooks.com/gdisk/walkthrough.html
«But wait,» you say, «I thought the disk had a FAT partition!» Indeed it does. Windows uses a single GUID code for all its data partitions, be they FAT or NTFS. In the past, the same code has been used in Linux for its data partitions. (More on this shortly. ) Thus, in this case several different MBR codes are all translated into a single GPT GUID code. GPT fdisk uses, somewhat arbitrarily, the 0x0700 code (or more precisely, EBD0A0A2-B9E5-4433-87C0-68B6B72699C7) for all of these.
In my case I believe that was a Linux ext4 partition, but partition’s typecode doesn’t mean filesystem type, so ‘0700’ looks more like a catchall type for sgdisk. At least in cases I’ve seen.
PPS. You may need to run partprobe for kernel to become aware of the partitioning change without rebooting system.
Расширение диска или раздела Linux
Обновлено: 04.04.2023 Опубликовано: 22.06.2017
В зависимости от типа раздела и файловой системы, действия различаются.
Любая работа с диском несет риск потери информации. Перед началом работ убедитесь в наличие резервных копий ценных данных.
Шаг 1. Расширение раздела
Мы рассмотрим варианты работы с обычными томами (разделами) и томами LVM. Проверить, какой тип раздела у нас используется можно командой:
Нам интересны варианты part и lvm.
Обычные тома (part)
Допустим, есть диск /dev/sdb и раздел /dev/sdb2, который нужно увеличить. Разберем два подхода, сделать это.
1. С помощью утилиты growpart (без отмонтирования раздела)
Данная утилита позволяет увиличить размер слайса без необходимости его отмонтировать. Это очень удобно для работы с корневыми разделами. Данная утилита не установлена в системе. В зависимости от последней наши действия будут различаться.
а) Для систем DEB:
apt install cloud-guest-utils
б) Для систем RPM:
yum install cloud-utils-growpart
Если наш диск имеет разметку GPT, то потребуется установить также утилиту gdisk.
а) Для DEB:
Установка growpart завершена. Идем дальше.
Для расширения раздела /dev/sdb2 вводим команду:
Мы должны увидеть что-то на подобие:
CHANGED: partition=2 start=4096 old: size=20965376 end=20969472 new: size=41938910 end=41943006
2. С помощью утилиты fdisk/parted (требуется отмонтировать раздел)
Данный способ удобнее тем, что не нужно устанавливать дополнительных утилит, но он потребует отмонтирование раздела. Это можно сделать командой:
В случае работы с корневой директорией, отмонтировать ее не получиться. В таком случае необходимо загрузить компьютер с Windows LiveCD или GParted Live.
Подключаемся утилитой fdisk к /dev/sdb:
Если мы работаем с разделом более чем 2Тб, используем утилиту parted.
Удаляем раздел (не переживайте — все данные сохраняются):
* в моем примере, раздел для удаления на второй позиции.
На запрос начального и конечного секторов просто нажимаем Enter.
Если раздел был загрузочный, добавляем соответствующий флаг:
Еще раз проверяем, что получилось:
LVM
LVM-тома расширяются на лету, даже для корневых разделов. В данном примере, работаем с /dev/sda.
Подробнее о работе с LVM читайте в инструкции Как работать с LVM.
Открываем диск утилитой fdisk:
* напомню, что при работе с диском 2Тб и более, следует использовать утилиту parted.
Номер раздела оставляем тот, который предлагает система (просто нажимаем Enter).
Первый и последний сектора также оставляем по умолчанию для использования всего дискового пространства (еще два раза Enter).
Выбираем номер раздела (в моем примере создавался раздел 3):
Командой L можно посмотреть список всех типов, но нас интересует конкретный — LVM (8e):
Проинформируем систему, что в таблице разделов произошли изменения:
Создаем физический том из нового раздела:
Смотрим наши Volume Group и для нужного добавляем созданный том:
vgextend vg_centos /dev/sda3
* в моем примере группа томов LVM называется vg_centos
Смотрим LVM-разделы и расширяем пространства для нужного:
lvextend -l +100%FREE /dev/vg_centos/lv_root
* данная команда расширяем LVM-раздел /dev/vg_centos/lv_root, используя все свободное пространство (100%FREE).
Шаг 2. Изменение размера для файловой системы
После того, как на предыдущем шаге мы расширили раздел, система по-прежнему будет видеть старый по объему диск. Чтобы это исправить, необходимо выполнить команду по изменению размера файловой системы. В зависимости от последней, команды различаются.
Посмотреть файловую систему:
ext2/ext3/ext4:
* обратите внимание, что в данных примерах используются различные устройства.
Если раздел был отмонтирован, монтируем его, например:
Проверяем, что настройки применились:
Увеличение разделов с Gparted
Если работы выполняются на системе с графическим интерфейсом или есть возможность перезагрузить сервер и загрузиться с LiveCD, можно воспользоваться простым средством — утилитой Gparted, которая позволяем менять размер разделов мышкой.
Запускаем утилиту — выбираем диск, с которым будем работать — кликаем правой кнопкой по разделу, который хотим увеличить и выбираем Resize/Move:
В открывшемся окне с помощью мышки или форм меняем размер раздела:
Нажимаем кнопку Resize/Move.
Проверяем изменения в окне программы и сохраняем настройки кнопкой «Apply All Operations»: