Ubuntu: расширяем раздел после чистой установки (LVM, fdisk)

После чистой установки Ubuntu Server с разметкой по умолчанию (LVM) корневая файловая система занимает только часть диска, примерно половину. Остальное место никуда не делось, просто оно никому не отдано. Исправляется это несколькими командами, причём без перезагрузки и без потери данных.

Что смотрим сначала

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

lsblk
df -h /
sudo vgs
sudo lvs
  • lsblk показывает диск, его разделы и логические тома на них;
  • df -h / — сколько места видит корневая файловая система;
  • vgs в колонке VFree показывает, сколько свободного места осталось в группе томов;
  • lvs показывает размер логического тома ubuntu-lv.

Бывает два случая, и от них зависит, какие шаги нужны.

  1. Диск не менялся, но том меньше группы томов. Установщик создал ubuntu-lv не на всё доступное место, и в VFree есть свободные гигабайты. Нужны только шаги 3 и 4.
  2. Диск увеличили после установки (например, в гипервизоре или в облаке), и свободного места в группе томов нет, зато оно есть на самом диске. Нужны все четыре шага.

Если сомневаетесь, выполните все четыре: лишние команды ничего не испортят, а там, где делать нечего, просто скажут об этом.

Четыре команды

sudo sgdisk -e /dev/sda
sudo growpart /dev/sda 3
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

Имена диска (/dev/sda), номер раздела (3) и имя тома (ubuntu--vg-ubuntu--lv) взяты из стандартной установки на виртуальной машине. У вас они могут отличаться (/dev/vda, /dev/nvme0n1 и так далее), поэтому сверьтесь с выводом lsblk. Для NVMe номер раздела пишется с буквой p, а в growpart диск и номер раздела передаются отдельными аргументами: sudo growpart /dev/nvme0n1 3.

1. sgdisk -e — переносим резервную таблицу разделов в конец диска

Таблица разделов GPT дублируется в самом конце диска. Если диск стал больше, копия остаётся там, где был старый конец, и система считает, что дальше ничего нет. Ключ -e переносит резервную копию таблицы в настоящий конец диска. Команда sgdisk входит в пакет gdisk.

На обычном диске, который не увеличивали, этот шаг ничего не изменит.

2. growpart — растягиваем раздел

sudo growpart /dev/sda 3

Раздел с LVM (здесь третий) растягивается до конца диска. Размер раздела меняется на лету, данные не затрагиваются. Если раздел уже занимает всё место, growpart ответит NOCHANGE, и это нормально. Утилита лежит в пакете cloud-guest-utils.

После этого физический том нужно уведомить о новом размере:

sudo pvresize /dev/sda3

Во многих случаях growpart на Ubuntu этого не требует, но шаг безвреден, и после него sudo vgs покажет всё доступное место в VFree.

3. lvextend — отдаём всё свободное место логическому тому

sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

-l +100%FREE означает: добавить тому всё, что свободно в группе томов. Если нужно только часть, например 20 ГБ, вместо этого пишут -L +20G.

4. resize2fs — растягиваем файловую систему

sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

Логический том вырос, но файловая система ещё нет. resize2fs растягивает ext4 прямо на смонтированном томе. Если корень отформатирован в XFS, нужна другая команда:

sudo xfs_growfs /

Узнать тип файловой системы можно командой df -T /.

Короче: lvextend с ключом -r

Шаги 3 и 4 объединяются одним ключом -r (--resizefs): lvextend сам вызовет подходящую утилиту для файловой системы.

sudo lvextend -r -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

Проверка

df -h /

В колонке Size должен появиться новый размер. Перезагружать машину не нужно.

Итого

  • свободного места нет в группе томов, а диск увеличивали — sgdisk -e, growpart, при необходимости pvresize;
  • место в группе томов есть — lvextend -r -l +100%FREE;
  • всегда сначала lsblk, vgs и lvs, чтобы убедиться, что команды применяются к тому диску и тому, что нужно.

Оставить комментарий могут только зарегистрированные пользователи.

Войдите на сайт или зарегистрируйтесь, чтобы оставить комментарий.