Вопрос или проблема
Недавняя проверка моего пула 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 любые изменения файла создают новые версии, тем самым сохраняются старые. Однако, если файл не менялся с момента создания снимка, то старая версия может продолжать содержать ошибку.
Определение затронутых снимков
Чтобы проверить, какие снимки содержат ошибочную версию файла, выполните следующие шаги:
-
Получите список всех снимков:
Вы можете использовать команду:zfs list -t snapshot -o name
Эта команда выведет все доступные снимки для вашего пула.
-
Идентифицируйте файл в других снимках:
Сравните другие снимки, чтобы определить, содержится ли файл в них, и сравните с тем, что уже есть в вашем последнем снимке. Вы можете использовать инструментzfs diff
:zfs diff rpool/[DATASET]@autosnap_2024-09-30_23:30:07_weekly rpool/[DATASET]
Данная команда покажет, какие изменения произошли между последним снимком и состоянием файловой системы.
-
Проверка данных в других снимках:
Затем вы можете проверить, какие копии содержат ошибочно сохранённые данные. Чтобы проверить содержимое других снимков, используйте следующую команду:zfs send rpool/[DATASET]@<snapshot_name> | zfs receive -f <temporary_pool>
Это создаст временный пул и позволит вам проверить содержимое, не устанавливая его в ваше основное файловое пространство. Таким образом, можно будет увидеть, содержится ли испорченный файл в других снимках.
-
Поиск ошибок через утилиты проверки целостности:
Используйте утилиты, такие какzdb
(ZFS Debug Tool), для глубокой проверки пула на наличие ошибок. Например:zdb -e -r rpool
Эта команда может помочь вам определить структурные ошибки на уровне пула, что может включать и информацию о файлах.
Рекомендации по восстановлению
Если вы обнаружите, что ошибка присутствует и в других снимках, вы можете сосредоточиться на восстановлении данных из резервных копий:
- Проверьте существующие резервные копии и восстановите данные из них.
- Если доступные снимки содержат ошибочные версии, примените
zfs rollback
на здоровом снимке, если таковой имеется.
Заключение
В целом, ошибка ZFS может затронуть не только последний снимок, поэтому важно тщательно проверять все снимки и использовать инструменты для анализа и восстановления данных. Помните, что регулярное создание резервных копий и мониторинг состояния пула являются ключевыми факторами для обеспечения целостности данных.
Используйте приведённые методы для идентификации затронутых снимков и последующего восстановления данных, чтобы минимизировать потенциальные потери и сохранить целостность вашей файловой системы ZFS.