Недавно произошел сбой питания, в результате которого был отключен один из моих серверов. При перезагрузке файловой системе основного хранилища - 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.