Назад | Перейти на главную страницу

Почему мои файловые системы XFS внезапно занимают больше места и заполняются разреженными файлами?

Я бегал Файловые системы XFS в качестве разделов данных / роста в течение почти 10 лет на различных серверах Linux.

Я заметил странное явление с недавними серверами CentOS / RHEL, работающими под управлением версии 6.2+.

Использование стабильной файловой системы стало очень разнообразным после перехода на новую версию ОС с EL6.0 и EL6.1. Системы, изначально установленные с EL6.2 +, демонстрируют такое же поведение; показывает резкие колебания в использовании диска на разделах XFS (см. синий линия на графике ниже).

До и после. Обновление с 6.1 до 6.2 произошло в субботу.

График использования диска той же системой за последний квартал, показывающий колебания за последнюю неделю.

Я начал проверять файловые системы на наличие больших файлов и неконтролируемых процессов (может быть, файлов журналов?). Я обнаружил, что в моих самых больших файлах указаны значения, отличные от du и ls. Бег du с и без --apparent-size переключатель показывает разницу.

# du -skh SOD0005.TXT
29G     SOD0005.TXT

# du -skh --apparent-size SOD0005.TXT
21G     SOD0005.TXT

Быстрая проверка с помощью утилита ncdu по всей файловой системе дало:

Total disk usage: 436.8GiB  Apparent size: 365.2GiB  Items: 863258

Файловая система заполнена разреженные файлы, с почти 70 ГБ потерянного места по сравнению с предыдущей версией ОС / ядра!

Я внимательно изучил Red Hat Bugzilla и измените журналы, чтобы увидеть, были ли какие-либо отчеты о таком же поведении или новые объявления относительно XFS.

Нада.

Я перешел с версии ядра 2.6.32-131.17.1.el6 к 2.6.32-220.23.1.el6 во время обновления; без изменений в дополнительном номере версии.

Я проверил фрагментацию файлов с помощью filefrag инструмент. Некоторые из самых больших файлов в разделе XFS имеют тысячи экстентов. Запуск в онлайн-дефрагментации с xfs_fsr -v во время медленного периода активности помогло временно снизить использование диска (см. среду на первом графике выше). Однако использование резко возросло, как только возобновилась интенсивная работа системы.

Что здесь происходит?

Я проследил эту проблему до обсуждения фиксации Исходное дерево XFS с декабря 2010. Патч был представлен в ядре 2.6.38 (и, очевидно, позже был перенесен в некоторые популярные ядра дистрибутива Linux).

Наблюдаемые колебания в использовании диска являются результатом новой функции; Предварительное размещение динамических спекулятивных EOF в XFS.

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

Он следует этому графику:

freespace       max prealloc size
  >5%             full extent (8GB)
  4-5%             2GB (8GB >> 2)
  3-4%             1GB (8GB >> 3)
  2-3%           512MB (8GB >> 4)
  1-2%           256MB (8GB >> 5)
  <1%            128MB (8GB >> 6)

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

Дополнительное пространство можно временно освободить, освободив кеш страницы, dentries и inode с помощью:

sync; echo 3 > /proc/sys/vm/drop_caches

Эту функцию можно полностью отключить, указав allocsize значение во время монтирования файловой системы. По умолчанию для XFS allocsize=64k.

Воздействие этого изменения, вероятно, будет ощущаться системами мониторинга / определения пороговых значений (именно так я это заметил), но оно также повлияло на системы баз данных и может привести к непредсказуемым или нежелательным результатам для виртуальных машин и массивов хранения с тонким предоставлением (они будут использовать больше места, чем вы ожидаете).

В общем, это застало меня врасплох, потому что не было четкого объявления об изменении файловой системы на уровне распространения или даже при мониторинге Список рассылки XFS.


редактировать:
Производительность томов XFS с этой функцией значительно улучшена. Я вижу постоянную фрагментацию <1% на томах, которые ранее отображали фрагментацию до 50%. Производительность записи повысилась во всем мире!

Статистика из того же набора данных при сравнении устаревшей XFS с версией в EL6.3.

Старый:

# xfs_db -r -c frag /dev/cciss/c0d0p9
actual 1874760, ideal 1256876, fragmentation factor 32.96%

Новое:

# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%