В последнее время я читал о кэшировании записи, NCQ, ошибках прошивки, барьерах и т. Д. В отношении накопителей SATA, и я не уверен, какова наилучшая настройка, которая обеспечивала бы безопасность моих данных в случае сбоя питания.
Насколько я понимаю, NCQ позволяет приводу переупорядочивать записи для оптимизации производительности, в то же время информируя ядро о том, какие запросы были физически записаны.
Кэш записи заставляет диск обслуживать запрос намного быстрее, потому что он не ожидает записи данных на физический диск.
Я не уверен, как NCQ и Write кеш смешиваются здесь ...
Файловые системы, особенно журналируемые, должны быть уверены, что конкретный запрос записан. Кроме того, процесс пользовательского пространства использует fsync () для принудительной очистки определенного файла. Этот вызов fsync () не должен возвращаться, пока файловая система не будет уверена, что данные записаны на диск.
Есть функция (FUA, Force Unit Access), которую я видел только на дисках SAS, которая заставляет диск обходить кэш и записывать данные прямо на диск. Для всего остального есть барьеры записи - механизм, предоставляемый ядром, который может инициировать очистку кеша на диске. Это заставляет записывать весь кеш, а не только критические данные, что замедляет работу всей системы, например, с помощью fsync ().
Тогда есть диски с ошибками прошивки, или которые намеренно лгут о том, когда данные были физически записаны.
Сказав это ... есть несколько способов настроить диски / файловые системы: A) NCQ и кэш записи отключен B) Просто NCQ включен C) Просто кэш записи включен D) Включен NCQ и кэш записи
Я предполагаю, что барьеры включены .. Кстати, как проверить, действительно ли они включены?
В случае потери питания при активной записи на диск, я предполагаю, что опция B (NCQ, без кэша) безопасна как для журнала файловой системы, так и для данных. Там может быть снижение производительности.
Вариант D (NCQ + кеш), если используются барьеры или FUA, будет безопасен для журнала файловой системы и приложений, использующих fsync (). Это было бы плохо для данных, ожидающих в кеше, и файловая система должна обнаружить их (проверка контрольных сумм), и, по крайней мере, файловая система не будет (надеюсь) в нестабильном состоянии. По производительности, это должно быть лучше.
Мой вопрос, однако, стоит ... Я что-то упустил? Есть ли какая-либо другая переменная, чтобы принять во внимание? Есть ли какой-нибудь инструмент, который мог бы подтвердить это, и что мои диски ведут себя так, как должны?