Как я могу узнать, какие снимки ZFS затронуты ошибкой?

Вопрос или проблема

Недавняя проверка моего пула ZFS обнаружила одну ошибку:

$ zpool status -v rpool
  pool: rpool
 state: ONLINE
status: Одно или несколько устройств испытали ошибку, что привело к повреждению данных. Приложения могут быть затронуты.
action: Восстановите файл в вопросе, если это возможно. В противном случае восстановите весь пул из резервной копии.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
  scan: scrub repaired 0B in 04:48:04 with 1 errors on Thu Oct 24 14:07:21 2024
config:

        NAME                                            STATE     READ WRITE CKSUM
        rpool                                           ONLINE       0     0     0
          raidz1-0                                      ONLINE       0     0     0
            wwn-0x50014ee216641349-part2                ONLINE       0     0     2
            wwn-0x50014ee216620a52-part2                ONLINE       0     0     2
            wwn-0x50014ee2c1015982-part2                ONLINE       0     0     2
          raidz1-1                                      ONLINE       0     0     0
            ata-WDC_WD3000FYYZ-01UL1B1_WD-WCC1F0293326  ONLINE       0     0     0
            ata-WDC_WD30EZRZ-00Z5HB0_WD-WCC4N2ZYKAKR    ONLINE       0     0     0
            ata-WDC_WD30EZRZ-60Z5HB0_WD-WCC4N0SFH6JA    ONLINE       0     0     0
        logs
          ata-CT500MX500SSD1_2344E8835E4F-part1         ONLINE       0     0     0
        cache
          sdi2                                          ONLINE       0     0     0

errors: Обнаружены постоянные ошибки в следующих файлах:

        rpool/[DATASET]@autosnap_2024-09-30_23:30:07_weekly:[FILEPATH]

(Примечание: фактические пути файловой системы и файлов скрыты для обеспечения конфиденциальности, но имя снимка реально.)

Очевидно, что ошибка присутствует в снимке “autosnap_2024-09-30_23:30:07_weekly”. Тем не менее, поскольку ZFS использует копирование при записи и этот файл, предположительно, не изменялся некоторое время, я ожидаю, что эта ошибка также существует в версиях этого файла, присутствующих в других снимках. Однако команда zpool status не дает мне никаких указаний на это. Есть ли что-то, что я могу сделать, чтобы определить, какие снимки содержат поврежденную копию файла, а какие нет?

Ответ или решение

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

Понимание ошибки

Вы уже получили сообщение о том, что в определенном файле, находящемся в снимке autosnap_2024-09-30_23:30:07_weekly, обнаружены постоянные ошибки. Из-за механизма копирования при записи (copy-on-write) ZFS любые изменения файла создают новые версии, тем самым сохраняются старые. Однако, если файл не менялся с момента создания снимка, то старая версия может продолжать содержать ошибку.

Определение затронутых снимков

Чтобы проверить, какие снимки содержат ошибочную версию файла, выполните следующие шаги:

  1. Получите список всех снимков:
    Вы можете использовать команду:

    zfs list -t snapshot -o name

    Эта команда выведет все доступные снимки для вашего пула.

  2. Идентифицируйте файл в других снимках:
    Сравните другие снимки, чтобы определить, содержится ли файл в них, и сравните с тем, что уже есть в вашем последнем снимке. Вы можете использовать инструмент zfs diff:

    zfs diff rpool/[DATASET]@autosnap_2024-09-30_23:30:07_weekly rpool/[DATASET]

    Данная команда покажет, какие изменения произошли между последним снимком и состоянием файловой системы.

  3. Проверка данных в других снимках:
    Затем вы можете проверить, какие копии содержат ошибочно сохранённые данные. Чтобы проверить содержимое других снимков, используйте следующую команду:

    zfs send rpool/[DATASET]@<snapshot_name> | zfs receive -f <temporary_pool>

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

  4. Поиск ошибок через утилиты проверки целостности:
    Используйте утилиты, такие как zdb (ZFS Debug Tool), для глубокой проверки пула на наличие ошибок. Например:

    zdb -e -r rpool

    Эта команда может помочь вам определить структурные ошибки на уровне пула, что может включать и информацию о файлах.

Рекомендации по восстановлению

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

  • Проверьте существующие резервные копии и восстановите данные из них.
  • Если доступные снимки содержат ошибочные версии, примените zfs rollback на здоровом снимке, если таковой имеется.

Заключение

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

Используйте приведённые методы для идентификации затронутых снимков и последующего восстановления данных, чтобы минимизировать потенциальные потери и сохранить целостность вашей файловой системы ZFS.

Оцените материал
Добавить комментарий

Капча загружается...