Изменение размеров файловой системы ext3

При всей своей любви к XFS она не поддерживает редко, но всё же используемую возможность - уменьшение. Разработчики не посчитали затребованность уменьшения ФС существенной, чтобы её внедрять.

Поэтому, если предполагается уменьшение раздела, используем EXT3.

Все работы проводим на отмонтированной ФС, и первым делом - проверка:

root@devel:/tmp# fsck.ext3 /dev/vdb1
e2fsck 1.42.12 (29-Aug-2014)
/dev/vdb1: clean, 1242/8388608 files, 3449634/33554422 blocks

Из вывода, кроме информации о "чистоте" узнаём и занимаемый размер на устройстве - 33554422 блоков по 4КБ, т.е. 137438912512 байт. Далее, чтобы избежать путаницы с килобайтами и кибибайтами, лучше указывать размеры в байтах - так спокойнее ;)

Далее отключаем журнал с помощью утилиты tune2fs (из пакета e2fslibs) и проводим полную проверку:

root@devel:/tmp# tune2fs -O ^has_journal /dev/vdb1
tune2fs 1.42.12 (29-Aug-2014)
root@devel:/tmp# e2fsck -f -C 0 /dev/vdb1
e2fsck 1.42.12 (29-Aug-2014)
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: 1242/8388608 files (8.7% non-contiguous), 3416833/33554422 blocks

Теперь можно уменьшить ФС до необходимого размера. В нашем случае это будет минимум 3416833*4096=13995347968 байт, но желаемый размер 15ГБ, т.е. 16106127360 байт, или 3932160 блоков по 4КБ. Именно так будет интерпретироваться размер без суффикса.

resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/vdb1 to 3932160 (4k) blocks.
The filesystem on /dev/vdb1 is now 3932160 (4k) blocks long.

На этом этапе размер файловой системы уменьшен, и теперь нужно уменьшать размер раздела, на котором эта ФС находится.

Для этого воспользуемся parted:

root@devel:/tmp# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) u s
(parted) p
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 268435456s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 40s 268435422s 268435383s ext2 owncloud msftdata

(parted)

Теперь нужно пересоздать раздел с правильными границами - удалить старый и создать новый под размер ФС, в нашем случае при секторах 512 байт (в секторов на блок данных) это будет  3932160*8=31457280 секторов. Последним сектором будет (первый + длина - 1) = 31457319

(parted) rm 1
(parted) mkpart oldcloud 40 31457319
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
(parted) p free
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 268435456s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
34s 39s 6s Free Space
1 40s 31457319s 31457280s oldcloud
31457320s 268435422s 236978103s Free Space

(parted)

Таким образом у нас освободилось 236978103 секторов

 ... ... ...

На последнем этапе проверяем ФС и включаем журнал:

root@devel:/tmp# e2fsck -f -C 0 /dev/vdb1
root@devel:/tmp# tune2fs -j /dev/vdb1

 

 

 

xfs, ext3, ext2, tune2fs, fsck