Как добавить на сервер NVMe диск

Тип диска NVMe доступен только на новых тарифах NVMe VPS. Покупая этот сервер у вас есть возможность активировать себе высокоскоростное хранилище. Предназначено для очень больших баз данных NoSQL (например, MongoDB, Elasticsearch, TimeScaleDB); системы аналитики и хранилища данных.

Установите инструменты

Чтобы разбить диск на разделы, воспользуемся утилитой parted. В большинстве случаев она уже установлена на сервере.

Если вы используете сервер Ubuntu или Debian и еще не расстались, вы можете установить его, набрав:

apt-get install parted

Если вы используете сервер CentOS или Fedora, вы можете установить его, набрав:

yum install parted

Определите новый диск в системе

Прежде чем настраивать диск, нам необходимо правильно идентифицировать его на сервере.

Для этого используем следующую команду:

parted -l | grep Error

Ответ будет следующим:

Error: /dev/nvme0n1: unrecognised disk label

Вы также можете использовать команду lsblk и найти диск правильного размера, не имеющий связанных разделов:

lsblk
root@test:~# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda     252:0    0  30G  0 disk
└─vda1  252:1    0  30G  0 part /
nvme0n1 259:1    0  30G  0 disk

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

root@test:~# parted /dev/nvme0n1 mklabel gpt

После выбора формата вы можете создать раздел, охватывающий весь диск, набрав:

root@test:~# parted -a opt /dev/nvme0n1 mkpart ext4 0% 100%

Если мы проверим lsblk, мы должны увидеть доступный новый раздел:

root@test:~# lsblk                                                       
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 30G  0 disk
└─vda1 252:1 0 30G 0 part /
nvme0n1 259:1 0 30G 0 disk
└─nvme0n1p1 259:3 0 30G 0 part

Создайте файловую систему на новом разделе.

Для этого будем использовать утилиту mkfs.ext4

root@test:~# mkfs.ext4 -L nvme /dev/nvme0n1p1
mke2fs 1.45.5 (07-Jan-2020)
Discarding device blocks: done                           
Creating filesystem with 7863808 4k blocks and 1966080 inodes
Filesystem UUID: 50d5f8b7-d794-41cf-9ae8-d1d1f8b53add
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000
Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

Если вы хотите изменить метку раздела позже, вы можете использовать команду e2label:

root@test:~# e2label /dev/nvme0n1p1 newlabel

Вы можете увидеть все способы идентифицировать свой раздел с помощью lsblk. Мы хотим найти имя, метку и UUID раздела.

root@test:~# lsblk --fs
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
vda                                                                            
└─vda1 ext4 root ed61e67e-7605-4383-ac16-fe54ee2ede87 26G 7% /
nvme0n1                                                                        
└─nvme0n1p1 ext4 newlabel 50d5f8b7-d794-41cf-9ae8-d1d1f8b53add

Смонтируйте новую файловую систему

Теперь мы можем смонтировать файловую систему для использования.

root@test:~# mkdir -p /var/lib/mysql 
root@test:~# mount -o defaults /dev/nvme0n1p1 /var/lib/mysql 
root@test:~# fdisk -l
Disk /dev/vda: 30 GiB, 32212254720 bytes, 62914560 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: 0x941390d7
Device     Boot Start      End  Sectors Size Id Type
/dev/vda1  *     2048 62914559 62912512  30G 83 Linux
Disk /dev/nvme0n1: 30 GiB, 32212254720 bytes, 62914560 sectors
Disk model: SAMSUNG MZPLJ3T2HBJR-00007             
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: gpt
Disk identifier: BA6956DF-1E18-4623-AF5E-4ACB6E5FE6A0
Device Start End Sectors Size Type
/dev/nvme0n1p1  2048 62912511 62910464  30G Linux filesystem

Смонтированный раздел обязательно необходимо добавить в файл /etc/fstab 

например:

UUID="50d5f8b7-d794-41cf-9ae8-d1d1f8b53add" /var/lib/mysql auto errors=remount-ro,noatime,nodiratime,nodev,nofail 0 2

где 50d5f8b7-d794-41cf-9ae8-d1d1f8b53add - индификатор диска

/var/lib/mysql - раздел в который монтирывали диск

Тестируем скорость дисков

root@test:/# sudo dd if=/dev/zero of=/var/lib/mysql/test1.img bs=1G count=1 oflag=dsync

1+0 records in

1+0 records out

1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.996802 s, 1.1 GB/s

root@test:~# sudo dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync

1+0 records in

1+0 records out

1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.34612 s, 201 MB/s

В первом случае скорость записи равна 1.1 GB/s, что в 8 раз быстрее стандартного SSD диска.

Вы  смонтировали данный диск под раздел /var/lib/mysql  и тем самым увеличили скорость работы сервера баз данных. Можете таким же способом смонтировать  диск в другой нужный вам раздел (например /mnt/data).