Найти в Дзене
Linux | Network | DevOps

Как добавить или расширить диск в Linux

Бывает что место кончилось, а желание писать ещё нет. В том смысле что базы росли росли и выросли - место на диске кончилось, или uploads могли сожрать всё свободное место. Что можно сделать в этом случае ? Можно расширить раздел или добавить диск, при добавлении диска его надо будет разметить. О том как это сделать будет эта статья-инструкция. Примеры будут приведены для Ubuntu 24, в качестве виртуальной площадки используем cloud.ru. Для начала нам надо понять что текущего объёма хранилища нам недостаточно. Информация об объёме хранилища. df -h Вывод в консоль: Filesystem Size Used Avail Use% Mounted on tmpfs 97M 1.2M 96M 2% /run /dev/vda2 15G 2.5G 12G 18% / tmpfs 481M 0 481M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 481M 0 481M 0% /run/qemu tmpfs 97M 12K 97M 1% /run/user/1000 На диске /dev/vda2 доступно 12G (на самом деле не на диске, а на дисковом разделе, на самом деле
Оглавление

Бывает что место кончилось, а желание писать ещё нет. В том смысле

что базы росли росли и выросли - место на диске кончилось, или uploads

могли сожрать всё свободное место.

Что можно сделать в этом случае ? Можно расширить раздел или добавить диск, при добавлении диска его надо будет разметить.

О том как это сделать будет эта статья-инструкция. Примеры будут

приведены для Ubuntu 24, в качестве виртуальной площадки используем

cloud.ru.

Как расширить диск

Для начала нам надо понять что текущего объёма хранилища нам недостаточно.

Информация об объёме хранилища.

df -h

Вывод в консоль:

Filesystem Size Used Avail Use% Mounted on

tmpfs 97M 1.2M 96M 2% /run

/dev/vda2 15G 2.5G 12G 18% /

tmpfs 481M 0 481M 0% /dev/shm

tmpfs 5.0M 0 5.0M 0% /run/lock

tmpfs 481M 0 481M 0% /run/qemu

tmpfs 97M 12K 97M 1% /run/user/1000

На диске /dev/vda2 доступно 12G (на самом деле не на диске, а на дисковом

разделе, на самом деле не дисковом разделе, а в файловой системе) ,

допустим нам этого не хватает, добавим ещё 15.

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

df -h

Вывод в консоль:

Filesystem Size Used Avail Use% Mounted on

tmpfs 97M 1.2M 95M 2% /run

/dev/vda2 15G 2.5G 12G 18% /

tmpfs 481M 0 481M 0% /dev/shm

tmpfs 5.0M 0 5.0M 0% /run/lock

tmpfs 481M 0 481M 0% /run/qemu

tmpfs 97M 12K 97M 1% /run/user/1000

Доступно по прежнему 12G, как ни странно место не увеличилось, потому что был увеличен размер диска, но не был увеличен раздел диска. Увеличим раздел.

Смотрим какие диски зарегистрированы в системе.

ls -la /dev | grep disk

Вывод в консоль:

crw-rw---- 1 root disk 10, 234 Jan 1 23:50 btrfs-control

drwxr-xr-x 7 root root 140 Jan 1 23:50 disk

brw-rw---- 1 root disk 7, 0 Jan 1 23:50 loop0

brw-rw---- 1 root disk 7, 1 Jan 1 23:50 loop1

brw-rw---- 1 root disk 7, 2 Jan 1 23:50 loop2

brw-rw---- 1 root disk 7, 3 Jan 1 23:50 loop3

brw-rw---- 1 root disk 7, 4 Jan 1 23:50 loop4

brw-rw---- 1 root disk 7, 5 Jan 1 23:50 loop5

brw-rw---- 1 root disk 7, 6 Jan 1 23:50 loop6

brw-rw---- 1 root disk 7, 7 Jan 1 23:50 loop7

crw-rw---- 1 root disk 10, 237 Jan 1 23:50 loop-control

brw-rw---- 1 root disk 253, 0 Jan 2 00:41 vda

brw-rw---- 1 root disk 253, 1 Jan 1 23:50 vda1

brw-rw---- 1 root disk 253, 2 Jan 1 23:50 vda2

vda2 - это примонтированный раздел, который нам бы хотелось расширить.

Соответственно vda это диск, разделы которого мы будем изменять.

Перед изменениями записываем текущую конфигурацию разделов в файл.

sfdisk -d /dev/vda > vda_partition_bak.dmp

Пытаемся расширить раздел в тестовом режиме.

growpart -N /dev/vda 2

Вывод в консоль:

CHANGE: partition=2 start=4096 old: size=31453151 end=31457246 new: size=62910431 end=62914526

# === old sfdisk -d ===

label: gpt

label-id: 79E126D7-A1D1-4A98-8824-44C5DEF5EA96

device: /dev/vda

unit: sectors

first-lba: 34

sector-size: 512

/dev/vda1 : start= 2048, size= 2048, type=21686148-6449-6E6F-744E-656564454649, uuid=A0C01335-547A-462F-9A0B-0BA2EF4B7109

/dev/vda2 : start= 4096, size= 31453151, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=0931C894-6056-4ADD-888B-2CEAA0F62438

# === new sfdisk -d ===

label: gpt

label-id: 79E126D7-A1D1-4A98-8824-44C5DEF5EA96

device: /dev/vda

unit: sectors

first-lba: 34

sector-size: 512

/dev/vda1 : start= 2048, size= 2048, type=21686148-6449-6E6F-744E-656564454649, uuid=A0C01335-547A-462F-9A0B-0BA2EF4B7109

/dev/vda2 : start= 4096, size= 62910431, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=0931C894-6056-4ADD-888B-2CEAA0F62438

Изменения которые нам предлагает программа:

CHANGE: partition=2 start=4096 old: size=31453151 end=31457246 new: size=62910431 end=62914526

Выполняем расширение раздела.

growpart /dev/vda 2

Вывод в консоль:

CHANGED: partition=2 start=4096 old: size=31453151 end=31457246 new: size=62910431 end=62914526

Расширяем разметку файловой системы на весь раздел.

resize2fs /dev/vda2

Вывод в консоль:

resize2fs 1.47.0 (5-Feb-2023)

Filesystem at /dev/vda2 is mounted on /; on-line resizing required

old_desc_blocks = 2, new_desc_blocks = 4

The filesystem on /dev/vda2 is now 7863803 (4k) blocks long

Проверяем объём хранилища.

df -h

Вывод в консоль:

Filesystem Size Used Avail Use% Mounted on

tmpfs 97M 1.2M 95M 2% /run

/dev/vda2 30G 2.6G 26G 10% /

tmpfs 481M 0 481M 0% /dev/shm

tmpfs 5.0M 0 5.0M 0% /run/lock

tmpfs 481M 0 481M 0% /run/qemu

tmpfs 97M 12K 97M 1% /run/user/1000

Видим

/dev/vda2 => Avail: 26G , объём хранилища увеличился, мы увеличивали

на 15, и с 12 должен был увеличиться на 15 до 27, почему только до 26

вопросы к https://cloud.ru/, или это так работает округление при выводе.

Написано на основе https://unix.stackexchange.com/a/636803

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

Как добавить новый диск рассказать не долго, только нам надо не просто

новый диск добавить в виртуалку, нам надо этот новый диск добавить в

хранилище, что бы операционная система могла предоставить нам объём

этого диска для записи файлов.

Новый диск добавим через панель хостинга.

Вообще зачем добавлять диск если можно расширить имеющийся? Допустим нам на сервере надо произвести единоразово обработку данных, которые будут не нужны после обработки и получения результата. Тогда мы можем просто удалить этот диск из системы. Поскольку у нас виртуалка и платим мы за использование, нам не надо будет платить за объём который мы не

используем.

Посмотрим на диски операционной системы послед добавления диска в виртуалку.

lsblk

Вывод в консоль:

vda 253:0 0 30G 0 disk

��vda1 253:1 0 1M 0 part

��vda2 253:2 0 30G 0 part /

vdb 253:16 0 1G 0 disk

  • vda - это диск который мы расширяли
  • vdb - новый диск который мы добавили в панели хостинга

(Во время написания статьи моя винда решила перезагрузиться и текст

записаный в notepad++ чуть чуть поломался поэтому здесь вы видите

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

не в этот раз: или сборка notepad++ неудачная, или раньше мне сказочно

везло.)

После добавления диска, проверяем объём хранилища.

df -h

Вывод в консоль:

Filesystem Size Used Avail Use% Mounted on

tmpfs 97M 1.2M 95M 2% /run

/dev/vda2 30G 2.6G 26G 10% /

tmpfs 481M 0 481M 0% /dev/shm

tmpfs 5.0M 0 5.0M 0% /run/lock

tmpfs 481M 0 481M 0% /run/qemu

tmpfs 97M 12K 97M 1% /run/user/1000

Как видим ни чего не поменялось, доступно по прежнему 26G и не видно нового диска на vdb на 1G.

Раздел на диске не создан, файловой системы на диске не размещено. Исправим этот недочёт.

Создадим таблицу разделов для диска vdb.

parted /dev/vdb mklabel gpt

Вывод в консоль:

Information: You may need to update /etc/fstab.

Создадим раздел на диске vdb.

parted -a opt /dev/vdb mkpart primary ext4 0% 100%

Вывод в консоль:

Information: You may need to update /etc/fstab.

Проверим что раздел действительно создался.

lsblk

Вывод в консоль:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

vda 253:0 0 30G 0 disk

��vda1 253:1 0 1M 0 part

��vda2 253:2 0 30G 0 part /

vdb 253:16 0 1G 0 disk

��vdb1 253:17 0 1022M 0 part

На диске vdb появился раздел vdb1.

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

mkfs.ext4 -L experimental-data /dev/vdb1

Вывод в консоль:

Warning: label too long; will be truncated to 'experimental-dat'

mke2fs 1.47.0 (5-Feb-2023)

Discarding device blocks: done

Creating filesystem with 261632 4k blocks and 65408 inodes

Filesystem UUID: 313023f0-1ec2-45fb-9cb2-8322637a072f

Superblock backups stored on blocks:

32768, 98304, 163840, 229376

Allocating group tables: done

Writing inode tables: done

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done

Проверяем объём хранилища.

df -h

Вывод в консоль:

Filesystem Size Used Avail Use% Mounted on

tmpfs 97M 1.2M 95M 2% /run

/dev/vda2 30G 2.6G 26G 10% /

tmpfs 481M 0 481M 0% /dev/shm

tmpfs 5.0M 0 5.0M 0% /run/lock

tmpfs 481M 0 481M 0% /run/qemu

tmpfs 97M 12K 97M 1% /run/user/1000

Ни чего не изменилось, новый диск не доступен в файловой системе.

Посмотрим какие файловые системы зарегистрированы в операционной системе.

lsblk --fs

Вывод в консоль:

NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS

vda

��vda1

��vda2 ext4 1.0 e0013385-5b8e-4adf-9cdd-870f98db5b60 25.5G 9% /

vdb

��vdb1 ext4 1.0 experimental-dat 313023f0-1ec2-45fb-9cb2-8322637a072f

Видим что файловая система vdb1 не используется, для неё нет точки монтирования.

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

mkdir -p /mnt/experimental

mount -o defaults /dev/vdb1 /mnt/experimental

Проверяем объём хранилища.

df -h

Вывод в консоль:

Filesystem Size Used Avail Use% Mounted on

tmpfs 97M 1.2M 95M 2% /run

/dev/vda2 30G 2.6G 26G 10% /

tmpfs 481M 0 481M 0% /dev/shm

tmpfs 5.0M 0 5.0M 0% /run/lock

tmpfs 481M 0 481M 0% /run/qemu

tmpfs 97M 12K 97M 1% /run/user/1000

/dev/vdb1 988M 24K 921M 1% /mnt/experimental

Видим что появилась новая файловая система /dev/vdb1, доступный размер 921M, точка монтирования /mnt/experimental, все что будет записано по пути

/mnt/experimental будет храниться на разделе vdb1 нового диска vdb.

Объём доступного хранилища увеличен, казалось бы мы всё сделали, но не

совсем. При загрузке операционной системы автоматически монтируются

только заданные разделы, наш раздел надо задать для автоматического

примонтирования.

Для этого отредактируем файл /etc/fstab, перед редактированием сделаем резервную копию.

cp /etc/fstab /etc/fstab.bak

Вместе с Ubuntu идёт текстовый редактор nano, отредактируем файл с помощью этой программы.

nano /etc/fstab

Добавляем новую строку, в конец файла конечно.

LABEL=experimental-data /mnt/experimental ext4 defaults 0 2

  • Ctrl+X (закрыть программу)
  • Y (согласиться с сохранением изменений)
  • Enter (согласиться на запись в предложенный файл)

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

reboot

# после загрузки проверяем что раздел примонтирован автоматически

df -h

Как создать базу данных на новом диске

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

Для СУБД PostgreSQL, команды будет такими:

Создаём директорию для размещения файлов базы данных.

mkdir -p /mnt/experimental/data

Подключаемся к СУБД, создаём табличное пространство fias_data.

CREATE TABLESPACE fias_data OWNER postgres LOCATION '/mnt/experimental/data';

Создаём базу данных fias в созданном табличном пространстве fias_data на отдельном диске.

CREATE DATABASE fias WITH OWNER postgres TABLESPACE fias_data;