3 авг. 2008 г.

Оптимизация файловой системы XFS

Каждый более-менее опытный пользователь линукса, наверное, хотя бы слышал про данную файловую систему. А многие, включая и меня, используют ее повседневно. Рассматривать достоинства и недостатки XFS я не стану, а вместо этого напишу о поддержании ФС в оптимальном состоянии. А конкретно: о дефрагментации.

Есть очень хорошая статья на эту тему здесь. Я частично переведу некоторые моменты.

Немного теории
Архитектура XFS такова, что содержимое файла в ней располагается в так называемом "пространстве переменной длины" (extent). Данные пространства представляют собой смежные регионы, расположенные в файловой системе. То есть, при копировании файла на ФС он обычно занимает один extent. Однако, если позже содержимое файла меняется, то возможна ситуация, что пространство, находящееся после файла, уже занято другими данными. В этом случае содержимое файла может быть помещено в два разных extent'а, физически находящиеся на удаленных друг от друга местах диска. Конечно, какой-либо процесс/программа по-прежнему без проблем может обращаться к файлу, однако скорость работы снижается при обращении к разным удаленным друг от друга секторам диска.
В зависимости от аспектов использования ФС, файлы на ней могут довольно значительно фрагментироваться.

Программа xfs_bmap: просмотр информации о расположении файла
С помощью программы xfs_bmap можно увидеть карту extent'ов, в которых хранится конкретный файл.

[alsvartr@bust ~]$ xfs_bmap -v /media/storage/VL5.9-Light-B2.iso
/media/storage/VL5.9-Light-B2.iso:
EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL
0: [0..416991]: 392994088..393411079 10 (26702088..27119079) 416992
1: [416992..532679]: 392631640..392747327 10 (26339640..26455327) 115688
2: [532680..641599]: 64962272..65071191 1 (28333072..28441991) 108920
3: [641600..712959]: 63823592..63894951 1 (27194392..27265751) 71360

Опция -v (verbose) выводит дополнительную информацию.
Как видно, файл VL5.9-Light-B2.iso фрагментирован: хранится в четырех разных extent'ах. Можно попробовать его дефрагментировать.

xfs_fsr: дефрагментация XFS
Данная программа предназначена для реорганизации XFS. Достаточно указать ей нужный файл:
[alsvartr@bust ~]$ xfs_fsr /media/storage/VL5.9-Light-B2.iso

Дефрагментация длится некоторое время в зависимости от объема файла. Можно теперь снова проверить карту extent'ов:
[alsvartr@bust ~]$ xfs_bmap -v /media/storage/VL5.9-Light-B2.iso
/media/storage/VL5.9-Light-B2.iso:
EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL
0: [0..712959]: 394944045..395411741 10 (26702088..27119079) 712960

Теперь файл занимает один extent.

Для того, чтобы дефрагментировать всю файловую систему целиком, достаточно указать в качестве параметра к программе устройство ФС, вместо файла:
[alsvartr@bust ~]$ xfs_fsr /dev/sdb1
/media/storage start inode=0

Полезными опциями также могут быть -v (выводит информацию о файле, обрабатывающемся в данный момент) и -t (время работы программы).
Про последнюю опцию стоит сказать отдельно. Она ограничивает время работы программы указанным значением в секундах. То есть запуск xfs_fsr -t 7200 /dev/sdb1 ограничит время работы двумя часами. После истечения указанного времени xfs_fsr сохранит текущее состояние работы в файл /var/tmp/.fsrlast, чтобы продолжить с этого же места в следующий раз, когда будет указана опция -t. С помощью этой опции можно, например, автоматически выполнять дефрагментацию регулярно небольшими интервалами по cron'у.
Нужно отметить, что механизм работы xfs_fsr состоит в том, что при обработке каждого отдельного файла его содержимое копируется в отдельный extent и метаданные ФС меняются так, что новый файл заменяет старый. Поэтому для дефрагментации необходимо иметь достаточно свободного места - столько, чтобы поместилась копия любого файла на диске.
После выполнения xfs_fsr полезно взглянуть на текущий процент фрагментации ФС.

Статус фрагментации при помощи xfs_db
Программа xfs_db может быть использована для просмотра информации о фрагментации файлов:
[alsvartr@bust ~]$ xfs_db -r /dev/sdb1
xfs_db> frag
actual 101181, ideal 95800, fragmentation factor 5.32%
xfs_db> quit

Опция -r (readonly) нужна для проверки ФС, которая в данный момент примонтирована и используется.

Для получения более подробной информации о конкретных программах стоит обратиться к соответствующим руководствам man.

P.S. Для некоторых операций могут потребоваться права root.

Дополнительные материалы:
Wikipedia: File system fragmentation
Wikipedia: Extent (file systems)

31 комментарий:

Сергей Сергин комментирует...

Спасибо огромное!
Именно то, что я искал. Буквально вчера-позавчера разочаровался напрочь в JFS потому что тормозить слала не по детски именно при работе с большими файлами. Решил переехать на XFS, и Ваша статья очень удачно подвернулась под руку Гуглу :)

Анонимный комментирует...

Хорошая статья. Как выяснилось у меня фрагментация 98% - видимо закачка торентов приводит к фрагментации закаченного. Файл на 8Гб имел несколько тысяч фрагментов... Он же скопированный имел пару десятков фрагментов, после дефрагментации его - стал один.


Теперь поставил дефрагментироваться все 3Тб.

Garfeild комментирует...

Спасибо за статью.

Кстати, в Gentoo утилита xfs_fsr находится в пакете xfsdump

Анонимный комментирует...

Между прочим, если вам однажды захочется заглушить чей-либо сотовый телефон или другое средство связи, то попробуйте использовать для этого Блокиратор мобильного телефона.

Анонимный комментирует...

В принципе если на данном проекте будут писаться в такой же тематике и дальше, буду читать.

Анонимный комментирует...

как говориться, Без пользы жить - безвременная смерть.

Анонимный комментирует...

Хорошо написано, надо будет скинуть ссылочку товарищам, чтобы и они оценили вашу статью.

Анонимный комментирует...

Без преувеличения можно сказать, что пост тему раскрыл на все 100.

Анонимный комментирует...

Как хорошо что удалось отыскать такой замечательный блог, и тем более отлично, что есть такие автора толковые!

Анонимный комментирует...

Хорошо написано, надо будет скинуть ссылочку товарищам, чтобы и они оценили вашу статью.

Анонимный комментирует...

как говориться, Без пользы жить - безвременная смерть.

Анонимный комментирует...

Отличная статья.Респект автору.

Анонимный комментирует...

В принципе если на данном проекте будут писаться в такой же тематике и дальше, буду читать.

Анонимный комментирует...

Без преувеличения можно сказать, что пост тему раскрыл на все 100.

Анонимный комментирует...

Вчера подруга скинула на мыло адрес вашего сайта. Но я не придал особого значения, я сегодня зашел и понял что она была права - сайт действительно СУПЕР!

Анонимный комментирует...

Вчера подруга скинула на мыло адрес вашего сайта. Но я не придал особого значения, я сегодня зашел и понял что она была права - сайт действительно СУПЕР!

Анонимный комментирует...

Супер статья! Подписался на RSS, буду следить =)

Анонимный комментирует...

Хехе… Мда… Таким взглядам и отношению к работе многие только будут завидовать! Молодцом!

Анонимный комментирует...

Оригинальная идея. Интересно сколько времени он на это потратил

Анонимный комментирует...

Можно ли взять одну картинку с Вашего блога? Очень понравилась. Линк на Вас есстественно поставлю.

Анонимный комментирует...

Отличная статья.Респект автору.

Анонимный комментирует...

Спасибо за познавательную статью!

Анонимный комментирует...

как говориться, Без пользы жить - безвременная смерть.

Анонимный комментирует...

Спасибо за познавательную статью!

Анонимный комментирует...

Комплекс текстов неплохой, добавлю сайт в закладки.

Анонимный комментирует...

I understand this question. It is possible to discuss.

Анонимный комментирует...

“В принципе если на данном проекте будут писаться в такой же тематике и дальше, буду читать.”
[url=http://www.serota.ru] [/url]

Анонимный комментирует...

“Отличный пост, прочитала с удовольствием! Не плохое начало. Удачи в дальнейшем!”
[url=http://www.serota.ru] [/url]

Анонимный комментирует...

Отличная статейка, прочитал с удовольствием! :) Так держать )

Анонимный комментирует...

Спорный момент описан в статье, но всё равно, пожалуй, добавлю Вашу страницу в избранное ))

Анонимный комментирует...

Почистите статью, уважаемый, от воды - в целом, нравится. Отлично написано