Как увеличить размер тома блочного хранилища?

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

Увеличение размера тома включает в себя два шага:

  1. Изменение размера самого тома (его нужно сделать больше).
  2. Расширение файловой системы (и разделов, если таковые имеются) в томе, чтобы использовать новое пространство.

Имейте в виду, любые изменения в файловой системе могут привести к потере данных, если что-то пойдет не так. Учитывая это, мы настоятельно рекомендуем выполнить резервное копирование данных в томе, прежде чем продолжить.

Важно!  Уменьшить размер тома невозможно из-за высокого риска потери или повреждения данных. Данные, записанные в том, при запуске устройства не обязательно записываются последовательно, поэтому при уменьшении доступного пространства целостность файловой системы и файлов в ней может быть нарушена.

Если вам больше не нужен такой большой том, самый безопасный способ уменьшить его размер – перенести содержимое в меньший том. Подключив оба тома к серверу, можно использовать такие инструменты, как rsync, для безопасной передачи файлов между двумя томами. Убедившись, что перемещение данных на новый том прошло успешно, вы можете уничтожить больший том.

Читайте также: Использование Rsync для синхронизации локального и удаленного каталогов на VPS

1: Изменение размера тома в панели управления

Первое, что нужно сделать – открыть вашу панель управления и изменить в меню размер тома. Этот процесс зависит от вашего провайдера.

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

2: Проверка разделов тома

Процесс настройки вашей файловой системы будет зависеть от того, был том разделен или нет. Если ваш том имеет файловую систему без каких-либо разделов, вы можете расширить файловую систему сразу. Если ваш том разбит на разделы, перед расширением файловой системы необходимо сначала расширить последний раздел.

Вы можете узнать, разделена ли ваша файловая система, с помощью следующей команды, указав имя вашего тома (например, volume-nyc1-01):

sudo lsblk --fs /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01

Примечание: Некоторые более старые версии lsblk не поддерживают опцию —fs. В этом случае вы можете определить вывод вручную с помощью опции -o NAME,FSTYPE,LABEL,UUID,MOUNTPOINT.

Вы увидите такой вывод:

NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sda  ext4         18efad39-6b7c-44d3-ba21-b0778911c4ed /mnt/volume-nyc1-01

Тип файловой системы в столбце FSTYPE будет содержать ext4, если файловая система не разделена, и что-то типа sda1, если в системе есть разделы.

3: Изменение размера нераспределенного тома

Команда для изменения размера зависит от вашей файловой системы: Ext4 или XFS.

Если файловой системой на томе является Ext4, передайте идентификатор тома (например, volume-nyc1-01) команде resize2fs:

sudo resize2fs /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01 is mounted on /mnt/volume-nyc1-01; on-line resizing required
old_desc_blocks = 25, new_desc_blocks = 32
The filesystem on /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01 is now 131072000 (4k) blocks long.

Если вы работаете с файловой системой XFS, передайте точку монтирования, к которой прикреплен раздел, инструменту xfs_growfs:

sudo xfs_growfs /mnt/your_mount_point
meta-data=/dev/sda               isize=512    agcount=4, agsize=32768000 blks
=                       sectsz=512   attr=2, projid32bit=1
=                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=131072000, imaxpct=25
=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=64000, version=2
=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 131072000 to 157286400

После этого вы можете проверить, доступна ли большая файловая система, с помощью df:

df -h -x tmpfs -x devtmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  1.1G   18G   6% /
/dev/sda        197G   60M  187G   1% /mnt/volume-nyc1-01

4: Изменение размера распределенного тома

Изменение размера разделенного тома включает в себя следующие шаги:

  • Определение разделов и точек монтирования и размонтирование всех разделов.
  • Перезапись таблицы разбиения.
  • Расширение файловой системы.

Определение и размонтирование разделов

Для начала найдите разделы и точки монтирования в томе (в команде укажите имя вашего тома):

sudo lsblk /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk
└sda1   8:1    0  100G  0 part /mnt/volume-nyc1-01-part1

В выводе отображаются имена /dev/sd* для тома и его разделов, схема разбиения и точки монтирования. Вы также можете видеть, что размер диска в настоящее время превышает размер записанных на него разделов. Это подтверждает, что изменение размера тома в панели управления прошло успешно.

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

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

sudo lsof +f -- /mnt/mount_point

Остановите процессы, перечисленные в выводе, а затем демонтируйте файловую систему:

sudo umount /mnt/mount_point

Повторите это для всех смонтированных разделов в томе.

Перезапись таблицы разбиения

Для перезаписи таблицы мы рекомендуем gdisk. Этот инструмент поддерживает резервное копирование существующей таблицы, явно перемещает данные восстановления GPT в конец диска и работает с разделами любого размера. Такие инструменты, как growpart, просты в работе, но версии, поставляемые с большинством дистрибутивов, могут изменять размер только разделов до 2 ТБ.

Перезапись таблицы разделов включает четыре этапа:

  1. Резервное копирование текущей таблицы.
  2. Перемещение резервных данных GPT.
  3. Удаление и воссоздание раздела.
  4. Запись новой таблицы разделов на том.

В любой момент во время этого процесса вы можете ввести вопросительный знак «?», чтобы отобразить меню справки о доступных командах.

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

cd ~
sudo gdisk /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01

Командная строка в терминале изменится:

Command (? for help):.

Используйте команду b для резервного копирования текущего раздела и введите имя файла резервной копии при появлении запроса.

b
partition_table.bak

Теперь нужно переместить резервные структуры данных GPT в конец тома (он изменился, когда мы увеличили его размер). Перейдите в меню experts:

x

Командная строка изменится, указывая, что вы находитесь в подменю.

Переместите структуры GPT в конец:

e
Relocating backup data structures to the end of the disk

Вернитесь в главное меню:

m

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

Чтобы использовать новое пространство в томе, мы расширим последний раздел в свободную область. На самом деле этот процесс включает сбор данных о текущем разделе, его удаление, а затем повторное создание (чтобы занять дополнительное пространство).

Начните с отображения текущей таблицы разделов:

p
Disk /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01: 419430400 sectors, 200.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 016F1E0A-83C5-4CF2-A78B-150F689CC45A
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 419430366
Partitions will be aligned on 2048-sector boundaries
Total free space is 209719229 sectors (100.0 GiB)
Number  Start (sector)    End (sector)  Size       Code  Name
1            2048       209713151   100.0 GiB   8300  primary

Запишите Number, Start (sector), Code и Name последнего раздела. В приведенном выше примере присутствует только один раздел. Мы удалим этот раздел и создадим новый со всеми теми же свойствами, за исключением его конечного расположения (и, следовательно, его размера).

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

d
Using 1

Теперь создайте новый раздел:

n

Вам будет задан ряд вопросов о новом разделе, который вы собираетесь создать. Используйте значения только что удаленного раздела, чтобы ответить на эти вопросы.

Вполне вероятно, что правильные значения будут предложены, в этом случае вы можете просто нажать Enter, чтобы принять значения по умолчанию. Чтобы получить подсказку о Last sector и расширить раздел до конца диска, примите значение по умолчанию:

Partition number (1-128, default 1):
First sector (34-419430366, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-419430366, default = 419430366) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Процесс создания раздела не запрашивает внутреннее имя раздела GPT. Если это важно для вас, вы можете установить предыдущее имя с помощью команды c. Опять же, вам будет предложено выбрать раздел, если у вас их несколько:

c
Enter name: primary

Теперь нужно записать таблицу нового раздела в том.

Когда вы закончите, проверьте новую таблицу, которую вы создали. Как мы уже говорили ранее, вся информация в таблице внизу вывода должна соответствовать предыдущей таблице, за исключением столбцов End (sector) и Size:

p
Disk /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01: 419430400 sectors, 200.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 016F1E0A-83C5-4CF2-A78B-150F689CC45A
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 419430366
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number  Start (sector)    End (sector)  Size       Code  Name
1            2048       419430366   200.0 GiB   8300  primary

После проверки информации запишите данные раздела в том и закройте инструмент с помощью команды w. Вам будет предложено подтвердить процедуру. Введите Y, если вы готовы:

w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01.
The operation has completed successfully.

Это увеличит последний раздел, после чего он будет использовать оставшееся свободное место в томе.

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

Далее нужно расширить файловую систему последнего раздела, чтобы использовать доступное пространство.

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

Процедура расширения файловой системы раздела зависит от типа файловой системы. Чтобы узнать это, введите:

sudo lsblk --fs /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01

Примечание: Некоторые более старые версии lsblk не поддерживают опцию —fs. В этом случае вы можете определить вывод вручную с помощью опции -o NAME,FSTYPE,LABEL,UUID,MOUNTPOINT.

Вот вывод этой команды:

NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sda  ext4         18efad39-6b7c-44d3-ba21-b0778911c4ed /mnt/volume-nyc1-01

Найдите тип файловой системы последнего раздела вашего тома, посмотрев на столбец FSTYPE.

Вы можете сопоставить имя раздела /dev/sd* с его идентификатором /dev/disk/by-id, проверив текущую ссылку в каталоге /dev/disk/by-id:

file /dev/disk/by-id/*
/dev/disk/by-id/scsi-My_Volume_volume-nyc1-01:       symbolic link to ../../sda
/dev/disk/by-id/scsi-My_Volume_volume-nyc1-01-part1: symbolic link to ../../sda1

Инструмент для изменения размера файловой системы Ext4 требует, чтобы вы проверили раздел на предмет несоответствий, которые могли возникнуть во время процедуры перераспределения. Только после этого вы сможете расширить его. Команда e2fsck может проверить размонтированные файловые системы.

Примечание: Если идентификатор /dev/disk/by-id недоступен, вы можете заменить его идентификатором /dev/sd*.

Передайте последний раздел тома программе e2fsck и используйте параметр -f для принудительной проверки:

sudo e2fsck -f /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01-part1
e2fsck 1.42.13 (17-May-2015)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/disk/by-id/scsi-My_Volume_volume-nyc1-01-part1: 13/6553600 files (0.0% non-contiguous), 459351/26213888 blocks

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

sudo resize2fs /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01-part1
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01-part1 to 52428539 (4k) blocks.
The filesystem on /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01-part1 is now 52428539 (4k) blocks long.

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

df -h -x tmpfs -x devtmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  1.1G   18G   6% /
/dev/sda1       197G   60M  187G   1% /mnt/volume-nyc1-01-part1

Перед расширением XFS рекомендуется использовать утилиту xfs_repair для проверки файловой системы на несоответствия, возникающие при перераспределении (это не обязательно). Передайте последний раздел на томе:

sudo xfs_repair /dev/disk/by-id/scsi-My_Volume_volume-nyc1-01-part1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
. . .
Phase 7 - verify and correct link counts...
done

После проверки диска смонтируйте файловую систему. Файловые системы XFS нужно сначала смонтировать, а потом расширить:

sudo mount -a

Команда xfs_growfs может расширить систему. Она принимает точки монтирования в качестве аргументов:

sudo xfs_growfs /mnt/volume-nyc1-01-part1
meta-data=/dev/sda1              isize=512    agcount=4, agsize=6553472 blks
=                       sectsz=512   attr=2, projid32bit=1
=                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=26213888, imaxpct=25
=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=12799, version=2
=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 26213888 to 52428539

Теперь проверьте доступное пространство с помощью команды df:

df -h -x tmpfs -x devtmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  1.1G   18G   6% /
/dev/sdb1       200G   33M  200G   1% /mnt/volume-nyc1-01-part1

Tags: