Kir Kolyshkin (k001) wrote,
Kir Kolyshkin
k001

Category:

directory lookup speedup howto, или как ускорить файловую систему

Если у вас система тормозит при попытке прочитать большой каталог, файлы в который добавлялись в очень разное время (типа /usr/bin) -- наверное, у вас не включена опция dir_index на файловой системе ext2/3/4. Типичный симптом: когда в почте хотите открыть вложение, вам предлагается выбрать программу, вы пишете /usr/bin -- и тут всё застревает секунд на 5-10. Это застревание можно частично починить включением вот этой самой опции dir_index.

Включить её не слишком просто, но, впрочем, не так уж и сложно. Хотя у вас, скорее всего, она уже включена инсталлятором системы. Но вдруг нет?

Для начала надо знать, на каком устройстве мы хотим включить dir_index, и хотим ли. К примеру, у меня это /dev/hda6 (узнать можно командой mount):

kir@note ~ $ mount
/dev/hda6 on / type ext3 (rw,noatime)
...


Теперь смотрим, есть ли там dir_index:

kir@note ~ $ sudo /sbin/dumpe2fs /dev/hda6 | head
dumpe2fs 1.41.2 (02-Oct-2008)
Filesystem volume name: gentoo
Last mounted on:
Filesystem UUID: 3945a162-6f56-4a66-b090-9dd1e4df9c87
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal dir_index filetype needs_recovery sparse_super large_file
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue


Видите (в строчке Filesystem features) -- у меня уже есть dir_index. Если у вас нет -- этот текст для вас. Скорее всего, вам потребуется перезагрузиться. Вариант без перезагрузки тоже возможен, если файловая система, на которой вы хотите включить dir_index, не рутовая -- тогда достаточно будет или отмонтировать её, или хотя бы перемонтировать в read-only. Но этого вопроса я тут не касаюсь, чтобы статья не распухла совсем уж сильно.

Итак, перезагружаемся, видим экран загрузчика GRUB, выбираем в нём строчку с ядром, которое хотим загрузить, но вместо Enter нажимаем e (edit). Видим несколько строчек, выбираем стрелочками строчку со словом kernel и снова нажимаем e (edit). Дописываем в конец строчки слова init=/bin/bash (или /bin/sh, если у вас вдруг нет bash, или какой-нибудь другой shell), нажимаем Enter и далее b (boot). Грузится ядро и сразу запускает bash. Кстати, таким образом можно зайти в систему рутом, не зная рутового пароля (но, как вы понимаете, нужен физический доступ к компьютеру и перезагрузка).

Ещё помните, как у вас устройство называется? У меня /dev/hda6. Дальше всё просто.

Делаем раз: выставляем опцию dir_index:
# /sbin/tune2fs -O +dir_index /dev/hda6

Делаем два: проверка ФС с созданием индексов (опция -f -- force, опция -D -- оптимизировать каталоги, создавать индексы, опция -С 0 -- показывать прогресс):
# e2fsck -f -D -C 0 /dev/hda6

На этом месте можно откинуться на спинку кресла пойти попить чаю. А после того, как всё закончится, по старой юниксовой традиции пишем
sync
sync
reboot


Собственно, всё. Enjoy.
Tags: howto, linux
Subscribe
Comments for this post were disabled by the author