Операция уменьшения Resize2fs оставляет свободное место в файловой системе?

Вопрос или проблема

Я пытаюсь уменьшить образ файловой системы до минимально возможного размера. Меня устраивает, что resize2fs оставляет зарезервированные блоки файловой системы на месте, но он оставляет около 400 Мб свободного пространства в файловой системе после операции уменьшения.

Вот шаги, которые я выполняю:

aj@pop-os:~/disk_images$ sudo losetup -fP --show mcard.img 
/dev/loop0

aj@pop-os:~/disk_images$ sudo zerofree -v /dev/loop0p1
112082/2671282/3665210

aj@pop-os:~/disk_images$ sudo e2fsck -f /dev/loop0p1
e2fsck 1.46.5 (30-Dec-2021)
Проход 1: Проверка инодов, блоков и размеров
Проход 2: Проверка структуры каталогов
Проход 3: Проверка соединения каталогов
Проход 4: Проверка ссылок
Проход 5: Проверка информации о группах
/dev/loop0p1: 191007/917504 файлов (0.3% несмежных), 993928/3665210 блоков

aj@pop-os:~/disk_images$ sudo resize2fs -Mp /dev/loop0p1
resize2fs 1.46.5 (30-Dec-2021)
Изменение размера файловой системы на /dev/loop0p1 до 1115084 (4k) блоков.
Начинаем проход 2 (макс = 3444)
Перемещение блоков             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Начинаем проход 3 (макс = 112)
Сканирование таблицы инодов          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Файловая система на /dev/loop0p1 теперь длиной 1115084 (4k) блоков.

Все, похоже, работает нормально, и файловая система уменьшилась с 16 Гб до 4.1 Гб. Однако в файловой системе все еще остается свободное пространство:

aj@pop-os:~/disk_images$ sudo mount /dev/loop0p1 xmnt/
aj@pop-os:~/disk_images$ df -h xmnt/
Файловая система      Размер  Использовано Свободно Использ. % Смонтирована в
/dev/loop0p1    4.1G  3.5G  434M  90% /home/aj/disk_images/xmnt

aj@pop-os:~/disk_images$ sudo umount xmnt/
aj@pop-os:~/disk_images$ sudo dumpe2fs -h /dev/loop0p1
(Вывод сокращен для читаемости)
Количество блоков:              1115084
Количество зарезервированных блоков:     47712
Свободные блоки:              162785
Размер блока:               4096

Как вы можете видеть, после уменьшения файловой системы как утилита df, так и dumpe2fs показывают, что в образе файловой системы осталось свободное пространство.

Почему это происходит и как можно заставить resize2fs действительно уменьшить размер файловой системы так, чтобы не было свободного пространства, кроме зарезервированных блоков?

Похоже, что есть две вещи, которые resize2fs не может изменить:

  1. “Индексы на группу”, как сообщает tune2fs -l.
  2. Соотношение байт по иноду, установленное с помощью параметра -i команды mke2fs.

Это означает, что должно быть некоторое минимальное количество инодов и некоторый минимальный размер в байтах для файловой системы. Это оставляет свободное пространство. (И если у вас будет достаточно маленьких файлов, может потребоваться сохранить дополнительное пространство для инодов, что требует больше байт в файловой системе.)

Правки:

  • Я не уверен, что это вся история….
  • Удаление журнала может помочь (tune2fs -O ^has_journal /dev/..., а затем снова без ^, чтобы добавить его обратно).

Ответ или решение

При выполнении операции сжатия файловой системы с помощью resize2fs на вашем образе диска, вы столкнулись с тем, что после завершения операции остаётся свободное пространство, которое не используется. Это может быть вызвано несколькими факторами, которые подробно будут объяснены ниже.

Причины, по которым остаётся свободное пространство:

  1. Минимальные параметры файловой системы: Как вы уже отметили, некоторые параметры, такие как количество инодов на группу и соотношение байт на инод, не могут быть изменены после создания файловой системы с помощью утилиты mke2fs. Эти параметры задают структуру файловой системы и могут создавать «неиспользуемое» пространство, которое остается после сжатия.

  2. Иноды: Каждый файл и директория в файловой системе требует инод. Если в файловой системе создано большее количество инодов, чем необходимо для текущего количества файлов, это может привести к дополнительному выделению пространства, которое не может быть перераспределено. Ваша файловая система может иметь больше инодов, чем необходимо для хранения существующих файлов, что приводит к показателю свободного места.

  3. Резервированные блоки: Проверьте, сколько резервированных блоков указано в выводе команды dumpe2fs. Они предназначены для использования привилегированными пользователями (обычно это около 5% от объёма файла). Эти блоки остаются зарезервированными до тех пор, пока они не будут перераспределены.

Предложения по устранению проблемы:

  1. Настройка параметров инодов: Для уменьшения свободного пространства можно попробовать пересоздать файловую систему с оптимизированными параметрами, такими как уменьшенное количество инодов или изменения в соотношении байт на инод. Это можно сделать с помощью параметров -i при создании файловой системы с mke2fs. Для этого вам нужно будет сначала создать резервную копию данных.

  2. Удаление журнала: Как вы упомянули, удаление журнала может освободить дополнительные блоки. Используйте команду tune2fs -O ^has_journal /dev/loop0p1 для удаления журнала и затем tune2fs -O has_journal /dev/loop0p1 для его повторного добавления. Обратите внимание, что это может повлиять на консистенцию данных в случае сбоя.

  3. Очистка лишних файлов: Убедитесь, что нет неиспользуемых файлов и директорий на файловой системе, которые занимают место. Используйте такие утилиты, как du или ncdu, для определения и очистки ненужных файлов.

  4. Пересоздание файловой системы: Если ваша цель — максимально уменьшить размер, возможно, стоит пересоздать файловую систему с нуля с правильными настройками параметров при создании, чтобы избежать оставшегося свободного пространства. Сначала сделайте резервную копию ваших данных, а затем используйте mke2fs с нужными параметрами.

Заключение

Таким образом, главное решение вашей проблемы заключается в правильной настройке параметров файловой системы при её создании. Однако, если данная файловая система уже существует, вам, возможно, придётся пересоздать её или оптимизировать имеющиеся настройки с помощью утилиты tune2fs и удаления журнала.

Оцените материал
Добавить комментарий

Капча загружается...