четверг, 13 июля 2017 г.


ProxMox — уменьшаем диск в LXC.




Задача : после переноса данных в другой mount_point, капитальной расчистки внутри LXC-контейнера или ошибочного задания слишком большого размера файла диска требуется этот диск ресайзнуть в меньшую сторону.

Веб-интерфейс такого не предоставляет (там можно только увеличить размер), поэтому переведу одну рекомендацию с форума проксмокса (https://forum.proxmox.com/threads/shrink-disk-size.24808/#post-124343), чтобы не потерялась.

Для примера, у нас будет LXC-контейнер № 366, проксмокс 4.2, надо уменьшить размер диска с 8 Гб до 2 Гб, пути стандартные.

По шагам, поехали:

1). Останавливаем контейнер.

2). Делаем бэкап.
3). Проверяем, что бэкап есть.

4). Дополнительно копируем файл с дисковым образом ( /var/lib/vz/images/366/vm-366-disk-1.raw ) в другой каталог, если что-нибудь пойдёт не так. Такой образ закопировать назад поверх битого может быть в ряде случаев быстрее, чем разжать из бэкапа.

5). Заходим в каталог с образом диска:
# cd /var/lib/vz/images/366

6). Проверяем файловую систему:
# e2fsck -f vm-366-disk-1.raw
Видим вот такое:

e2fsck: MMP: fsck being run while checking MMP block
MMP check failed: If you are sure the filesystem is not in use on any node, run:
‘tune2fs -f -E clear_mmp {device}’

7). Делаем исправление:
# tune2fs -f -E clear_mmp vm-366-disk-1.raw

8). Снова проверяем, что файловая система внутри теперь в норме:
# e2fsck -f vm-366-disk-1.raw
Должен быть примерно такой вывод:


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
vm-366-disk-1.raw: 21325/524288 files (0.4% non-contiguous), 240360/2097152 blocks

9). Уменьшаем размер самой структуры файловой системы внутри дискового образа:
# resize2fs -M vm-366-disk-1.raw 2G
Размер ФС будет сильно уменьшен:


resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on vm-366-disk-1.raw to 318585 (4k) blocks.
The filesystem on vm-366-disk-1.raw is now 318585 (4k) blocks long.

Обратите внимание на число блоков — 318585 !

10). Обрежем лишнюю часть файла до размера 2 Гб:
# truncate -s 2G vm-366-disk-1.raw

11). Расширим размер структуры файловой сисемы до нового размера файла-образа:
# resize2fs vm-366-disk-1.raw
Это нужно, чтобы внутри файла выделенное пространство полностью было задействовано файловой системой.


resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on vm-366-disk-1.raw to 524288 (4k) blocks.
The filesystem on vm-366-disk-1.raw is now 524288 (4k) blocks long.

Обратите внимание на число блоков — 524288 !

12). Исправим размер образа в конфиге контейнера:
# vi /etc/pve/nodes/vps3/lxc/366.conf
Если vi вызывает у вас аллергию — используйте любой другой редактор, их много. Правим параметр size в свойствах диска:

rootfs: local:366/vm-366-disk-1.raw,size=2G

Сохраняем, обновляем страницу со свойствами контейнера в веб-интерфейсе, убеждаемся, что размер поменялся.

13). Запускаем контейнер.

14). Заходим в него по SSH, проверяем, что всё работает, смотрим на свободное место :
# df -h -t ext4

Filesystem Size Used Avail Use% Mounted on
/dev/loop1 1.9G 677M 1.1G 39% /

1.9 Гб вместо 7.8 Гб места при 677М данных. Это очень позитивно сказывается на скорости переноса контейнера (при отсутствии общего хранилища), времени бэкапа/восстановления и глубине / объёмах бэкапов.