Почему мои файловые системы 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 во время медленного периода активности помогло временно сократить использование диска (см. среду на первом графике выше). Однако использование возобновилось, как только возобновилась активная работа системы.

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

1 ответ

Решение

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

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

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

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

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)

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

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

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%
Другие вопросы по тегам