Назад | Перейти на главную страницу

JFS: долгое время fsck в большой файловой системе?

Недавно произошел сбой питания, в результате которого был отключен один из моих серверов. При перезагрузке файловой системе основного хранилища - JFS на файловой системе 7 ТБ (9x1 ТБ RAID6) - требовалась команда fsck перед монтированием чтения-записи. После того, как я запустил fsck, я некоторое время наблюдал за ним в верхней части - использование памяти неуклонно росло (но не слишком быстро), а загрузка ЦП была привязана к 100% или почти 100%.

Теперь, примерно через 12 часов, процесс fsck израсходовал почти 94% из 4 ГБ памяти в системе, а загрузка ЦП упала примерно до 2%. Процесс все еще выполняется (и не указывает время дальнейшего выполнения).

Во-первых: указывает ли это на проблему? Меня беспокоит тот факт, что использование ЦП так резко упало - кажется, что процесс стал привязанным к памяти, а выполнение fsck займет вечность, потому что все свое время он тратит на свопинг. (Я заметил, что kswapd0 неудобно плавает в верхней части списка вверху, фактически опережая процесс fsck по загрузке ЦП более чем в половине случаев.) Если это не так, если fsck просто замедляет работу ЦП ближе к концу процесса, это нормально - мне просто нужно это знать.

Если это проблема, что я могу сделать, чтобы улучшить производительность fsck? Я открыт практически для всего, вплоть до «покупки дополнительной памяти для системы».

Соответствующая строка сверху:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
 5201 root      20   0 58.1g 3.6g  128 D    2 93.8   1071:27 fsck.jfs

И результат free -m:

             total       used       free     shared    buffers     cached 
Mem:          3959       3932         26          0          0          6 
-/+ buffers/cache:       3925         33 
Swap:          964        482        482

Поправьте меня, если я ошибаюсь, но JFS не является полностью журналируемой файловой системой: она обрабатывает только метаданные в журнале. Это означает, что выполнение команды fsck займет очень много времени, если у вас много данных.

Я предлагаю вам изучить возможность переключения на полностью журналируемую файловую систему (etx3 / 4): это должно устранить необходимость в запуске команды в случае внезапного сбоя.

Основываясь на использовании виртуальной памяти, я решил, что будет невозможно запустить полную fsck на томе за любое разумное время (даже с дополнительной оперативной памятью), поэтому я сделал резервную копию всех файлов на томе и переформатировал их с помощью XFS.