Случилась необходимость размер логического диска на одной виртуалке увеличить. Ну, т.к. виртуалка, то сначала выдал ей дисковых ресурсов, а именно увеличил размер единственного жесткого диска. А вот о том какие у меня возникли дальше трудности и как я их героически преодолел я и хочу поведать в этой были.
В моем случае диск содержал MBR таблицу разделов.
Чтобы виртуалка увидела на диске свободное место без перезагрузки, я выполнил команду "partprobe".
Итак, дано (данные о головках и секторах удалены для уменьшения размера статьи):
fdisk -lДиск /dev/sda: 42.9 Гб, 42949672960 байт...Устр-во Загр Начало Конец Блоки Id Система/dev/sda1 * 2048 499711 248832 83 Linux/dev/sda2 501758 62912511 31205377 5 Расширенный/dev/sda5 501760 62912511 31205376 8e Linux LVMДиск /dev/mapper/srv--vg-swap_1: 1073 МБ, 1073741824 байт...Диск /dev/mapper/srv--vg-root: 15.0 Гб, 14998831104 байт...Диск /dev/mapper/srv--vg-var: 15.9 Гб, 15879634944 байт...
Т.е. на диске есть единственный первичный загрузочный раздел размером 255MB и на расширенном разделе есть 3 lvm-раздела, суммарным объемом 32 Гб (почему такая странная разметка - сказать точно не могу, т.к. создавалось это все давно), размер диска был увеличен на 10Гб и стал составлять 42.9 Гб.
Задача: увеличить размер раздела /dev/srv-vg/var так, чтобы он увеличился до 25Гб. При этом нужно сделать это без перезагрузки сервера и без потери данных.
Решение. Все админы делятся на тех кто уже делает бэкапы и тех, кто пока их не делает. По-этому сначала на всякий случай делаем бэкап всего нужного. После этого вооружаемся fdisk-ом:
fdisk /dev/sda
Команда (m для справки): pДиск /dev/sda: 42.9 Гб, 42949672960 байт64 головок, 32 секторов/треков, 40960 цилиндров, всего 83886080 секторовUnits = секторы of 1 * 512 = 512 bytesРазмер сектора (логического/физического): 512 байт / 512 байтI/O size (minimum/optimal): 512 bytes / 512 bytesИдентификатор диска: 0x000da1e3Устр-во Загр Начало Конец Блоки Id Система/dev/sda1 * 2048 499711 248832 83 Linux/dev/sda2 501758 62912511 31205377 5 Расширенный/dev/sda5 501760 62912511 31205376 8e Linux LVMКоманда (m для справки): dНомер раздела (1-5): 5Команда (m для справки): d Номер раздела (1-5): 2Команда (m для справки): nPartition type: p primary (1 primary, 0 extended, 3 free) e расширенныйSelect (default p): eНомер раздела (1-4, по умолчанию 2): Используется значение по умолчанию 2Первый сектор (499712-83886079, по умолчанию 499712): 501758Last сектор, +секторы or +size{K,M,G} (501758-83886079, по умолчанию 83886079): Используется значение по умолчанию 83886079Команда (m для справки): nPartition type: p primary (1 primary, 1 extended, 2 free) l логический (нумерация с 5)Select (default p): lДобавление логического раздела 5Первый сектор (503806-83886079, по умолчанию 503806): Используется значение по умолчанию 503806Last сектор, +секторы or +size{K,M,G} (503806-83886079, по умолчанию 83886079): Используется значение по умолчанию 83886079Команда (m для справки): pДиск /dev/sda: 42.9 Гб, 42949672960 байт64 головок, 32 секторов/треков, 40960 цилиндров, всего 83886080 секторовUnits = секторы of 1 * 512 = 512 bytesРазмер сектора (логического/физического): 512 байт / 512 байтI/O size (minimum/optimal): 512 bytes / 512 bytesИдентификатор диска: 0x000da1e3Устр-во Загр Начало Конец Блоки Id Система/dev/sda1 * 2048 499711 248832 83 Linux/dev/sda2 499712 83886079 41693184 5 Расширенный/dev/sda5 501760 83886079 41692160 83 LinuxКоманда (m для справки): wТаблица разделов была изменена!Вызывается ioctl() для перечитывания таблицы разделов.ВНИМАНИЕ: Попытка перечитать таблицу разделов завершилась ошибкой 16: Устройство или ресурс занято.Ядро всё ещё использует старую таблицу. Новая будет использованапри следующей перезагрузке, или при запуске partprobe(8) или kpartx(8)Синхронизируются диски.
Все, теперь размер раздела на диске увеличен! Но пока еще размер lvm остался прежним, равно как и размер файловой системы. Поясню, что за магия была совершена в программе fdisk:
1) p - печать таблицы разделов (чтобы посмотреть исходное состояние разделов)
2) d, 5 - удаление 5-ого раздела, т.е. раздела с LVM
3) d, 2 - удаление 2-ого раздела, т.е. расширенного раздела
4) n, e, 501758 - создание нового расширенного раздела (начало раздела должно совпадать с началом удаленного раздела, в моем случае - 501758)
5) n, l - создание нового логического раздела (начало раздела должно совпадать с началом удаленного раздела, в данном случае совпало с предлагаемым - 503806)
6) p - печать таблицы разделов (чтобы посмотреть новое состояние разделов и сравнить с исходным, переходить к следующему пункту только убедившись, что все ОК)
7) w - запись новой таблицы разделов (до этого пункта все изменения не сохраняются на диск)
Внимание! Для того, чтобы не потерять файловую систему на разделе, который увеличиваем, необходимо, чтобы начало нового создаваемого раздела в точности совпадало с началом старого удаленного раздела, по-этому перед удалением необходимо запомнить/записать номер первого сектора удаляемого раздела. Если вдруг fdisk отображает информацию не в секторах, а в цилиндрах, то можно переключить режим, воспользовавшись параметром "-u" ("u" в интерактивном режиме).
После этого, чтобы изменения применились без перезагрузки, необходимо выполнить команду "partprobe" (работает не во всех версиях Linux, иногда поможет только перезагрузка).
Теперь приступим к настройке lvm (если вы не используете lvm, то можно сразу перейти к resize2fs).
Сначала посмотрим, какой том у нас есть:
pvdisplay --- Physical volume --- PV Name /dev/sda5 VG Name srv-vg PV Size 29,76 GiB / not usable 0 Allocatable yes (but full) PE Size 4,00 MiB Total PE 7618 Free PE 0 Allocated PE 7618 PV UUID 0K8nBq-6muK-DXT3-1xWr-vQvz-dIx4-2zh8nJ
после этого выполним команду:
pvresize /dev/sda5 Physical volume "/dev/sda5" changed 1 physical volume(s) resized / 0 physical volume(s) not resized
и убедимся, что размер тома увеличился:
pvdisplay --- Physical volume --- PV Name /dev/sda5 VG Name srv-vg PV Size 39,76 GiB / not usable 2,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 10178 Free PE 2560 Allocated PE 7618 PV UUID 0K8nBq-6muK-DXT3-1xWr-vQvz-dIx4-2zh8nJ
У нас сейчас на srv-vg появилось свободное место размером 10Гб:
vgdisplay --- Volume group --- VG Name srv-vg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 19 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size 39,76 GiB PE Size 4,00 MiB Total PE 10178 Alloc PE / Size 7618 / 29,76 GiB Free PE / Size 2560 / 10,00 GiB VG UUID zf4cMW-0bY1-FVC7-3Utw-mdz3-H1z0-3zY12F
Увеличиваем размер lv:
lvextend /dev/srv-vg/var -l +100%FREE Extending logical volume var to 24,79 GiB Logical volume var successfully resized vgdisplay --- Volume group --- VG Name srv-vg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 20 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size 39,76 GiB PE Size 4,00 MiB Total PE 10178 Alloc PE / Size 10178 / 39,76 GiB Free PE / Size 0 / 0 VG UUID zf4cMW-0bY1-FVC7-3Utw-mdz3-H1z0-3zY12F
Увеличиваем размер тома:
resize2fs /dev/srv-vg/varresize2fs 1.42.9 (4-Feb-2014)Filesystem at /dev/srv-vg/var is mounted on /var; on-line resizing requiredold_desc_blocks = 1, new_desc_blocks = 2The filesystem on /dev/srv-vg/var is now 6498304 blocks long.
Все, задача решена. Можно идти пить любимый напиток.