3

У меня работает массив RAID5, а теперь еще и raid1, который я настроил вчера. Поскольку RAID5 рассчитывает паритет, он должен улавливать повреждение данных без вывода сообщений на одном диске. Однако для RAID1 диски являются просто зеркалами. Чем больше я думаю об этом, тем больше мне кажется, что RAID1 довольно рискован. Конечно, это спасет меня от сбоя диска, но это может быть не так хорошо, когда речь идет о защите данных на диске (что на самом деле для меня важнее).

  1. Как программный RAID в Linux на самом деле хранит данные типа RAID1 на диске?
  2. Как он узнает, какой шпиндель выдает поврежденные данные (если диск (подсистема) не сообщает об ошибках)

Если RAID1 действительно не дает мне защиту данных, а скорее защиту диска, есть ли какие-то хитрости, которые я могу сделать с mdadm, чтобы создать двухдисковую настройку типа RAID5? Например, свободная емкость, но при этом сохраняется избыточность данных?

4 ответа4

6

RAID5 не отлавливает повреждение данных в режиме без вывода сообщений; вам нужна файловая система, такая как ZFS или BTRFS, с контрольным суммированием на уровне блоков, для защиты от этого. RAID5 также не будет работать так же хорошо, как RAID1 из-за вычислений четности. При использовании любого типа RAID с контролем четности вы должны позаботиться о том, чтобы устранить дыру в записи RAID5, которая, например, может привести к повреждению данных в случае сбоя питания.

У программного обеспечения Linux RAID1 есть интересное преимущество, заключающееся в том, что вы можете создавать столько зеркал, сколько захотите. Поэтому, если uptime является вашим приоритетом № 1, вы можете настроить 8-дисковый RAID1, который поддерживает 7 избыточных копий.

Потенциал повреждения данных при использовании RAID1 примерно такой же, как при использовании одного диска (без RAID).

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

Также следует учитывать, что жесткий диск - не единственное место, где данные могут быть повреждены. Например, если вы не используете ECC RAM (и системную плату корпоративного уровня, которая не только совместима, но и поддерживает ECC), космический луч может немного перевернуться в памяти. В зависимости от того, о каких данных мы говорим, это может даже не иметь значения. Если это видео или музыкальный файл, переворот будет незамеченным при воспроизведении файла.

Когда вы начинаете понимать суть проблемы, молчаливое повреждение данных связано с вероятностями. Вероятность того, что ваши данные будут повреждены, не очень высока; в противном случае мы все будем постоянно ругаться, когда наши данные будут снова повреждены. (Вероятно, все будут хранить несколько резервных копий и даже бумажные копии всего, потому что они не будут доверять компьютеру хранить одну хорошую копию.) Вероятность того, что вы даже заметите повреждение данных, еще ниже. Большинство людей совершенно не знают о концепции скрытого повреждения данных, и они прекрасно справляются. Стоит также отметить, что даже многие системы хранения данных корпоративного уровня не защищают от тихого повреждения данных на уровне файловой системы. Но если вы совсем не азартный игрок, возможно, вы захотите потратить немного денег на оборудование корпоративного уровня (ECC RAM, контроллеры дисков с батарейным питанием и все) и переключиться на использование ZFS или BTRFS.

3

Сосредоточив внимание на актуальные вопросы ...

Даже RAID 5 не сможет исправить молчание, но он может обнаружить его во время очистки данных. Хотя он сможет исправить один блок, о котором было сообщено диском как о неисправимой ошибке чтения (URE). Обратите внимание, что не все диски в полосе RAID5 считываются для обычного чтения данных, поэтому, если в полосе на неиспользуемом диске существует ошибка, она останется незамеченной, пока вы не выполните очистку данных. Бесшумное обнаружение гниения бит с помощью любого стандартного RAID может происходить только во время очистки данных. RAID 5 не может даже сделать это во время восстановления неисправного диска, это то, что больше всего беспокоит в наши дни с RAID 5.

  1. Linux mdadm RAID 1, как и почти все реализации RAID 1, просто дублирует / копирует одни и те же данные на несколько дисков. Это не добавляет исправления ошибок или обнаружения данных. Если вы извлекаете диск из любого RAID 1 и используете его на другом ПК, он, скорее всего, будет работать как обычный одиночный диск. Linux mdadm добавляет некоторое описание массива в начало диска, чтобы он мог знать, какие разделы принадлежат какому массиву, поэтому mdadm будет знать, что это был RAID 1, но в любом случае может монтировать и использовать один диск.
  2. Все контроллеры RAID 1, будь то программные или аппаратные, полагаются на тот факт, что жесткие диски используют свои собственные методы обнаружения и исправления ошибок. См. Эту статью в Википедии о том, как это делают жесткие диски, в частности, обратите внимание на использование кодирования с исправлением ошибок (ECC).

Вот почему большая часть гнили будет сообщаться дисковой системой как неисправимая ошибка чтения (URE) в mdadm. Однако ваши данные по-прежнему подвержены риску, который не приведет к сообщению диска об ошибке, такой как

  • если во время записи произошла ошибка позиционирования головки, то некоторый случайный соседний сектор перезаписывается данными и корректными данными ECC для этого блока. Чтение фактически записанного блока покажет, что он прочитал блок просто отлично, даже если это не так.
  • сервер потерял питание до того, как записал свои данные на все диски в массиве, тогда некоторые блоки в этой полосе будут не согласны с другими.

и другие типы ошибок, например, описанные на странице ServerFault. Является ли гниль на жестких дисках реальной проблемой?Что с этим можно сделать?

Массивы RAID 6 и RAID 1, содержащие не менее 3 дисков, являются единственными стандартными уровнями RAID, которые способны обнаруживать и исправлять некоторые формы бесшумной гнили битов, которые не сообщаются отдельными дисками как ошибки, хотя я не знаю если mdadm реализует необходимый код для этого. Используя систему голосования с прямым исправлением ошибок .

  • Для RAID 6 - только если ошибка находится в одном из блоков четности. Это связано с возможностью трехстороннего голосования между данными, четностью 1 и четностью 2. Если блоки 1 или 2 контроля четности говорят, что есть ошибка, а другие 2 - нет, то блок контроля четности может быть, по существу, исключен. Причина, по которой он не может исправить проблему, если ошибка находится в одном из блоков данных, заключается в том, что он не может знать, в каком блоке данных есть ошибка, если это не рейд с 3 дисками 6, который обычно не допускается. Я сомневаюсь, что любая реализация, включая mdadm, будет беспокоиться о такой непонятной схеме исправления и просто сообщит об этом как об ошибке.
  • Для RAID 1 с 3 или более активными якобы уже синхронизированными дисками он может провести простое большинство голосов. Хотя опять же, я не знаю, беспокоит ли какая-либо реализация RAID эту логику, так как не многие люди используют дисковый рейд 3+ 1. Если он реализует необходимую логику RAID 1, что
    • обычно было 3 диска, блок с тихим битом гнили мог быть автоматически исправлен, хотя если бы это не было во время восстановления, это уменьшило бы количество активных синхронизированных дисков до 2.
    • 4-х дисковый raid 1 может автоматически исправить любую полосу с одним поврежденным блоком даже во время восстановления 1 неисправного диска.
    • 5-ти диск может автоматически исправить полосу с 2-мя незаметно поврежденными блоками, хотя он уменьшается до 1, если он обнаружен во время восстановления 1 или 2 одновременно вышедших из строя дисков.

К вашему сведению, я заметил, что устройства Synology DS1813+ используют mdadm как для разделов данных, так и для системных разделов, и он использует RAID 1 на всех 8 дисках для системных разделов.

Как вы, возможно, заметили, это сильно полагается на то, что диск может сообщать о неверных данных как об ошибке. Пока все говорят использовать ZFS для решения этой проблемы. Я считаю, что основные улучшения целостности данных ZFS заключаются в том, что он обеспечивает более частую очистку данных благодаря проверке зеркал / четности при каждом чтении, а также независимой четности на уровне блоков (что означает, что многие незаметно поврежденные блоки больше не молчат и исправляются, если это возможно), и это может реализовать вышеупомянутую логику для повреждения данных без вывода сообщений.

Чтобы проверить, может ли конкретная система обнаружить и / или исправить повреждение данных без вывода сообщений, используйте команду dd в Linux, чтобы записать случайные данные в один из разделов массива, а затем проверьте, сохраняются ли данные в массиве. Предупреждение: не проводите этот тест в системе с данными, которые вы хотите сохранить, поскольку ваша система может не пройти тест. Для стандартных уровней RAID вам необходимо выполнить очистку данных между повреждением и тестовым чтением.

3

Так как raid5 вычисляет четность, он должен уметь распознавать повреждение данных без вывода сообщений на одном диске.

Нету. Можно было полностью стереть сектор со случайными данными, а RAID5 не сломал бы ресницу. У RAID1 такая же проблема.

В целом, RAID не обеспечивает проверку целостности данных в режиме реального времени. Он обеспечивает отказоустойчивость в случае отказа одного (или нескольких, с некоторыми уровнями RAID) диска. Это две совершенно разные вещи.

Если вы ищете что-то, чтобы поймать повреждение файла, вам нужна поддержка файловой системы. RAID не делает этого. По крайней мере, не по себе.

Чтобы ответить на ваши конкретные вопросы:

RAID1 реализован просто как два (или более) одинаковых зеркала. Когда зеркала не согласуются с содержимым сектора, происходит коррупция. Дело в том, что система RAID не всегда может знать об этом, поскольку она обычно не считывает все зеркала, когда ее просят получить данный сектор. Для эффективности он, скорее всего, просто назначит один диск для его чтения (надеюсь, тот, чьи головки в данный момент находятся ближе всего к нему).

Предположим, что во время операции "очистки", когда системе RAID явно предлагается проверить согласованность всех ее данных, обнаруживается несогласованность. Вопрос о том, как устранить это несоответствие, не имеет простого ответа. Обратите внимание, что эта проблема в равной степени влияет на RAID5, как и на RAID1, а также на другие уровни RAID.

В RAID1 несоответствие появляется в виде двух зеркальных секторов, содержащих разные данные. Как система RAID решает, какой сектор представляет правильные данные? Ну, это детали реализации, и я, честно говоря, не знаю, как именно реализована система Linux. Но проблема фундаментальна: зеркальные секторы разные, и, возможно, нет никаких указаний на то, почему они стали такими. Таким образом, лучшее, что может сделать система RAID, - это подбросить монету: выбрать случайную, чтобы получить "правильные" данные.

В RAID-массиве с 3 дисками несоответствие появляется в виде тройки секторов, чей сектор четности неверен. Вопрос в том, какой из 3 секторов не так? Опять же, нет очевидного ответа. Любой из трех может быть испорчен, и, вероятно, нет никакого способа узнать. Если вы должны выбрать один сектор для пересчета из двух других, у вас есть шанс 1 в 3 выбрать тот, который был действительно поврежден. Это показывает, что RAID1 на самом деле "безопаснее", чем RAID5, в этом смысле. RAID1 имеет 50% выбора неправильного сектора, в то время как RAID5 имеет 67% выбора неправильно.

Подводя итог: RAID не предназначен для обнаружения ошибок диска по мере их возникновения. RAID обеспечивает отказоустойчивость при сбоях всего диска. Ничего более.

3

Ни raid1, ни raid5 не защитят вас от бесшумной битовой порчи, если порча осуществляется жестким диском.

Подумайте об этом: и с raid1, и с raid5 легко обнаружить, что данные были повреждены, но нет способа определить, на каком диске были хорошие данные, а на каких - плохие.

Но помните: повреждение жесткого диска на жестком диске ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО происходит очень редко (жесткий диск имеет собственную внутреннюю контрольную сумму для всех блоков), и raid не устраняет необходимость резервного копирования.

Если вам нужно пережить повреждение диска без вывода сообщений, используйте что-то вроде raid6 или файловую систему, которая проверяет контрольные суммы всех своих файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .