--write-mostly
, --write-behind
Обрабатывается md
драйвером внутренне. md
хранит метаданные, такие как битовая карта с намерением записи (которая является обязательной для функции обратной записи), которая в основном записывает, какие данные были записаны, а какие отсутствуют. Это необходимо в случае, когда происходит сбой питания, когда данные еще не достигли устройств записи. В этом случае затронутая область данных будет повторно синхронизирована (в вашем случае чтение с SSD, запись на HDD).
Но как это кэшируется на уровне ядра?
В случае обратной записи драйвер md в основном дублирует внутренний запрос записи. Основной запрос на запись отправляется на основной диск (и) и сообщает верхним уровням: «Хорошо, я уже сделал это»; скопированный запрос на запись остается неизменным для стороны RAID для записи в основном позади, и его выполнение может занять больше времени, мы надеемся, что никто об этом не заметит.
Затем уровень raid делает много шагов, чтобы убедиться, что никакие данные не будут прочитаны с устройства записи в основном, пока в очереди все еще находятся ожидающие запросы на запись. Почему данные будут считываться с устройства записи? Ну, SSD, возможно, вышел из строя, так что это все, что осталось. Это сложно, и в процессе записи приводятся некоторые угловые случаи.
Возможно, именно поэтому он поддерживается только для уровня RAID-1, а не для всех остальных. Хотя теоретически может иметь смысл иметь твердотельные накопители в виде RAID-0 и два жестких диска с четностью в режиме с обратной записью, для RAID-6 с такой записью такая поддержка отсутствует. Это только RAID-1 и редко используется даже там.
Это не влияет на другие параметры кэша, в основном общий механизм кэширования не заботится о том, как md
драйвер реализовал вещи внутренне. Кэш делает свое дело, а md делает свое дело. Таким образом, кэш файловой системы работает одинаково для файловой системы поверх md против файловой системы поверх чистого диска. (Реальность немного сложнее, но вы можете думать об этом так.)