Как изменить размер тома LVM

Table of Contents

Изменение размера логического тома в Linux не является слишком сложной задачей и может быть выполнено достаточно прямолинейным способом. Вот обычные шаги:

  1. Создать новый раздел на жёстком диске.
  2. Добавить созданный раздел как физический том.
  3. Добавить новый физический том в группу томов.
  4. Выделить место из группы томов в логический том.
  5. Изменить размер файловой системы.

Однако в данном сценарии ваша корневая файловая система (как раздел LVM) смонтирована внутри расширенного раздела, а не основного. У вас есть только один основной раздел, который смонтирован на /boot, а всё остальное пространство является частью этого расширенного раздела.

Звучит сложно? Позвольте показать, как изменить размер раздела LVM внутри расширенного раздела.

Изменение размера раздела LVM внутри расширенного раздела

В этом руководстве я использую Linux, установленный на виртуальной машине.

Пожалуйста, помните: следует быть очень осторожным при работе с разделами диска.

Шаг 1: Выключите ВМ и увеличьте размер диска

Сначала выключите виртуальную машину и увеличьте размер её виртуального диска. Здесь я увеличил размер диска /dev/sda на 20 ГБ, доведя его примерно до 40 ГБ. Затем запустите ВМ и откройте консоль.

Взгляните на разделы нашего диска.

root@Ubuntu14:~# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a975f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758    41940991    20719617    5  Extended
/dev/sda5          501760    41940991    20719616   8e  Linux LVM

Если проанализировать дисковое пространство с помощью команды df, вот что она показывает:

root@Ubuntu14:~# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  989M  4.0K  989M   1% /dev
tmpfs          tmpfs     201M  716K  200M   1% /run
/dev/dm-0      ext4       19G  1.5G   16G   9% /
none           tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
none           tmpfs     5.0M     0  5.0M   0% /run/lock
none           tmpfs    1001M     0 1001M   0% /run/shm
none           tmpfs     100M     0  100M   0% /run/user
/dev/sda1      ext2      236M   40M  184M  18% /boot

Цель — увеличить размер раздела /dev/dm-0, который смонтирован на /dev/sda5.

Покажу также текущее состояние физических томов, групп томов и логических томов:

root@Ubuntu14:~# lvs
  LV     VG          Attr      LSize    Pool Origin Data%  Move Log Copy%  Convert
  root   ubuntu14-vg -wi-ao---   18.74g                                           
  swap_1 ubuntu14-vg -wi-ao--- 1020.00m   

root@Ubuntu14:~# pvs
  PV         VG          Fmt  Attr PSize  PFree 
  /dev/sda5  ubuntu14-vg lvm2 a--  19.76g 20.00m

root@Ubuntu14:~# vgs
  VG          #PV #LV #SN Attr   VSize  VFree 
  ubuntu14-vg   1   2   0 wz--n- 19.76g 20.00m

Всем им выделено около 20 ГБ дискового пространства.

Шаг 2: Начните процесс изменения размера LVM

Вот шаги для изменения размера раздела LVM:

Откройте утилиту fdisk и посмотрите разделы:

root@Ubuntu14:~# fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a975f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758    41940991    20719617    5  Extended
/dev/sda5          501760    41940991    20719616   8e  Linux LVM

Удалите расширенный раздел (/dev/sda2) с помощью команды d, что автоматически удалит находящийся под ним раздел LVM /dev/sda5.

Command (m for help): d
Partition number (1-5): 2

Снова создайте новый раздел как расширенный с помощью команды n, используя значения начального и конечного цилиндров по умолчанию.

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (1-4, default 2): 
Using default value 2
First sector (499712-83886079, default 499712): 
Using default value 499712
Last sector, +sectors or +size{K,M,G} (499712-83886079, default 83886079): 
Using default value 83886079

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a975f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          499712    83886079    41693184    5  Extended

Создайте логический раздел (/dev/sda5), используя значения начального и конечного цилиндров по умолчанию.

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (501760-83886079, default 501760): 
Using default value 501760
Last sector, +sectors or +size{K,M,G} (501760-83886079, default 83886079): 
Using default value 83886079

Переключитесь в экспертный режим, нажав x.

Command (m for help): x

Выполните команду экспертного режима b, чтобы настроить начало раздела (это меняет размер раздела, а не его конечную точку). Введите значение начала, которое было до удаления разделов. Здесь это 501760.

Expert command (m for help): b
Partition number (1-5): 5
New beginning of data (499713-83886079, default 501760): 501760

Затем выполните r, чтобы вернуться в главное меню.

Expert command (m for help): r

Проверьте номера разделов, чтобы убедиться.

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a975f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          499712    83886079    41693184    5  Extended
/dev/sda5          501760    83886079    41692160   83  Linux

Теперь измените тип раздела на LVM, нажав команду t и выбрав тип 8e.

Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): 8e
Changed system type of partition 5 to 8e (Linux LVM)

Нажмите w, чтобы записать все изменения на диск.

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Шаг 3: Внесите изменения в физический и логический тома вручную

Выполните команду partprobe, чтобы сообщить ОС об изменениях таблицы разделов:

root@Ubuntu14:~# partprobe /dev/sda

Выполните команду lsblk, чтобы увидеть, что /dev/sda5 теперь имеет размер около 40 ГБ (в моём случае).

root@Ubuntu14:~# lsblk 
NAME                           MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                              8:0    0    40G  0 disk 
├─sda1                           8:1    0   243M  0 part /boot
├─sda2                           8:2    0     1K  0 part 
└─sda5                           8:5    0  39.8G  0 part 
  ├─ubuntu14--vg-root (dm-0)   252:0    0  18.8G  0 lvm  /
  └─ubuntu14--vg-swap_1 (dm-1) 252:1    0  1020M  0 lvm  [SWAP]
sr0                             11:0    1  1024M  0 rom  

Выполните команду df и вы заметите, что /dev/dm-0 всё ещё показывает старый размер:

root@Ubuntu14:~# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  989M  4.0K  989M   1% /dev
tmpfs          tmpfs     201M  716K  200M   1% /run
/dev/dm-0      ext4       19G  1.5G   16G   9% /
none           tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
none           tmpfs     5.0M     0  5.0M   0% /run/lock
none           tmpfs    1001M     0 1001M   0% /run/shm
none           tmpfs     100M     0  100M   0% /run/user
/dev/sda1      ext2      236M   40M  184M  18% /boot

То же самое и с физическими томами, группами томов и логическими томами:

root@Ubuntu14:~# lvs
  LV     VG          Attr      LSize    Pool Origin Data%  Move Log Copy%  Convert
  root   ubuntu14-vg -wi-ao---   18.74g                                           
  swap_1 ubuntu14-vg -wi-ao--- 1020.00m   

root@Ubuntu14:~# pvs
  PV         VG          Fmt  Attr PSize  PFree 
  /dev/sda5  ubuntu14-vg lvm2 a--  19.76g 20.00m

root@Ubuntu14:~# vgs
  VG          #PV #LV #SN Attr   VSize  VFree 
  ubuntu14-vg   1   2   0 wz--n- 19.76g 20.00m

Здесь потребуется приложить некоторые ручные усилия.

Измените размер физического тома:

root@Ubuntu14:~# pvresize /dev/sda5 
Physical volume "/dev/sda5" changed
1 physical volume(s) resized / 0 physical volume(s) not resized

Теперь проверьте состояние физического тома и группы томов и убедитесь, что они правильно отображают новый размер:

root@Ubuntu14:~# pvs
PV         VG          Fmt  Attr PSize  PFree 
/dev/sda5  ubuntu14-vg lvm2 a--  39.76g 20.02g

root@Ubuntu14:~# vgs
VG          #PV #LV #SN Attr   VSize  VFree 
ubuntu14-vg   1   2   0 wz--n- 39.76g 20.02g

Аналогичным образом измените размер логического тома:

root@Ubuntu14:~# lvextend -l +100%FREE /dev/ubuntu14-vg/root
  Extending logical volume root to 38.76 GiB
  Logical volume root successfully resized

Наконец, измените размер файловой системы:

root@Ubuntu14:~# resize2fs /dev/ubuntu14-vg/root
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/ubuntu14-vg/root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/ubuntu14-vg/root is now 10161152 blocks long.

Проверьте состояние диска и убедитесь, что LVM теперь правильно изменён:

root@Ubuntu14:~# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  989M  4.0K  989M   1% /dev
tmpfs          tmpfs     201M  716K  200M   1% /run
/dev/dm-0      ext4       39G  1.5G   35G   4% /
none           tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
none           tmpfs     5.0M     0  5.0M   0% /run/lock
none           tmpfs    1001M     0 1001M   0% /run/shm
none           tmpfs     100M     0  100M   0% /run/user
/dev/sda1      ext2      236M   40M  184M  18% /boot

Вот и всё! Вы успешно изменили размер раздела LVM внутри расширенного раздела.