Уже не в первый раз поднимается на форуме этот вопрос, а однозначного ответа так и нет. Вернее он вроде бы и есть, дескать - не забивайте себе голову ерундой, дефрагментировать ext3 не нужно, да вот только факты упрямо твердят обратное.
Дано: smb сервер на Ubuntu, etx3, на нем же крутится rtorrent и еще несколько программ не использующих активно диск. После примерно полугода работы отмечаем ощутимое падение производительности. Вместо того, чтобы шустренько отдавать файлы по 100 мегабитной сетке они тянутся со скоростью 5-6 мегабайт в секунду. Маловато будет. Начинаем разбираться.
Проверяем скорость записи на этот диск
jel@jel-linux:/media/hs$ dd if=/dev/zero of=test bs=512 count=1048576
1048576+0 записей считано
1048576+0 записей написано
скопировано 536870912 байт (537 MB), 67,1296 c, 8,0 MB/c
Проверяем скорость чтения
jel@jel-linux:/media/hs$ dd if=test of=/dev/null bs=512 count=1048576
1048576+0 записей считано
1048576+0 записей написано
скопировано 536870912 байт (537 MB), 76,4845 c, 7,0 MB/c
Что же так-то? Пишется 8 мегабайт в секунду, а читается 7. И заметьте, читается в /dev/null, чтобы исключить подтормаживание винта-приемника. Реально при копировании на винт скорость еще ниже.
jel@jel-linux:/media/hs$ dd if=test of=/home/jel/test bs=512 count=1048576
1048576+0 записей считано
1048576+0 записей написано
скопировано 536870912 байт (537 MB), 82,659 c, 6,5 MB/c
А вот и предполагаемый виновник торжества:
fsck 1.40.8 (13-Mar-2008)
/dev/sda1: 3572/7069696 files (40.2% non-contiguous), 9230836/28260335 blocks
jel@jel-linux:/media/hs$ df .
Filesystem Size Used Avail Use% Mounted on
//hs/files 107G 36G 67G 35% /media/hs
А говорили, что ext3 склонна к фрагментации только при недостатке свободного места на диске.
Никаких синтетических тестов с файловой системой не проводилось. Только реальная работа сервера. Скачал фильм - посмотрел - удалил. Скачал - посмотрел - переместил в архив (на том же томе).
Ну а теперь главный вопрос: Как с этим можно бороться? Можно конечно перелить все файлы на другой диск, создать файловую систему заново и залить файлы обратно. Только ведь это опять ненадолго. Нет ли более радикальных решений?