Skip to content

Как добавить новый диск в Linux?

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

Команда Назначение
lsblk вывод списка блочных устройств
fdisk /dev/sdb создание нового раздела в неразмеченной области /dev/sdb, далее n - создать раздел, p - создать основной раздел, w - записать изменения на диск
pvs вывод списка физических томов
vgs вывод списка группы томов
lvs вывод списка логических томов
df -hT вывод списка разделов и файловых систем
pvcreate /dev/sdb1 создание нового физического тома /dev/sdb1
vgextend centos /dev/sdb1 добавление тома /dev/sdb1 в группу Centos
lvextend -l +100%FREE /dev/centos/root расширение логического тома /dev/centos/root
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 следует использовать другие инструкции.

Добавление диска

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

Примечание

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

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

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

[root@centos~]# lsblk  
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT  
sda               8:0    0   30G  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]  
sdb              8:16    0   10G  0 disk   
sr0              11:0    1 1024M  0 rom    
vda             252:0    0   20G  0 disk    

Структуру дискового пространства можно отобразить в виде схемы:

structurelvm

В данном примере мы видим, что в системе имеется 3 устройства:

  • /dev/sda
  • /dev/sdb
  • /dev/vda

На устройстве /dev/sda (30Gb) созданы 2 раздела:

  • Раздел /dev/sda1 (1Gb) является первичным с меткой /boot, на который установлен загрузчик ядра Linux.
  • Раздел /dev/sda2 (29Gb) является расширенным разделом LVM, на котором создан физический том /dev/sda2. На основе физического тома создана группа томов Centos, в которую входят 2 логических тома root и swap.

Устройства /dev/sdb (10Gb) и /dev/vda (20Gb) добавлены в систему, но не имеют разделов.
Выберем для расширения устройство /dev/sdb размером 10Gb.
Устройства (диски) в linux могут иметь следующие названия: sda, sdb, sdc и др.

Примечание

Устройство vda было создано во время первичного заказа виртуальной машины с опцией дополнительного диска.
В данном примере мы используем новое устройство /dev/sdb (название устройства может отличаться).

Шаг 2. Создание нового раздела на новом устройстве (диске)

Необходимо создать новый раздел командой: fdisk /dev/sdb, где /dev/sdb - имя нового раздела.

Далее последовательно ввести нижеуказанные ключи:
n - создать новый раздел;
p - создать новый основной раздел;
Выбрать номер раздела, его первый и последний секторы (по умолчанию Enter);
w - сохранить новый раздел на диск.

Созданный раздел можно увидеть, снова введя команду lsblk.

  • Используя утилиту fdisk, создайте новый раздел на новом устройстве, в нашем случае это /dev/sdb.

    Примечание

    Название устройства может отличаться.

    Введите n, чтобы создать новый раздел:

    [root@centos ~]# fdisk /dev/sdb
    Welcome to fdisk (util-linux 2.32.1).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    Device does not contain a recognized partition table.
    Created a new DOS disklabel with disk identifier 0xba91dc06.
    Command (m for help): n
    
  • Затем выберите p, чтобы создать новый основной раздел:

    Partition type
          p   primary (0 primary, 0 extended, 4 free)
          e   extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 1): 1
    

Примечание

В вашей системе может быть только 4 основных раздела на одном диске.
Если вы уже достигли этого предела, создайте расширенный раздел.

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

    First sector (2048-20971519, default 2048):
    Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519):
    Created a new partition 1 of type 'Linux' and of size 10 GiB.
    
  • Далее, нужно записать раздел на диск с помощью команды w.

    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
  • Проверьте, был ли создан раздел с помощью команды lsblk.

    [root@centos~]# lsblk  
    NAME                MAJ:MIN  RM  SIZE RO TYPE MOUNTPOINT  
    sda                 8:0      0   30G  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]  
    sdb                 8:16     0   10G  0  disk  
    ├─sdb1              8:17     0   10G  0  disk 
    sr0                 11:0     1 1024M  0  rom    
    vda                 252:0    0   20G  0  disk    
    

На устройстве /dev/sdb (10Gb) имеется раздел /dev/sdb1 (10Gb).

В данном примере мы видим, что в системе имеется физический том /dev/sda2, который входит в созданную группу томов centos.
В этой группе томов созданы 2 логических тома: root и swap.

Шаг 3. Анализ имеющейся конфигурации LVM и файловой системы

Для проверки существующей конфигурации 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  
Необходимо определить системный раздел и тип файловой системы на нем, который требуется расширить с помощью команды df -hT.

[root@centos~]# df-hT  
Filesystem              Type     Size   Used  Avail Use  Mounted on      
devtmpfs                devtmpfs 856M   0     856M  0%   /dev  
tmpfs                   tmpfs    875M   0     875M  0%   /dev/shm  
tmpfs                   tmpfs    875M   8.5M  867M  1%   /run  
tmpfs                   tmpfs    875M   0     875M  0%   /sys/fs/cgroup  
/dev/mapper/centos-root xfs      28G    2.1G  26G   8%   /  
/dev/sda1               xfs      1014M  339M  676M  34%  /boot  
tmpfs                   tmpfs    175M   0     175M  0%   /run/user/0  

В данном примере мы хотим расширить раздел с названием /dev/mapper/centos-root, размером 28Gb, имеющий файловую систему xfs, который имеет точку монтирования /.

Структура дискового пространства до расширения LVM отображена на схеме:

structurebefore

Шаг 4. Расширение LVM

  • На новом диске необходимо создать новый физический том с помощью команды:
    pvcreate /dev/sdb1, где /dev/sdb1 - имя нового раздела.

  • Расширить группу томов добавив к ней новый физический том с помощью команды:
    vgextend centos /dev/sdb1, где centos - название группы томов (можно узнать по команде vgs).

  • Расширить логический том, выполнив команду:
    lvextend -l +100%FREE /dev/centos/root, где

    • /dev/centos/root - путь расширяемой файловой системы,
    • centos - название группы (можно узнать по команде vgs),
    • root - название логического тома (можно узнать по команде lvs).

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

  • Создайте на только что созданном разделе физический том с помощью команды pvcreate.

Информация

В нашем примере созданный раздел - это /dev/sdb1. Обратите внимание, что название раздела может отличаться, а также проверьте созданный физический том командой pvs.

[root@centos~]# pvcreate/dev/sdb1
 Physical volume "dev/sdb1" successfully created.

[root@centos~]# pvs
PV         VG     Fmt   Attr PSize     PFree    
dev/sda2   centos lvm2  a--  <29.00g   0   
dev/sdb1          lvm2  ---  <10.00g   <10.00g 

В данном примере физический том имеет свободное пространство 10Gb и не имеет группы томов.

  • На шаге 3 мы узнали название группы томов. Расширьте эту группу томов, добавив к ней новый физический том с помощью команды vgextend.
    Проверьте изменения с помощью команды vgs.

Информация

В нашем примере группа томов называлась centos, новый физический том - /dev/sdb1. Обратите внимание, у вас будет свое название группы и физического тома. Столбец PFree показывает количество свободного места.

[root@centos~]# vgextend centos /dev/sdb1
Volume group "centos" successfully extended.

[root@centos~]# vgs
VG        #PV     #LV   #SN  Attr   PSize     PFree    
centos    2       2     0    wz--n- 38.99g    <10.00g

В данном примере группа томов centos включает 2 физических тома и имеет 10Gb свободного пространства.

  • Также, на шаге 3, кроме названия группы томов, мы узнали и название расширяемого логического тома. Расширьте этот логический том, выполнив команду lvextend.

Информация

В нашем примере группа томов называлась centos, логический том - root. Обратите внимание, у вас будет свое название группы и логического тома. Убедитесь в расширении логического тома командой lvs.

[root@centos~]# lvextend -l +100%FREE /dev/centos/root
Size of logical volume centos/root changed from <28.00 GiB (7167 extents) to 37.99 GiB (9726 extents).
Logical volume centos/root successfully resized.

[root@centos~]# lvs
LV     VG       Attr         LSize    
root   centos   -wi-ao----   37.99g                                                    
swap   centos   -wi-ao----   1.00g

В данном примере общий размер логического тома из группы томов centos расширен до 37.99Gb.

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

Примечание

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

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

    • Fedora, CentOS, RHEL, Oracle Linux, Alma Linux, Rocky Linux (файловая система XFS):
      xfs_growfs /dev/mapper/centos-root, где
      /dev/mapper/centos-root - название расширяемой файловой системы (название и тип можно узнать по команде df -hT).

    • Ubuntu, Debian (файловая система ext4):
      resize2fs /dev/mapper/ubuntu-root, где
      /dev/mapper/ubuntu-root - название расширяемой файловой системы (название и тип можно узнать по команде df -hT).

  • Нужно определить путь монтирования файловой системы раздела root, точку монтирования и тип файловой системы.
    В нашем примере путь - /dev/mapper/centos-root (или /dev/centos/root),
    точка монтирования - /,
    тип файловой системы - xfs.

Примечание

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

  • Далее необходимо увеличить размер файловой системы на логическом томе. В зависимости от типа файловой системы и дистрибутива выберите ниже, подходящий вам тип.

    • Для файловой системы 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.
      

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

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

[root@centos~]# df -hT /
Filesystem              Type  Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs   38G   2.2G 36G   6% /

[root@centos~]# lsblk  
NAME                MAJ:MIN  RM  SIZE RO TYPE MOUNTPOINTS  
sda                 8:0      0   30G  0  disk   
├─sda1              8:1      0    1G  0  part /boot  
└─sda2              8:2      0   29G  0  part   
      ├─centos-root 253:0    0   38G  0  lvm  /  
      └─centos-swap 253:1    0    1G  0  lvm  [SWAP]  
sdb                 8:16     0   10G  0  disk  
├─sdb1              8:17     0   10G  0  disk 
      └─centos-swap 253:1    0   38G  0  lvm  / 
sr0                 11:0     1 1024M  0  rom    
vda                 252:0    0   20G  0  disk  

Итоговая конфигурация дискового пространства и файловой системы отображена на схеме: