Skip to content

Как расширить существующий диск в Linux?

Краткая справка по командам:

Команда Назначение
lsblk вывод списка блочных устройств
pvs вывод списка физических томов
vgs вывод списка группы томов
lvs вывод списка логических томов
fdisk -l просмотр разделов диска
dnf -y install cloud-utils-growpart установка утилиты growpart для Fedora, CentOS, RHEL, Oracle Linux, Alma Linux, Rocky Linux
apt -y install cloud-guest-utils установка утилиты growpart для Ubuntu, Debian
growpart /dev/sda 2 расширение раздела /dev/sda2
pvresize /dev/sda2 расширение существующего физического тома /dev/sda2
lvextend -r -l +100%FREE /dev/centos/root расширение логического тома /dev/centos/root из группы томов centos
df -hT вывод списка разделов и файловых систем
xfs_growfs /dev/mapper/centos-root увеличение размера файловой системы XFS на логическом томе /dev/mapper/centos-root (для Fedora, CentOS, RHEL, Oracle Linux, Alma Linux, Rocky Linux)
resize2fs /dev/mapper/ubuntu-root увеличение размера файловой системы EXT4 на логическом томе /dev/mapper/ubuntu-root (для Ubuntu, Debian)

Информация

Для файловой системы btrfs следует использовать другие инструкции.

В данном примере будет описано как расширить существующий раздел на диске, используя 15Gb свободного дискового пространства из неразмеченной области этого же диска. Расширение будет выполнено на примере дистрибутива CentOS.
Данная инструкция подходит для большинства дистрибутивов Linux, дает подробную информацию как корректно расширить дисковое пространство, учитывает особенности команд различных дистрибутивов.

Примечание

Все команды необходимо выполнять под пользователем root либо с правами суперпользователя (sudo).
При выполнении данной инструкции есть риск потери данных, поэтому предварительно рекомендуется сделать резервную копию (backup) виртуальной машины.

Шаг 1. Анализ конфигурации дискового пространства

  1. Сперва следует определить название раздела, который собираетесь расширить и объем неразмеченной области на устройстве (диске) с помощью команды lsblk.

    [root@centos~]# lsblk  
    NAME            MAJ:MIN   RM  SIZE RO TYPE MOUNTPOINT  
    sda               8:0      0   45G  0 disk   
    ├─sda1            8:1      0    1G  0 part /boot  
    └─sda2            8:2      0   29G  0 part   
        ├─centos-root 253:0    0   28G  0 lvm  /  
        └─centos-swap 253:1    0    1G  0 lvm  [SWAP]  
    sr0               11:0    1 1024M  0 rom     
    

    В данном примере мы видим, что в системе имеется 1 устройство (диск) /dev/sda размером 45Gb.
    На диске созданы 2 раздела общим объемом 30Gb:

    • основной /dev/sda1 - 1Gb,
    • расширенный /dev/sda2 - 29Gb,
      оставшиеся 15Gb остаются в неразмеченной области.

    Также мы видим, что раздел /dev/sda2 (29Gb) является расширенным разделом LVM, где имеется группа томов centos и 2 логических тома root и swap. Будем расширять логический том root на расширенном разделе dev/sda2 используя свободные 15Gb из неразмеченной области диска sda.

  2. Затем следует проверить существующую конфигурацию LVM командами:

    • pvs - вывести название и количество имеющихся физических томов (PV)
    • vgs - вывести группы томов (VG)
    • lvs - вывести логические тома (LV)
    [root@centos~]# pvs  
    PV         VG     Fm   Attr PSize    PFree    
    dev/sda    centos lvm2 a--  <29.00g  0      
    
    [root@centos~]# vgs  
    VG         #PV    #LV  #SN  Attr   VSize    PFree  
    dev/sda    centos lvm2 0    wz--n  <29.00g  0  
    
    [root@centos~]# lvs  
    LG         VG      Attr       LSize    
    root       centos  -wi-ao---- <28.00g  
    swap       centos  -wi-ao---- 1.00g  
    
  3. Проверьте разделы диска с помощью утилиты fdisk -l.

    Пример отображения для CentOS:

    [root@centos~]# fdisk -l
    Disk /dev/sda: 45GiB, 48318382080 bytes, 94371840 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
    Disklabel type: dos
    Disk identifier: 0xa2d4566c
    Device    Boot   Start   End      Sectors  Size Id  Type
    /dev/sda1   *    2048    2099199  2097152  1G   83  Linux
    /dev/sda2        2099200 65914559 60815360 29G  8e  Linux LVM
    

    Раздел /dev/sda2 является расширяемым разделом LVM.

    Пример отображения для Ubuntu:

    [root@centos~]# fdisk -l
    Disk /dev/sda: 45GiB, 48318382080 bytes, 94371840 sectors
    Disk model: QEMU HARDDISK
    Units: sectors of 1*512=512 bytes 
    Sector size (logical/physical): 512 bytes / 512 bytes
    I / O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0xa2d4566c
    
    Device    Boot   Start   End      Sectors  Size  Id  Type
    /dev/sda1   *    2048    1050623  1048576  512M   b  W95 FAT32
    /dev/sda2        1052670 61863933 61863933 29.5G  5  Extended
    /dev/sda5        1052672 61863933 61863931 29.5G  8e Linux LVM
    

    Примечание

    Обратите внимание, в дистрибутиве Ubuntu сектора раздела /dev/sda5 входят в сектора раздела /dev/sda2, т.е. имеют одно дисковое пространство.

    Раздел /dev/sda2 является расширенным, раздел /dev/sda5 является разделом LVM, созданным на расширенном разделе. Поэтому, для того, чтобы расширить логический том root предварительно необходимо расширить оба этих раздела.

Шаг 2. Расширение раздела с помощью утилиты growpart

  1. Сперва следует установить утилиту growpart в соответствии с вашим дистрибутивом.

    • для дистрибутивов Fedora, CentOS, RHEL, Oracle Linux, Alma Linux, Rocky Linux команда:

      [root@centos ~]# dnf -y install cloud-utils-growpart

    Примечание

    Для устаревших дистрибутивов (CentOS 7.9) вместо dnf используйте yum.

    • для дистрибутивов Ubuntu, Debian команда:

      [root@ubuntu ~]# apt -y install cloud-guest-utils

  2. Затем необходимо расширить раздел (в нашем случае /dev/sda2 - корневой раздел (root)) на всю неразмеченную область, т.е. в нашем случае на 15Gb. с помощью команды:
    growpart /dev/sda 2, где /dev/sda 2 - путь к устройству диска и номер расширяемого раздела.

    Важно

    Для Ubuntu может потребоваться расширить 2 раздела (это можно узнать по команде fdisk -l).

    Примечание

    В нашем примере /dev/sda2 - корневой раздел. Обратите внимание, у вас может быть другой раздел.

    Для Ubuntu, требуется расширить 2 раздела: расширенный раздел /dev/sda2 и раздел LVM /dev/sda5:

    [root@ubuntu ~]# growpart /dev/sda 2  
    [root@ubuntu ~]# growpart /dev/sda 5    
    

    Примечание

    У вас могут быть другие разделы для расширения, проверить это можно командами lsblk и fdisk -l.

  3. Убедитесь в расширении раздела командой lsblk.

    [root@centos~]# lsblk  
    NAME            MAJ:MIN   RM  SIZE RO TYPE MOUNTPOINT  
    sda               8:0      0   45G  0 disk   
    ├─sda1            8:1      0    1G  0 part /boot  
    └─sda2            8:2      0   44G  0 part   
        ├─centos-root 253:0    0   28G  0 lvm  /  
        └─centos-swap 253:1    0    1G  0 lvm  [SWAP]  
    sr0               11:0    1 1024M  0  rom 
    

Шаг 3. Расширение пространства LVM

  1. Сперва необходимо расширить существующий физический том (physical volume) с помощью команды:

    pvresize /dev/sda2, где /dev/sda2 - имя расширяемого раздела

    Примечание

    В нашем примере физический том - /dev/sda2. Обратите внимание у вас может быть другой другой физический том.

    [root@centos~]# pvs  
    PV           VG     Fmt   Attr PSize    PFree    
    /dev/sda2    centos lvm2  a--  <29.00g  0      
    
    [root@centos~]# pvresize /dev/sda2  
     Physical volume "dev/sda2" changed
     1 physical volume(s) resized or updated / 0 physical volume(s) not relized
    
    [root@centos~]# pvs  
    PV           VG     Fmt   Attr PSize    PFree    
    /dev/sda2    centos lvm2  a--  <44.00g  15.00g 
    
  2. Проверьте размер группы томов (volume group). Значение столбца VFree должно увеличиться на расширяемый объем.

    [root@centos~]# vgs  
    VG        #PV   #LV   #SN   Attr   VSize    VFree    
    centos    1     2     0     wz--n- <44.00g  15.00g 
    
  3. Расширьте логический том (logical volume) используя команду lvextend -r -l +100%FREE /dev/centos/root, где
    centos - имя группы томов,
    root - имя логического тома.

    Примечание

    У вас могут быть другие названия группы и логического тома.
    Проверьте выполнение командой lvs - значение столбца PFree должно увеличится.

    [root@centos~]# lvs  
    LV         VG       Attr       LSize    
    root       centos  -wi-ao----  <28.00g  
    swap       centos  -wi-ao----  1.00g  
    
    [root@centos~]# lvextend -l +100%FREE /dev/centos/root
    Size of logical volume centos/root changed from <28.00 GiB (7167 extents) to <43.00 GiB (1107 extents).
    Logical volume centos/root successfully resized.
    
    meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=1834752blks
        =       sectsz=512  attr=2, projid32bit=1
        =       crc=1   finobt=1,sparce=1,rmapbt=0
        =       reglink=1
    data=       bsize=4096  blocks=7339008,imaxpct=25
        =       sunit=0  swidth=0 blks
    naming =version2    bsize=4096  ascii-ci=0,ftype=1
    log  =internal log  bsize=4096  blocks=3583, version=2
        =       sectsz=512 sunit=0 blks, lazy-count=1
    realtime=none       extsz=4096 blocks=0, rtextents=0
    data blocks changed from 7339008 to 11271168
    
    [root@centos~]# lvs  
    LV         VG       Attr       LSize    
    root       centos  -wi-ao----  <43.00g  
    swap       centos  -wi-ao----  1.00g 
    

    Note

    В команде выше, вместо /dev/centos/root можно указать другой путь /dev/mapper/centos-root (можно узнать по команде df -hT), результат будет тот же.

Шаг 4. Расширение файловой системы

Важно

Данная операция несет риск потери данных. Предварительно рекомендуется сделать резервную копию виртуальной машины.

  1. Для увеличения файловой системы на логическом томе, необходимо ввести команду в зависимости от дистрибутива:

    • Для файловой системы XFS (дистрибутивы Fedora, CentOS, RHEL, Oracle Linux, Alma Linux, Rocky Linux) используется утилита xfs_growfs и путь указанный в выводе команды df -hT для расширяемого раздела (в примере ниже для Centos - это /dev/mapper/centos-root).
    [root@centos~]# df -hT /dev/centos/root
    Filesystem              Type  Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root xfs    28G  2.1G   26G   8% /
    [root@centos~]]# xfs_growfs /dev/mapper/centos-root
    meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=1834752 blks
            =                       sectsz=512   attr=2, projid32bit=1
            =                       crc=1        finobt=1, sparse=1, rmapbt=0
            =                       reflink=1
    data    =                       bsize=4096   blocks=7339008, imaxpct=25
            =                       sunit=0      swidth=0 blks
    naming  =version 2              bsize=4096   ascii-ci=0, ftype=1
    log     =internal log           bsize=4096   blocks=3583, version=2
            =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 7339008 to 9959424
    
    • Для файловой системы ext4 (дистрибутивы Ubuntu, Debian) используется утилита resize2fs и путь указанный в выводе команды df -hT для расширяемого раздела (в примере ниже для Ubuntu - это /dev/mapper/ubuntu-root).
    [root@ubuntu:~]# df -hT 
    Filesystem              Type  Size  Used Avail Use% Mounted on
    /dev/mapper/ubuntu-root ext4  38G   7.1G  29G   20% /
    
    root@ubuntu:~# resize2fs /dev/mapper/ubuntu-root
    resize2fs 1.45.5 (07-Jan-2020)
    Filesystem at /dev/mapper/ubuntu-root is mounted on/; on-line resizing required
    old_desc_blocks=4, new_desc_blocks=5
    The filesystem on /dev/mapper/ubuntu-root is now 10101760 (4k) blocks long.
    
  2. Нужно определить путь монтирования файловой системы расширяемого раздела, точку монтирования и тип файловой системы.
    В нашем примере путь - /dev/mapper/centos-root (или /dev/centos/root),
    точка монтирования - /,
    тип файловой системы - xfs.

    Примечание

    Обратите внимание, у вас будет свой путь и тип файловой системы.

Шаг 5. Проверка

Для проверки нового размера диска и файловой системы следует повторить команды df -hT и lsblk.

[root@centos~]# df-hT  
Filesystem              Type     Size   Used  Avail Use  Mounted on      
devtmpfs                devtmpfs 1.8G   0     1.8G  0%   /dev  
tmpfs                   tmpfs    1.9G   0     1.9G  0%   /dev/shm  
tmpfs                   tmpfs    1.9G   9.2M  1.9G  1%   /run  
tmpfs                   tmpfs    1.9G   0     1.9G  0%   /sys/fs/cgroup  
/dev/mapper/centos-root xfs      43G    5.0G  39G   12%   /  
/dev/sda1               xfs      1014M  427M  588M  43%  /boot  
tmpfs                   tmpfs    374M   32K   374M  1%   /run/user/1000  

[root@centos~]# lsblk  
NAME            MAJ:MIN   RM  SIZE RO TYPE MOUNTPOINT  
sda               8:0      0   45G  0 disk   
├─sda1            8:1      0    1G  0 part /boot  
└─sda2            8:2      0   29G  0 part   
    ├─centos-root 253:0    0   43G  0 lvm  /  
    └─centos-swap 253:1    0    1G  0 lvm  [SWAP]  
sr0               11:0     1 1024M  0 rom