ошибка контрольной суммы zfs в raidz1 vdev, но не в диске

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

  pool: tmp_zpool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://zfsonlinux.org/msg/ZFS-8000-8A
  scan: none requested
config:

    NAME                  STATE     READ WRITE CKSUM
    tmp_zpool             ONLINE       0     0     2
      raidz1-0            ONLINE       0     0     4
        tmp_cont_0        ONLINE       0     0     0
        tmp_cont_1        ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:

        /some/file

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

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

Обновление: Я бросил ожидать объяснения того, что могло бы пойти не так, как надо, если я очищаю ошибки и повторную попытку, таким образом, я шел вперед и попробовал это. Я сначала сделал zpool clear, затем zpool status не показал ошибок. Затем я пытался считать файлы с ошибками (2 из них в конце), но о соответствующих блоках все еще сообщали как плохих/нечитабельных. На этот раз, zpool status больше не показывал увеличение ошибок контрольной суммы. Затем, я попробовал к офлайн одному из дисков в raidz1 vdev, и повторите процесс, но результаты не изменились. Всего, я потерял 2 128K блока из 1.6T.

Состояние ответа: В настоящее время я нахожу, что нет никакого всестороннего ответа на этот вопрос. Если кто-то хочет описать один или отредактировать существующего, обратитесь к следующему:

  1. Что, возможно, вызвало эту ситуацию.
  2. Что могло делаться с этим.
  3. Как это, возможно, было предотвращено.

Для 1, теории и их проблемы, кажется:

  • Выбор raidz1 raidz2. Проблема: каждому нужен минимум 4 дисков для raidz2. В то время как потребность в дублировании ясна, не полезно неоднократно предположить, что средство исправления для провального дублирования является большим дублированием. Было бы намного более полезно понять, как лучше всего использовать дублирование, которое Вы имеете.

  • Выбор raidz1 mirror. Проблема: На первый взгляд различие между ними, кажется, эффективность, не дублирование. Это могло бы быть неправильно, все же. Почему: zfs сохраняет контрольную сумму с каждым блоком на каждом диске, но никакой диск не сообщил об отдельных ошибках контрольной суммы. Это, кажется, предполагает, что для каждого сбойного блока, эти 2 диска содержали различные полезные нагрузки блока, каждого с контрольной суммой соответствия, и zfs не мог сказать, который корректен. Это предполагает, что было 2 различных вычисления контрольной суммы, и что полезная нагрузка, так или иначе измененная между ними. Это могло быть объяснено повреждением RAM, и возможно (подтверждение потребности) с выбором mirror raidz1, только одна контрольная сумма была бы необходима.

  • Повреждение RAM во время записи, не чтения. Как объяснено выше, это кажется вероятным. Проблема: почему это было не быть обнаруженным как ошибка во время записи? Может случиться так, что zfs не проверяет то, что это пишет? Или скорее что полезные нагрузки блока, записанные в различные диски, являются тем же?

Для 2:

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

Для 3:

  • Это ясно это mirror raidz1 предотвратил бы эту ситуацию?

  • Я предполагаю, что куст этой шпульки обнаружил проблему. В моем случае я перемещал некоторые данные, и я уничтожил исходные данные, прежде чем я на самом деле считал эту шпульку, думая, что у меня есть 2 дисковых дублирования. Мораль должна была бы здесь вычистить шпульку прежде, чем доверять ее содержанию? Конечно, вычищение полезно, но действительно ли это необходимо? Например, был бы куст быть необходимым с mirror вместо raidz1?

6
задан 10 August 2015 в 19:32
2 ответа

Это проблема raidz1 (а также RAID5). Если данные на диске изменяются, но сбоя диска не происходит, чтобы ZFS или RAID-контроллер знал, какой диск вызвал ошибку, он не может узнать, какой диск правильный. С raidz2 (и выше) или RAID6 вы получаете кворум дисков, которые могут решить, какой диск игнорировать для восстановления.

Единственное решение здесь - перезаписать файл, либо путем восстановления резервной копии, либо путем записи / dev / null в файл.

3
ответ дан 3 December 2019 в 00:38

У меня возникла аналогичная проблема. Я не уверен, что это полезно, но я нашел этот соответствующий пост об ошибках контрольной суммы на уровне vdev от разработчика FreeBSD.

https://lists.freebsd.org/pipermail/freebsd-hackers/2014-October/046330 .html

Ошибки контрольной суммы будут отображаться в raidz vdev вместо листа, если vdev_raidz.c не может определить, какой лист vdev был ответственным. Это могло произойти, если два или более конечных vdev возвращают неверные данные для одного и того же блока, что также может привести к неисправимым ошибкам данных. Я вижу, что у вас есть неустранимые ошибки данных, так что, возможно, это и произошло

Незначительные ошибки проектирования в ZFS также могут привести к тому, что vdev_raidz.c не сможет определить, какой дочерний элемент был ответственен за ошибку контрольной суммы. Однако я видел это только тогда, когда у raidz vdev был зеркальный ребенок. Это может произойти только в том случае, если дочерний элемент является запасным или заменяющим vdev. Активировали ли вы какие-либо запасные части или заменили vdev вручную?

Я сам рассматриваю возможность удаления моего файла zpool.cache и импорта моего пула для регенерации этого файла zpool.cache .

0
ответ дан 3 December 2019 в 00:38

Теги

Похожие вопросы