Дефрагментация XFS на удалённом сервере

2011-03-30

Этап 1

Входим на целевой сервер через ssh. Запускаем screen, так как дефрагментация может занять продолжительное время.

Этап 2

Определяем степень фрагментации целевых разделов:

# xfs_db -r /dev/sda2
xfs_db> frag
actual 35, ideal 34, fragmentation factor 2.86%
xfs_db> quit
# xfs_db -r /dev/mapper/lvm-home
xfs_db> frag
actual 113, ideal 111, fragmentation factor 1.77%
xfs_db> quit

В данном примере видна проверка обычного раздела /dev/sda2 и раздела lvm, работающего через device-mapper. Оба раздела не нуждаются в дефрагментации, что видно по выведенной информации.
Если фактор фрагментации высок, то завершаем работу приложений, которые могут использовать разделы с файловой системой XFS, так как файлы, заблокированные работающими программами, не могут быть упорядочены.

Причины препятствующие дефрагментации:
- Файл заблокирован каким-либо процессом;
- Мало места на разделе.

Этап 3

Дефраментация запускается не для устройства, а для точки монтирования целевых разделов. Например, ранее проверенный на степень фрагментации раздел /dev/sda2 подмонтирован к /mnt/second. Запускаем дефрагментацию:

# xfs_fsr -v /mnt/second
/mnt/second start inode=0
ino=137
ino=137: file busy
ino=537460065
ino=537460065 already fully defragmented.

Здесь видно, что раздел используется каким-то приложением или демоном, так как “file busy”. В противном случае мы увидели бы:

# xfs_fsr -v /mnt/second
/mnt/second start inode=0
ino=137
extents before:68 after:1 DONE ino=137

После дефрагметации можно убедиться, что фактор фрагментации уменьшился - повторив второй этап.
Я замечал, что для разделов, работающих через device-mapper, информация о степени фрагментации может обновиться только после umount/mount. На самом же деле раздел, естественно, уже дефрагментирован.