Почему мои файловые системы 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%