Как расширить файловую систему EXT4 без потери данных

resize2fs disk partition resize ext4 e2fsck

Описываю на конкретном примере. Проверено на собственном опыте.
Данные сохранились в нетронутом виде.

Пусть у нас есть переполненный раздел /dev/vdb1 на втором виртуальном диске размером 120G.

[root@ext-web11 centos]# df -H
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       8.4G  1.2G  6.8G  15% /
tmpfs           985M     0  985M   0% /dev/shm
/dev/vdb1       120G  117G  98G  98% /data 

Принято решение увеличить раздел до 300G.
Средствами гипервизора увеличим размер до нужного размера, предварительно отключив его.
Подключаем диск, загружаемся и смотрим df -H, что ничего не изменилось.

Предварительно надо проверить наш раздел командой fsck:

fsck -f /dev/vdb1

Затем размонтируем наш диск: umount /data

MSDOS таблица разделов

Входим в редактор разделов

fdisk /dev/vdb

Смотрим, что у нас есть 300G, а под раздел занято только 120G:

Command (m for help): p

Disk /dev/vdb: 300.6 GB, 300647710720 bytes
16 heads, 63 sectors/track, 582542 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3d26848c

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1               1      374491   188743432+  83  Linux

Теперь можно смело удалить этот раздел командой “d”, затем выбрать 1 раздел.
После удаления раздела файловая система и сами файлы останутся на своих местах.
Далее, создаем новый раздел командой “n”. Тип раздела “p” (primary), а не extended, как написано в некоторых руководствах, номер раздела - 1.
Первый сектор выбираем по-умолчанию такой-же, как был (т.е. 1), а последний - тоже по-умолчанию (последний, максимальный).
Затем, надо выбрать тот-же тип файловой системы, что и был у нас (код 83 - Linux ext4) - нажимаем “t” и вводим “83”L

Выходим с сохранением новой таблицы разделов : “w”:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

GPT таблица разделов

Если таблица разделов была GPT, то надо использовать parted.
На запрос:

Warning: Not all of the space available to /dev/vdb appears to be used, you can fix the GPT to use all of the space (an extra 419430400 blocks) or continue with the current setting
Fix/Ignore

Надо ответить: Fix
а затем увеличить раздел командой: 

(parted) resizepart 1 322G

где 322G - размер диска

e2fsck и resize2fs

Теперь надо полечить нашу файловую систему - дать ей понять, что теперь она находится на новом, увеличенном разделе:

# e2fsck -f /dev/vdb1
e2fsck 1.41.12 (17-May-2010)
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/vdb1: 207540/11796480 files (1.1% non-contiguous), 29288328/47185858 blocks

Осталось сделать собственно увеличение файловой системы - расширив ее до полного заполнения раздела /dev/vdb1 - т.е. до 300G.

# resize2fs /dev/vdb1
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vdb1 to 73400284 (4k) blocks.
The filesystem on /dev/vdb1 is now 73400284 blocks long.

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

# mount /dev/vdb1 /data
df -HT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/vda1      ext4   8.4G  1.2G  6.8G  15% /
tmpfs          tmpfs  985M     0  985M   0% /dev/shm
/dev/vdb1      ext4   296G  117G  164G  42% /data

Готово.

Опубликовано: 28.03.2017