#linux #zfs
Вопрос:
У меня есть пул ZFS со следующей компоновкой и ошибками:
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
wwn-0x5000039ff3d3b114-part2 ONLINE 0 0 0
wwn-0x5000039ff4d3b513-part1 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
wwn-0x5000c500a42783bc-part1 ONLINE 0 0 2
wwn-0x5000c500a426d50b-part1 ONLINE 0 0 2
errors: Permanent errors have been detected in the following files:
tank/foo/bar@veryOldSnapshot;corruptFile.qcow2
Таким образом, это выглядит так, как будто на двух разных устройствах одна и та же запись была повреждена одновременно. Данные, о которых идет речь, находятся на этих дисках с 2019 года, и пул очищается каждую неделю. Каковы ваши шансы? ИМХО, это не может быть реальным случаем «биты переворачиваются из-за космического излучения или сбоя жесткого диска», потому что вероятность того, что на обоих дисках повреждены одни и те же блоки и нет другого блока, действительно мала.
Что еще могло быть причиной этого? Я запустил memtestx86 без проблем, и повторная очистка не выявила никаких других ошибок. Однако, поскольку блок используется в длинной цепочке моментальных снимков, даже удаление рассматриваемого снимка просто заставляет проблему перейти к следующему снимку.
Комментарии:
1. Наиболее вероятное объяснение, которое я могу придумать, заключается в том, что либо данные, либо их контрольная сумма были повреждены в оперативной памяти до записи на диск. Таким образом, ZFS обнаруживает повреждение, но не может его исправить, потому что все версии блока повреждены. Но в этом случае можно было бы ожидать, что более ранние скрабы заразятся этим.
2. Другая возможность заключается в том, что вы читали из блока на обоих дисках одновременно, и что-то случилось с обоими дисками одновременно, что привело к тому, что они перепутали данные под заголовком. Это кажется довольно маловероятным, хотя бы потому, что даже очень небольших различий во времени было бы достаточно, чтобы они не были синхронизированы в одном блоке.