Intereting Posts
хранение ключей на вспомогательном съемном диске Удалите текст из файла и сохраните, не открывая Как поставить «rm -i» на итерации? Разделить входной файл на X частей общего количества строк / X «Который» эквивалентен для разделяемых библиотек Изображение KALI (с установленными драйверами широкополосного доступа, которые работают для macbook pro в конце 2013 года) для использования в режиме реального времени IM-клиент, который может отключить уведомление в конкретном окне беседы? Как Linux kernel 3.x управляет ramdisk как блочным устройством? как вставить содержимое файла в совпадение с помощью sed – только первое появление Повторите задачу с помощью команды «at» каждый день в 6 вечера владелец и группа по умолчанию для symlink и chown pass-through Не удалось запустить tomcat6, но статус службы запущен Команда, используемая в другой команде Инициировать выпуск в BF548 EZkit Как найти длину строки с помощью команды echo и wc

Молчаливые ошибки диска и надежность обмена Linux

Я понимаю, что жесткие диски и SSD реализуют некоторые основные исправления ошибок внутри накопителя, и большинство конфигураций RAID, например mdadm, будут зависеть от этого, чтобы решить, когда диск не смог исправить ошибку и должен быть отключен. Однако это зависит от того, что хранилище на 100% точнее в диагностике ошибок. Это не так, и общая конфигурация, такая как двухдисковое зеркало RAID-1, будет уязвимой: предположим, что некоторые бит на одном диске бесшумно повреждены, и диск не сообщает о ошибке чтения. Таким образом, файловые системы, такие как btrfs и ZFS, реализуют свои собственные контрольные суммы, чтобы не доверять прочным прошивкам жестких дисков, кроссовкам SATA и т. Д.

Аналогично, оперативная память также может иметь проблемы с надежностью, и поэтому у нас есть ОЗУ ECC для решения этой проблемы.

Мой вопрос заключается в следующем : каков канонический способ защиты файла подкачки Linux от молчащего коррупции / бит-гниения, не зараженного прошивкой накопителя при конфигурации с двумя дисками (например, с использованием драйверов ядра основной линии)? Мне кажется, что конфигурация, в которой отсутствует сквозная защита здесь (например, предоставляемая btrfs), несколько отрицает спокойствие, вызванное ОЗУ ECC. Но я не могу придумать хороший способ:

  • btrfs не поддерживает swapfiles. Вы можете настроить устройство цикла из файла btrfs и сделать его заменой. Но это имеет проблемы:
    • Случайные записи не работают хорошо: https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation
    • Предложение о том, чтобы отключить копирование при записи, также отключит контрольную сумму – таким образом, побеждая весь смысл этого упражнения. Их предположение состоит в том, что файл данных имеет свои собственные внутренние защиты.
  • ZFS в Linux позволяет использовать ZVOL в качестве свопа, который, как я думаю, может работать: http://zfsonlinux.org/faq.html#CanIUseaZVOLforSwap – однако, из моего чтения, ZFS обычно требует памяти, и заставить его работать в свопе -одноприменение приложения звучит как какая-то работа, выясняя это. Я думаю, что это не мой первый выбор. Почему вы должны использовать какой-то модуль ядра из дерева, чтобы иметь надежный своп, вне меня – наверняка, есть способ сделать это с большинством современных дистрибутивов / ядер Linux в этот день?
  • На самом деле в списке рассылки ядра Linux есть потоки с патчами для включения контрольных сумм в самом диспетчере памяти, по тем причинам, которые я обсуждаю в этом вопросе: http://thread.gmane.org/gmane.linux.kernel/989246 – к сожалению, насколько я могу судить, патч умер и никогда не делал его по течению по неизвестным мне причинам. Слишком плохо, это звучало как приятная особенность. С другой стороны, если вы поменяете swap на RAID-1 – если повреждение превышает возможности контрольной суммы для восстановления, вы хотите, чтобы диспетчер памяти попытался прочитать с другого диска, прежде чем впасть в панику или что-то еще, что вероятно, выходит за рамки того, что должен делать менеджер памяти.

В итоге:

  • RAM имеет ECC для исправления ошибок
  • Файлы на постоянном хранилище имеют btrfs для исправления ошибок
  • Обмен имеет ??? <— это мой вопрос

Мы доверяем целостности данных, извлеченных из swap, потому что аппаратное обеспечение хранения имеет контрольные суммы, CRC и т. Д.

В одном из комментариев выше вы говорите:

true, но он не будет защищать от бит-flips вне самого диска

«Это» означает контрольные суммы диска здесь.

Это верно, но SATA использует 32-битные CRC для команд и данных. Таким образом, у вас есть вероятность 1 раз в 4 миллиарда, чтобы не повредить данные между диском и контроллером SATA. Это означает, что постоянный источник ошибок может вводить ошибку так часто, как каждые 125 Мбайт, но редкий источник случайной ошибки, такой как космические лучи, может вызвать необнаруживаемые ошибки с исчезающе малой скоростью.

Что касается контрольных сумм среды хранения, каждый диск SATA (и перед ним, PATA) использует контрольные суммы для одного сектора. Одной из характерных особенностей «корпоративных» жестких дисков являются более крупные сектора, защищенные дополнительными функциями целостности данных , что значительно снижает вероятность необнаруженной ошибки.

Без таких мер не было бы никакого смысла в резервном пуле на каждом жестком диске: сам накопитель не смог обнаружить плохой сектор, поэтому он никогда не сможет заменить новые сектора.

В другом комментарии вы спрашиваете:

если SATA настолько заслуживает доверия, почему существуют контрольные файловые системы, такие как ZFS, btrfs, ReFS?

Вообще говоря, мы не просим обменять данные на долгосрочную перспективу. Пределом для хранилища подкачки является время безотказной работы системы, и большинство данных в swap не длится почти так долго, поскольку большинство данных, которые проходят через систему виртуальной памяти вашей системы, относятся к гораздо более короткоживущим процессам.

Кроме того, на протяжении многих лет, как правило, с каждым разом время сокращалось, что связано с увеличением частоты обновлений ядра и libc , виртуализации, облачных архитектур и т. Д.

Кроме того, большинство данных в swap по сути забрасываются в хорошо управляемую систему, которая не запускается из основной ОЗУ. В такой системе единственными вещами, которые оказываются в swap, являются страницы, которые программа не использует часто, если вообще когда-либо. Это чаще, чем вы могли догадаться. Большинство динамических библиотек, к которым ваши программы ссылаются, имеют подпрограммы в них, которые ваша программа не использует, но они должны были быть загружены в оперативную память динамическим компоновщиком . Когда ОС видит, что вы не используете весь текст программы в библиотеке, он сворачивает ее, создавая место для кода и данных, которые используются вашими программами. Если такие поврежденные страницы памяти повреждены, кто когда-нибудь узнает?

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

ZFS и т. Д. Отличаются от swap еще одним ключевым способом: мы не разделяем файловые системы RAID или RAID. Необычно видеть несколько устройств подкачки на одной машине и даже когда такие вещи существуют (например, схема подкачки файлов OS X, несколько подкатегорий для Linux через swapon и т. Д.), Устройства обмена обычно являются независимыми, а не взаимозависимыми, как с системой типа RAID. Таким образом, нам не требуется обширное контрольное суммирование, потому что замена сменного устройства не предполагает поиск других взаимозависимых устройств подкачки для данных, которые должны поступать на сменное устройство. В терминах ZFS мы не используем устройства для замены подсистемы resilver.

Все это означает, что вы должны использовать надежное устройство подкачки. Однажды я использовал внешний USB-накопитель на 20 долларов для спасения пула ZFS, только чтобы обнаружить, что корпус поврежден, и таким образом ввел еще больше ошибок в проблемный пул. ZFS спас меня здесь. Вы не можете уйти с такой кавалерийской обработкой носителей данных с помощью файла подкачки. Если устройство подкачки умирает и, таким образом, приближается к тому худшему случаю, когда он может вводить неопределяемую ошибку каждые 125 MiB, вы просто должны ее заменить, как можно скорее.

Общий смысл паранойи в этом вопросе сводится к примеру проблемы византийских генералов . Прочитайте это, задумайтесь о дате 1982 года в учебном документе, описывающем проблему, в мире компьютерных наук, а затем решите, хотите ли вы в 2016 году внести свежие мысли, чтобы добавить к этой проблеме. А если нет, то, возможно, вы просто будете использовать технологию, разработанную тремя десятилетиями выпускников CS, которые все знают о проблеме Византийских генералов.

Это хорошо тронутая земля. Вы, вероятно, не можете придумать идею, возражение или решение, которое еще не обсуждалось до смерти в журналах по информатике.

SATA, безусловно, не является абсолютно надежным, но, если вы не присоединитесь к академическим кругам или одной из команд разработки ядра, вы не сможете вносить существенный вклад в современное состояние. Эти проблемы уже хорошо известны, как вы уже отметили: ZFS, btrfs, ReFS … Как пользователь ОС вы просто должны верить, что создатели ОС заботятся об этих проблемах для вас, потому что они также знают о византийских генералах.

Я не думаю, что существует «канонический» способ, поэтому следующее мое личное мнение.

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

Лично у меня нет времени, чтобы решить, какую функцию использовать, а какие нет, отпустите время, которое мне нужно будет выяснить, как отключить или использовать эти функции.

Напротив, ZFS обладает прочной и зрелой (IMHO). Итак, чтобы ответить на ваш вопрос, я бы использовал ZFS (кстати, он не потребляет много памяти – см. Ниже).

Но для вас btrfs может быть правильным выбором, поскольку вы используете его уже (если я правильно вас понял), и один из комментариев выше показывает, как использовать его для обмена.

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

Потребление памяти ZFS

Существует общее недоразумение в отношении потребления памяти ZFS. ZFS обычно не потребляет много памяти; Фактически, он работает с ТБ хранения на машинах с 2 ГБ ОЗУ. Только если вы используете дедупликацию (по умолчанию отключен), тогда ей нужно много и много ОЗУ.

Обнаружение / исправление аппаратной ошибки

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

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

Пока что так хорошо, но бывают случаи, когда с диска возникают ошибки, и диск не сообщает об ошибке (см. Следующий раздел). Большинство RAID-массивов могут обнаружить эту ситуацию, используя информацию о четности, но их реакция глупа: вместо сообщения об ошибке и остановки передачи данных они просто пересчитывают четность на основе ошибочных данных и записывают новую четность в соответствующие диска, таким образом, маркируя ошибочные данные как всегда навсегда.

Это разумное поведение? Насколько мне известно, большинство аппаратных RAID5-контроллеров и даже MD-RAID от Linux работают именно так.

Я не знаю о коррекции ошибок btrfs, но вы в конце концов должны внимательно прочитать документы внимательно, особенно если вы используете RAID-массив btrfs.

Тихая гниль

Несмотря на все пламенные войны и (псевдо) научные дискуссии: Реальность в основном отличается от теории, и бесшумная битвая гниль определенно происходит, хотя теория может утверждать обратное (тихая бот-гниль обычно означает, что данные об аппаратном хранилище повреждаются без устройства хранения, сообщающего когда эти данные будут прочитаны, но я добавлю биты сбрасывания в любом месте пути передачи к этому определению).

То, что это происходит, не мое личное мнение: по крайней мере Google, Amazon и CERN опубликовали подробные белые документы, охватывающие именно этот вопрос. Публикации доступны для бесплатного скачивания. Они провели систематические эксперименты с несколькими миллионами жестких дисков и сотнями тысяч серверов / устройств хранения данных либо потому, что у них были проблемы с необнаруженным повреждением данных, либо потому, что они хотели знать, что делать, чтобы предотвратить это до того, как это произошло.

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

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

Срок службы данных

Уоррен Янг прав, когда говорит, что данные об обмене имеют короткий срок службы. Но я хотел бы добавить следующее соображение: не только данные (в смысле документов) попадают в swap, но (возможно, даже более вероятно) части O / S или другого программного обеспечения . Если у меня есть MP3 в свопе, я могу жить с перевернутым битом. Если (из-за чрезвычайной ситуации) части моего программного обеспечения httpd сервера моего производства находятся в swap, я ни в коем случае не могу жить с перевернутым битом, который позже приводит к выполнению поврежденного кода, если он не обнаружен.

эпилог

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

Сказав это, обратите внимание, что вы никогда не получите абсолютной безопасности. Лично я доверяю своей ECC RAM больше, чем мои диски, и я убежден, что ZFS с ее сквозными контрольными суммами уменьшает вероятность проблемы на порядки. Однако я бы никогда не рекомендовал использовать ZFS без ECC RAM.

Отказ от ответственности: я никоим образом не связан с каким-либо поставщиком или разработчиком ZFS. Это справедливо для всех вариантов (вилок) ZFS. Я просто стал поклонником этого в последние дни …