Linux: увеличение размера раздела без LVM с сохранением данных на ext4

By | 10/20/2018
 

Емеется EC2, на котором был увеличен EBS диск с 8 до 16 гиг.

Задача – увеличить размер раздела на диске, при этом сохранив данные.

Проблема в том, что на диске уже создан раздел, и этот раздел – фиксированный, и он не LVM:

admin@monitonrig-dev:~$ lsblk /dev/xvdb
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvdb    202:16   0  16G  0 disk
└─xvdb1 202:17   0   8G  0 part /data

Система в примерах ниже – Debian 9, но пример подходит для любой Linux-системы.

Важно: не верьте мне! Дабы потом не писать комментариев в духе “Я всё сделал по вашему мануалу, и потерял все данные!!!” (где-то такой был) – сначала проверяем на виртуальной машинке в Virtualbox раза два-три, потом пять раз всё бекапим с “боевой” машинки, и только после этого – выполняем изменения.

Выполняем следующие шаги:

  1. fdisk: увеличаем размер раздела /dev/xvdb1
  2. перезагружаем машину, что бы проверить, что всё работает
  3. resize2fs – увеличиваем размер файловой системы (тут это ext4)

fdisk – увеличиваем размер раздела

Шаги тут:

  1. удаляем существующий раздел
  2. создаём новый
  3. записываем изменения таблицы разделов

Проверяем разметку диска сейчас:

root@monitonrig-dev:/home/admin# fdisk -l /dev/xvdb
Disk /dev/xvdb: 16 GiB, 17179869184 bytes, 33554432 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: 0x82283426
Device     Boot Start      End  Sectors Size Id Type
/dev/xvdb1       2048 16777215 16775168   8G 83 Linux

Важно запомнить первый сектор, на котором начинается раздел – 2048.

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

Теперь – удаляем и пересоздаём раздел.

Важно: на вопрос:

Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: n

Отвечаем n – не удаляем.

root@monitonrig-dev:/home/admin# fdisk /dev/xvdb
Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/xvdb: 16 GiB, 17179869184 bytes, 33554432 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: 0x82283426
Device     Boot Start      End  Sectors Size Id Type
/dev/xvdb1       2048 16777215 16775168   8G 83 Linux
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): p
Disk /dev/xvdb: 16 GiB, 17179869184 bytes, 33554432 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: 0x82283426
Command (m for help): n
Partition type
p   primary (0 primary, 0 extended, 4 free)
e   extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-33554431, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-33554431, default 33554431):
Created a new partition 1 of type 'Linux' and of size 16 GiB.
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: n
Command (m for help): p
Disk /dev/xvdb: 16 GiB, 17179869184 bytes, 33554432 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: 0x82283426
Device     Boot Start      End  Sectors Size Id Type
/dev/xvdb1       2048 33554431 33552384  16G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

Пробуем перемонтировать раздел, что бы проверить до ребута:

root@monitonrig-dev:/home/admin# mount /dev/xvdb1 /data/
root@monitonrig-dev:/home/admin# ls -l /data/
total 24
drwxr-xr-x  4 grafana grafana  4096 Oct 18 14:01 grafana
drwxr-xr-x  2 root    root    16384 Jun 22 13:15 lost+found
drwxr-xr-x 12 root    root     4096 Oct 15 14:00 prometheus

Проверяем /etc/fstab – но у меня тут задано по имени раздела, так что разницы никакой, но в случае использования UUID – его надо будет обновить:

root@monitonrig-dev:/home/admin# blkid /dev/xvdb1
/dev/xvdb1: UUID="b9d96078-2fb2-4bf0-b388-e9cf0499d169" TYPE="ext4"
root@monitonrig-dev:/home/admin# cat /etc/fstab | grep data
/dev/xvdb1 /data ext4 defaults 0 0

Бутаем машину:

root@monitonrig-dev:/home/admin# reboot

После ребута ещё раз проверяем данные:

admin@monitonrig-dev:~$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdb    202:16   0  16G  0 disk
└─xvdb1 202:17   0  16G  0 part /data
admin@monitonrig-dev:~$ ls -l /data/
total 24
drwxr-xr-x  4 grafana grafana  4096 Oct 18 14:23 grafana
drwxr-xr-x  2 root    root    16384 Jun 22 13:15 lost+found
drwxr-xr-x 12 root    root     4096 Oct 15 14:00 prometheus

Всё на месте, идём дальше.

resize2fs – увеличиваем файловую систему

Проверяем размер сейчас – те же 8 ГБ, которые были раньше:

admin@monitonrig-dev:~$ df -h /data/
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdb1      7.9G  7.2G  231M  97% /data

Запускаем resize2fs:

root@monitonrig-dev:/home/admin# resize2fs /dev/xvdb1
resize2fs 1.43.4 (31-Jan-2017)
Filesystem at /dev/xvdb1 is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/xvdb1 is now 4194048 (4k) blocks long.

Проверяем:

root@monitonrig-dev:/home/admin# df -h /data/
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdb1       16G  7.7G  7.3G  52% /data

Можно ещё раз бутнуть машину, и проверить данные:

admin@monitonrig-dev:~$ ls -l /data/
total 24
drwxr-xr-x  4 grafana grafana  4096 Oct 18 14:28 grafana
drwxr-xr-x  2 root    root    16384 Jun 22 13:15 lost+found
drwxr-xr-x 12 root    root     4096 Oct 15 14:00 prometheus

Готово.