
Допустим, аппаратное обеспечениеRAID-массив 1контроллер с дискамиАиБбыл переведен в автономный режим, а файл, присутствующий на обоих дисках, был изменен на дискеБ(все в автономном режиме). Когда RAID-контроллер снова включается, и пользователь запрашивает измененный файл, что произойдет? Я предполагаю, что большинство RAID-контроллеров 1 не обнаруживают никаких ошибок, пока не попытаются прочитать из этого файла.
Определит ли RAID-контроллер разницу в размере/дате/подписи файла и, следовательно, сообщит об ошибке, или он передаст содержимое одного из двух дисков для этого файла, не зная об изменениях?
Обнаружит ли операционная система какие-либо ошибки?
Будет ли программный контроллер RAID 1 действовать иначе?
И наконец, в любом массиве RAID 1Ндиски, с какого диска(ов) ОС или контроллер фактически считывает данные? Все N? Некоторые RAID-контроллеры всегда используютдиск 0, будут ли они случайным образом выбирать диск или у них есть доступ к файловой системе и они проверяют целостность (даже если диск зашифрован)?
решение1
«Имеют ли они доступ к файловой системе и проверяют целостность (даже если диск зашифрован)»? Нет. RAID-контроллерне знает о файлах– он просто притворяется контроллером диска и имеет дело только с блоками (секторами). И поскольку отдельные сектора на обоих дисках были записаны правильно, тоявляютсяна уровне блока не обнаружено ошибок.
Я не знаю, есть ли какая-либо информация о том, как аппаратные RAID-контроллеры будут обрабатывать случай несовпадающих зеркал. Однако, NeilBrown – давний мейнтейнер Linuxмдрайдфункция программного RAID – опубликовалэтот комментарий LWNобъясняя, как mdraid с этим справится:
[...] Если два устройства в RAID1 не содержат идентичных данных или если сумма данных в RAID4/5/6 не соответствует блоку(ам) четности, то это несоответствие, а не повреждение.
Наиболее вероятным объяснением является то, что несколько устройств в массиве записывались, когда что-то пошло не так (например, отключение питания), и некоторые записи были успешными, а другие — нет. Неважно, какие из них были успешными, а какие — нет.В этом случае НИ ОДИН БЛОК НЕ НЕПРАВИЛЬНЫЙ. Мне нужно сказать это снова. ОБА БЛОКА ПРАВИЛЬНЫ. Они просто правильны в разные моменты времени.
Здесь НЕТ ПОВРЕЖДЕНИЙ, есть только несоответствие.
Каждый блок будет содержать либо новые данные, либо старые, и оба они в некотором смысле правильны.
(Если блок был наполовину записан на устройство, что возможно, если устройство не имеет достаточно большого конденсатора, то вы получите ошибку чтения, потому что CRC будет неверным. Когда вы получаете ошибку CRC, md/raid знает, что данные неправильные, и в любом случае не может даже прочитать данные).В случае RAID1 ДЕЙСТВИТЕЛЬНО НЕ ВАЖНО, какое устройство выбрано для использования и какое устройство заменяет свои данные. md произвольно выбирает самое раннее в списке устройств.
В случае массива четности имеет смысл использовать данные и игнорировать четность, поскольку использование четности не говорит вам, с каким другим устройством она несовместима. (Если у вас есть основания полагать, что четность может не соответствовать данным, и один из блоков данных отсутствует - неисправное устройство - то вы не можете использовать ни дату, ни четность, и у вас есть "дыра записи").
Так обнаружит ли операционная система какие-либо ошибки? Это зависит от того, какая файловая система используется на дисках, и от того, принадлежали ли несоответствующие секторы файлам или собственным метаданным файловой системы. Если бы была несоответствие в секторе метаданных, то вероятность его обнаружения была бы выше, но в большинстве случаев это было бы сообщено как общее повреждение файловой системы, а не как несоответствие RAID.
Это менее вероятно с файлами, так как большинство файловых систем вообще не проверяют содержимое файлов – то, что они считывают с диска, это то, что вы получаете. Есть только несколько исключений, таких как Btrfs или ZFS или ReFS, которые проверяют контрольную сумму.
Некоторые из них (Btrfs, ZFS) на самом деле имеют собственную функцию зеркалирования дисков, которая имеет преимущество перед аппаратным RAID, поскольку файловая системазнаеткакой диск имеет плохие данные и может автоматически восстановить файл, прочитав с другого диска. Однако с аппаратным RAID у них не будет возможности запросить RAID-контроллер на "другую версию", и восстановление будет невозможным.
Будет ли программный контроллер RAID 1 вести себя по-другому? Возможно (см. цитируемый комментарий LWN выше), но есть и еще одно важное отличие.
При программном RAID (а также при зеркалировании файловой системы) сами диски несут информацию о принадлежности к зеркальному набору. Поэтому если вы переместите один диск в другое место, он все равно будет распознан как часть неполного массива RAID 1, и обычно программное обеспечение не позволит записывать на него данные изначально — он останется доступным только для чтения, если вы не разобьете зеркало.