Ошибки тишины диска и надежность Linux swap


12

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

Точно так же, у RAM также могут быть проблемы с надежностью, и поэтому у нас есть ECC RAM, чтобы решить эту проблему.

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

  • btrfs вообще не поддерживает файлы подкачки. Вы можете настроить петлевое устройство из файла 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 - к сожалению, насколько я могу судить, патч умер и не вышел в апстрим по неизвестным мне причинам. Жаль, это звучало как приятная особенность. С другой стороны, если вы установите своп на RAID-1 - если повреждение не поддается восстановлению контрольной суммы, вы бы хотели, чтобы диспетчер памяти попытался прочитать данные с другого диска до паники или чего-то еще, что вероятно, выходит за рамки того, что должен делать менеджер памяти.

В итоге:

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

1
Не будет ли в зашифрованном свопе обнаружение ошибок как побочный эффект? Если зашифрованный поток будет поврежден на диске, расшифровка взорвется ... Я не знаю, как система реагирует тогда!
Стивен Китт

У меня нет опыта работы с btrfs, но я прочитал ссылку, которую вы цитировали, и я думаю, что вы что-то упускаете. Они ссылаются на файлы, в которых блоки создаются динамически, т.е. разреженные файлы. Вы можете создать выделенный раздел brtfs, смонтированный без COW, создать файл, заполненный нулями (dd if = / dev / zero), соответствующий желаемому размеру подкачки, и смонтировать этот файл как файл подкачки. Я не вижу причин, по которым это повлечет за собой снижение производительности.
Отей

3
@Otheus по соображениям производительности MD читает только с одного устройства (точнее, читает со всех устройств, но одно чтение включает только одно устройство); он может сравнивать содержимое всех задействованных устройств, но это отдельная операция, очистка .
Стивен Китт

2
@Otheus: установка nodatacow также отключает контрольные суммы: btrfs.wiki.kernel.org/index.php/Mount_options ... "Это также отключает контрольную сумму! IOW, nodatacow подразумевает nodatasum." сальто и гниль могут остаться незамеченными. "
Джеймс Джонстон

3
@Otheus: «Наконец, с не SDD-дисками каждый блок 512 или 1k имеет CRC, связанный с ним» .... правда, но он не защитит от переворотов битов вне самого диска. (и вы также очень доверяете встроенному микропрограммному обеспечению закрытого исходного кода для одноразовых дисков.) Это причины, по которым btrfs и ZFS существуют в первую очередь: они не доверяют базовому хранилищу (иначе они не будут беспокоиться). с контрольной суммой в первую очередь). Например, некоторые пользователи сообщают о перебоях битов из-за плохого SATA-кабеля и / или ненадежных источников питания.
Джеймс Джонстон

Ответы:


5

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

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

правда, но он не защитит от переворотов вне самого диска

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

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

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

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

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

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

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

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

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

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

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

ZFS и тому подобное отличаются от swap в другом ключевом аспекте: мы не объединяем файловые системы RAID вместе. Когда на одном компьютере используется несколько устройств подкачки , это схема JBOD , а не RAID-0 или выше. (например, схема сцепленных файлов подкачки в MacOS , Linux и swaponт. д.) Поскольку устройства подкачки являются независимыми, а не взаимозависимыми, как с RAID, нам не требуется обширное контрольное суммирование, поскольку замена устройства подкачки не подразумевает поиск других взаимозависимых устройств подкачки для данные, которые должны идти на замену устройства. С точки зрения ZFS, мы не переносим сменные устройства с избыточных копий на другие устройства хранения.

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

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

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

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

В настоящее время нецелесообразно помещать ваш файл подкачки поверх ZFS или Btrfs, но если вышеперечисленное не убедит вас, вы можете по крайней мере поместить его поверх xfs или ext4. Это было бы лучше, чем использование выделенного раздела подкачки.


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

2

дм целостности

Смотрите: Документация / Устройство-сопоставление / dm-целостность.txt

dm-integrityобычно используется в режиме журналирования. В случае обмена вы можете обойтись без журналирования. Это может значительно снизить нагрузку на производительность. Я не уверен, нужно ли переформатировать раздел подкачки-целостности при каждой загрузке, чтобы избежать перехвата ошибок после нечистого завершения работы.

В первоначальном объявленииdm-integrity автор заявляет о предпочтении «защиты целостности данных на более высоком уровне». В случае подкачки это откроет возможность хранения контрольных сумм в оперативной памяти. Однако этот вариант потребует как нетривиальных изменений текущего кода подкачки, так и увеличения использования памяти. (Текущий код отслеживает обмен эффективно с использованием экстентов, а не отдельных страниц / секторов).


DIF / DIX?

Поддержка DIX была добавлена ​​Oracle в Linux 2.6.27 (2008).

Обеспечивает ли использование DIX сквозную целостность?

Вы можете проконсультироваться со своим продавцом. Я не знаю, как вы могли бы сказать, если они лгут об этом.

DIX требуется для защиты данных во время полета между ОС (операционной системой) и HBA .

DIF сам по себе повышает защиту данных во время полета между HBA и устройством хранения . (См. Также: презентацию с некоторыми цифрами о разнице в показателях ошибок ).

Именно потому, что контрольная сумма в защитном поле стандартизирована, технически возможно реализовать команды DIX без какой-либо защиты данных в состоянии покоя. Просто попросите HBA (или устройство хранения) восстановить контрольную сумму во время чтения. Эта перспектива была совершенно ясна в оригинальном проекте DIX.

  • DIF / DIX ортогональны контрольным суммам логических блоков
    • Мы все еще любим тебя, братва!
    • Ошибки контрольной суммы логического блока используются для обнаружения поврежденных данных
    • Обнаружение происходит во время чтения
    • ... который может быть через несколько месяцев, оригинальный буфер потерян
    • Любые избыточные копии также могут быть плохими, если исходный буфер искажен
  • DIF / DIX о профилактическом предотвращении коррупции
    • Предотвращение хранения плохих данных на диске в первую очередь
    • ... и выяснение проблем до того, как исходный буфер будет удален из памяти

- lpc08-data-целостность.pdf от oss.oracle.com

В одной из ранних публикаций о DIX упоминается возможность использования DIX между ОС и HBA, даже если накопитель не поддерживает DIF.

Полная лживость относительно маловероятна в «корпоративных» контекстах, где в настоящее время используется DIX; люди заметят это. Кроме того, DIF основан на существующем оборудовании, которое может быть отформатировано с 520-байтовыми секторами. Протокол для использования DIF якобы требует, чтобы вы сначала переформатировали диск, см., Например, sg_formatкоманду.

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

В качестве альтернативы ОС может генерировать свои собственные контрольные суммы и сохранять их в пространстве тегов приложения. Однако в текущей версии Linux это не поддерживается (v4.20) . Комментарий, написанный в 2014 году, предполагает, что это может быть связано с тем, что «очень немногие устройства хранения фактически разрешают использовать пространство тегов приложения». (Я не уверен, относится ли это к самому устройству хранения данных, к HBA или к обоим).

Какие устройства DIX доступны для работы с Linux?

Разделение буферов метаданных данных и целостности, а также выбор контрольных сумм называются расширениями целостности данных [DIX]. Поскольку эти расширения не входят в сферу действия протокольных органов (T10, T13), Oracle и ее партнеры пытаются стандартизировать их в рамках Ассоциации производителей сетей хранения данных.

- v4.20 / Документация / block / data-целостность.txt

Википедия говорит мне, что DIF стандартизирован в NVMe 1.2.1. Для SCSI HBA, кажется, немного сложно определить это, если у нас нет стандарта, на который можно указать. На данный момент наиболее точно можно сказать о поддержке «Linux DIX» :-). Доступны устройства:

SCSI T10 DIF / DIX [sic] полностью поддерживается в Red Hat Enterprise Linux 7.4 при условии, что поставщик оборудования его квалифицировал и обеспечивает полную поддержку для конкретной конфигурации HBA и массива хранения. DIF / DIX не поддерживается в других конфигурациях, не поддерживается для использования на загрузочном устройстве и не поддерживается виртуальными гостями.

В настоящее время, как известно, следующие поставщики предоставляют эту поддержку ...

- Примечания к выпуску RHEL 7.5, глава 16. Хранение

Все оборудование, упомянутое в примечаниях к выпуску RHEL 7.5, является Fibre Channel.

Я не знаю этот рынок. Похоже, что в будущем DIX может стать более доступным на серверах. Я не знаю ни одной причины, по которой он стал бы доступен для потребительских дисков SATA - насколько я знаю, фактически не существует стандарта для формата команд. Мне будет интересно узнать, станет ли он более доступным на NVMe.


Спасибо! Я думал, что слышал кое-что о каком-то «аддоне» целостности для dev-mapper, но не был уверен
Пой

2

Своп имеет ??? <--- это мой вопрос

Своп все еще не защищен в Linux (но см. UPD).

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

Btrfs по-прежнему не может обрабатывать файлы подкачки . Они упоминают о возможном использовании loopback, хотя отмечается, что он имеет низкую производительность. Существует неясное указание на то, что в Linux 5 он может быть наконец (?)…

Патчи для защиты самого обычного свопа с контрольными суммами не стали популярными.

Итак, в целом: нет. В Linux все еще есть пробел.

UPD. : Как указывает @ sourcejedi , существует такой инструмент, как dm-целостность. Ядро Linux, начиная с версии 4.12, получило цель устройства отображения, которую можно использовать для предоставления контрольных сумм любым обычным блочным устройствам, и те, которые предназначены для подкачки, не являются исключением. Инструменты не включены в основные дистрибутивы, и большинство из них не имеют никакой поддержки в подсистеме udev, но в конечном итоге это должно измениться. В паре с поставщиком резервирования, скажем, на вершине MD Software, также называемом программным RAID-массивом Linux, должна быть возможность не только обнаруживать битовую гниль, но и перенаправлять запрос ввода-вывода на исправные данные, поскольку dm-целостность будет указывать вопрос и MD должен справиться с этим.


0

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

Наблюдая за продвижением 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 или другую теорию, на которую можно рассчитывать. Под значительно выше я подразумеваю порядки величин.

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

Время жизни данных

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

эпилог

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.