Вопрос или проблема
У нас есть том XFS, подключенный к RHEL9.5 (5.14.0-503.22.1.el9_5.x86_64) с 88K файлов:
$ find /mnt -type f | wc -l
87739
Файловая система сообщает о ~200 ГБ свободного места. Тем не менее, общее – реально используемое составляет ~4ТБ.
$ df /mnt
Файловая система 1K-блоков Использовано Доступно Использование% Смонтировано в
/dev/sda1 558602657792 558397210232 205447560 100% /mnt
$ du -s /mnt
554502450484 /mnt
Разница между общим размером файловой системы и суммой размеров файлов
558602657792 - 554502450484
4100207308
Где потерянное пространство и как его восстановить? Как предлагали другие ответы, мы попробовали xfs_fsr и xfs_repair, но ничего не изменилось.
Потерянное пространство, вероятно, выделено самой файловой системой.
Я создал LVM объемом 540ТБ с использованием нескольких дисков с тонким выделением и отформатировал его в XFS. Вот результат:
$ sudo mkfs.xfs /dev/mapper/vg_test-lv_test
meta-data=/dev/mapper/vg_test-lv_test isize=512 agcount=540, agsize=268435455 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=1
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=144955133952, imaxpct=1
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
$ sudo mount /dev/mapper/vg_test-lv_test /mnt
$ df -h /mnt
Файловая система Размер Использовано Доступно Использование% Смонтировано в
/dev/mapper/vg_test-lv_test 540T 11T 530T 2% /mnt
$ du -hs /mnt
0 /mnt
Ни одного файла на нем и 11ТБ из 540ТБ занято.
Я также повторил тесты из этого ответа с более крупной файловой системой, запустив mkfs.xfs
с различными значениями для reflink
и crc
.
$ df -h /mnt/
Файловая система Размер Использовано Доступно Использование% Смонтировано в
/dev/mapper/vg_test-lv_test 540T 11T 530T 2% /mnt (reflink=1, crc=1)
/dev/mapper/vg_test-lv_test 540T 7.2T 533T 2% /mnt (reflink=0, crc=1)
/dev/mapper/vg_test-lv_test 540T 58M 540T 1% /mnt (reflink=0, crc=0)
Как видите, используемое пространство заметно варьируется в зависимости от настроек xfs.
Тесты проводились на Ubuntu 24.04 с настройками по умолчанию, если не указано иное.
.
Ответ или решение
Используя файловую систему XFS на сервере под управлением Red Hat Enterprise Linux 9.5, может возникнуть ситуация, когда, несмотря на относительно небольшое количество файлов, занятость места на диске оказывается гораздо большей, чем ожидалось. Рассмотрим, почему это происходит и какие шаги можно предпринять для утилизации этого "пропавшего" пространства.
Теоретический аспект (Theory)
Файловая система XFS известна своей производительностью и масштабируемостью, что делает ее предпочтительным выбором для систем, требующих обработки больших объемов данных. Однако, XFS также выделяет пространство для различных метаданных, которые необходимы для обеспечения ее функциональности. Это включает журналы транзакций (journaling), ассоциированные метаданные для фрагментации данных, таблицы extents для отслеживания растянутых данных, снятие блокировок (reflink) и контрольные суммы (CRC), которые могут потреблять значительное количество дискового пространства, в зависимости от настроек.
Одной из основных причин, по которым файловая система может занимать больше места, чем данные в файлах, является отражение (reflink) и контроль ошибок (CRC). Оба этих параметра обеспечивают улучшенные функции, такие как поддержка снимков (snapshots) и целостность данных, но требуют дополнительного дискового пространства для хранения информации о блоках данных и их зависимости.
Пример (Example)
В приведенном примере точно так же, даже без значительного числа файлов, файловая система XFS показывает использование 11 ТБ из 540 ТБ из-за активированного режима reflink и crc=1. Это наглядная демонстрация того, как настройки XFS могут повлиять на доступное пространство:
- Настройки reflink=1, crc=1: Используемое пространство составляет 11 ТБ.
- Настройки reflink=0, crc=1: Используемое пространство уменьшается до 7.2 ТБ.
- Настройки reflink=0, crc=0: Используемое пространство значительно уменьшается до 58 МБ.
Эти примеры указывают на то, как определенные функциональные возможности могут занимать существенное количество пространства, даже если оно на первый взгляд представляется пустым.
Применение (Application)
Разобравшись с теорией и примерами, можно рассмотреть подходы к решению проблемы и высвобождению занятых ресурсов:
1. Анализ настроек XFS:
Первый шаг заключается в понимании текущих настроек файловой системы. Вы можете использовать команду xfs_info
для получения информации о текущем состоянии и активированных функциях файловой системы. Это позволяет оценить, какие специфические функции XFS могут являться причиной роста конфигураций.
2. Оптимизация настроек форматирования:
Если ваш конкретный случай не требует определенных функций, таких как reflink или crc, вы можете переформатировать файловую систему с отключенными ненужными параметрами. Однако важно учитывать, что это приведет к полной потере данных, и предварительно следует выполнить резервное копирование.
3. Использование встроенных инструментов:
Как уже упоминалось, инструменты, такие как xfs_repair
и xfs_fsr
, могут помочь с дефрагментацией и восстановлением файловой системы. Хотя в представленном случае это не помогло, эти команды могут быть полезны в других сценариях, таких как исправление поврежденных метаданных или улучшение производительности накопителя.
4. Журналирование и мониторинг:
Настройка систем мониторинга для отслеживания использования диска и состояния файловой системы позволит своевременно реагировать на неожиданные изменения и предотвращать проблемы до их появления.
5. Консультация с экспертами и обновление знаний:
Файловые системы продолжают эволюционировать, и прошлые лучшие практики могут изменяться. Регулярные консультации с сообществом и информационное сопровождение помогут оставаться в курсе изменений и следовать лучшим практикам в области управления данными.
В заключение, понимание того, как различные функции XFS влияют на использование пространства, является ключевым шагом перед выбором подхода к решению или утилизации "потерянного" пространства. Учет всех факторов позволяет не только оптимизировать текущие настройки, но и планировать использование файловой системы более эффективно в будущем.