- Расширение диска или раздела Linux
- Шаг 1. Расширение раздела
- Обычные тома (part)
- 1. С помощью утилиты growpart (без отмонтирования раздела)
- 2. С помощью утилиты fdisk/parted (требуется отмонтировать раздел)
- LVM
- Шаг 2. Изменение размера для файловой системы
- Увеличение разделов с Gparted
- Увеличение разделов в Linux на горячую
- План действий
- Сканируем диски в системе
- Меняем размер раздела
- Обычные разделы или LVM
- Большой диск GPT
- Увеличение файловой системы
- Обычная разметка
- LVM
- Итог
- TL;DR
Расширение диска или раздела 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»:
Увеличение разделов в Linux на горячую
Cheatsheet (шпаргалка) по увеличению объема разделов в Linux на горячую без выключения виртуальной машины.
Частая задача в моей текущей работе — увеличить объем раздела на виртуальной машине без выключения машины (на горячую). Под рукой постоянно держу небольшой cheatsheet (шпаргалку) по работе с разделами в Linux.
План действий
Перед изменением размеров разделов рекомендуется отмонтировать диск. Если диск системный, то нужно загружаться в recovery. Я делаю это на горячую на свой страх и риск.
- Делаем бекап машины! (не могу не написать этого)
- Увеличиваем объем диска в гипервизоре (этот пункт не затрагиваем)
- Сканируем диски в системе
- Меняем размер раздела
- Увеличиваем файловую систему
Сканируем диски в системе
После увеличения объема диска есть вероятность того, что в системе мы новый объем сразу не увидим. Проверяем. Я использую команду lsblk :
root@hostname.infra.local:/home/user# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk loop0 7:0 0 99,2M 1 loop /snap/core/10908 loop2 7:2 0 99,2M 1 loop /snap/core/10958 sda 8:0 0 32G 0 disk ├─sda1 8:1 0 1M 0 part └─sda2 8:2 0 32G 0 part / sdb 8:16 0 4T 0 disk
Стрелкой я выделил диск, который мы увеличили до 5Т, но увеличенный объем не видим.
Нужно заставить систему просканировать диск.
echo 1 > /sys/block/sdb/device/rescan
Сразу после этого снова выполняем lsblk :
sdb 8:16 0 5T 0 disk └─sdb1 8:17 0 4T 0 part /pgsqldb
То что нужно. Перейдем к увеличению раздела.
Меняем размер раздела
Вообще, мы можем для любых вариантов использовать программу parted, но я покажу еще способ с программой fdisk. Он подходит для разделов объемом менее 4 терабайт.
Здесь будет несколько вариантов:
- у нас обычная разметка диска или LVM
- у нас диск c таблицей разметки GPT более 4 терабайт объемом
Рекомендую на этом этапе сначала выполнить команду parted -l , которая может показать ошибку и предложить опции Fix\\Ignore :
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 41943040 blocks) or continue with the current setting? Fix/Ignore? Fix
Обычные разделы или LVM
Чаще всего я пользуюсь программой fdisk. Можно посмотреть все наши диски\разделы: fdisk -l .
Так как меняем размер раздела на диске sdb , то и заходим в fdisk /dev/sdb.
Вводим команду p и получаем наш текущий список разделов:
Device Start End Sectors Size Type /dev/sdb1 2048 8589843750 8589841703 4T Linux filesystem
Удаляем раздел /dev/sdb1 : вводим команду d .
Command (m for help): d Selected partition 1 Partition 1 has been deleted.
Если разделов на диске больше, программа предложит ввести цифру нужного раздела.
Создаем новый раздел n :
Command (m for help): n Partition number (1-128, default 1): First sector (34-8589934558, default 2048): Last sector, +sectors or +size (2048-8589934558, default 8589934558): Created a new partition 1 of type 'Linux filesystem' and of size 4 TiB.
Обратите внимание, программа сообщает, что при создании раздела она нашла запись ext4 в разделе и предлагает удалить ее. Не удаляем. Нет! Не надо!
Partition #1 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: N
Опять вводим команду p , чтобы посмотреть новую информацию:
Device Start End Sectors Size Type /dev/sdb1 2048 10751953125 10751951078 5T Linux filesystem
Ну вроде все хорошо. Теперь вводим команду w (write). После этого ваши изменения запишутся на диск.
Большой диск GPT
Если по предыдущему пункту попробовать отресайзить диск большого объема (больше 4 терабайт), то появится ошибка Value out of range . Придется воспользоваться программой parted.
Делаем parted /dev/sdb и смотрим текущие разделы командой print :
(parted) print Model: VMware Virtual disk (scsi) Disk /dev/sdb: 4398GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 3299GB 3299GB ext4 primary
Меняем размер раздела командой resizepart 1 :
(parted) resizepart 1 Warning: Partition /dev/sdb1 is being used. Are you sure you want to continue? Yes/No? Yes End? [3299GB]? 4398GB
На вопрос End? пишем новый объем раздела. Если хотим расширить его до максимума, то цифры можно подсмотреть выше в выводе команды print : Disk /dev/sdb: 4398GB
Здесь изменения происходят сразу, поэтому при отсутствии вывода после предыдущей команды можно делать quit.
Увеличение файловой системы
Тут должно быть все просто. Разница только между разметками: обычная или LVM.
Обычная разметка
Просто выполняем команду resize2fs /dev/sdb1 :
root@hostname.infra.local:/home/user# resize2fs /dev/sdb1 resize2fs 1.44.1 (24-Mar-2018) Filesystem at /dev/sdb1 is mounted on /pgsqldb; on-line resizing required old_desc_blocks = 384, new_desc_blocks = 512 The filesystem on /dev/sdb1 is now 1073730212 (4k) blocks long.
LVM
Вообще, LVM позволяет добавлять физические диски (PV - physical volume) в VG - volume group, а в них создавать логические тома (LV - logical volume) примерно по такой схеме:
Следовательно, можно не ресайзить диск в гипервизоре, а добавить еще один. Затем добавить новый PV в VG.
Но мы идем путем джедая увеличения диска, поэтому в случае с LVM к ресайзингу файловой системы добавляется несколько команд.
Для просмотра информации о PV, VG, LV существуют команды pvs , vgs , lvs . И их более подробные варианты pvscan , vgscan , lvscan :
root@hostname:/home/user# pvs PV VG Fmt Attr PSize PFree /dev/sda5 t-ubuntu16-vg lvm2 a-- 49.52g 0 root@hostname:/home/user# vgs VG #PV #LV #SN Attr VSize VFree t-ubuntu16-vg 1 2 0 wz--n- 49.52g 0 root@hostname:/home/user# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root t-ubuntu16-vg -wi-ao---- 48.52g swap_1 t-ubuntu16-vg -wi-ao---- 1.00g
- Меняем размер PV pvresize /dev/sda1
- Увеличиваем размер LV до максимального lvextend -l +100%FREE /dev/mapper/vg1-dsads-lv-root
- Увеличиваем файловую систему на нужном разделе resize2fs /dev/mapper/vg1-dsads-lv-root
Итог
Смотрим, что у нас получилось df -h :
root@hostname.infra.local:/home/user# df -h Filesystem Size Used Avail Use% Mounted on udev 38G 0 38G 0% /dev tmpfs 7,5G 4,4M 7,5G 1% /run /dev/sda2 32G 24G 6,3G 79% / /dev/sdb1 5,0T 3,3T 1,5T 71% /pgsqldb
Видим новый объем. Все счастливы и довольны.
TL;DR
Кратко cheatsheet у меня выглядит так:
Смотрим, видит ли система новое место на дисках: lsblk , parted -l , fdisk -l
Если не видит: echo 1 > /sys/block/sda/device/rescan (вместо sda - нужный диск) fdisk /dev/sda (if sda)
d - удалить раздел который расширяешь
n - создать новый раздел (создастся с тем индексом, который удалишь)
В большинстве случаев везде ответы будут по умолчанию. Когда спросит про затирание метки - НЕ удалять
p - проверить что разделы имеют тот же вид что и в начале
w - записать изменения на диск
resize2fs /dev/sda1 (номер - индекс раздела)
lvextend -l +100%FREE /dev/mapper/vg1-dsads-lv-root
Если ошибка с gpt
💡 Подписывайтесь на Телеграм-канал, чтобы не пропускать новые статьи