С zfs, если у вас есть, copies=2
а затем вы теряете диск, содержащий некоторые из этих копий, как вы говорите системе, что она должна сделать новую копию блоков данных для затронутых файлов? Или zfs просто начинает добавлять блоки данных для дополнительных копий, как только обнаруживает плохие блоки данных?
Будет ли это делать скраб?
(v0.6.0.56-rc8, пул ZFS версии 28, файловая система ZFS версии 5, Ubuntu 11.10)
For a device to be replaced, the pool must be in the ONLINE state. The device must be part of a redundant configuration, or it must be healthy (in the ONLINE state).
Я предполагаю, что копии = 2 или 3 не считаются избыточной конфигурацией.copies=1
такая возможность и вы ее повысилиcopies=2
, то вы, вероятно, захотите потом выполнить повторную загрузку / повторную очистку - что создаст эти экземпляры. Но @jilliagre правильно: то же самое, блоки не являются избыточной конфигурацией. НЕТ гарантии, что блоки установлены на другом устройстве, даже если в пуле несколько устройств.Я нашел этот вопрос действительно интригующим, и, потратив час на изучение документации, я погрузился в код. Вот что я нашел.
Сначала немного терминологии. Блоки Ditto (которые являются этими копиями, а не зеркалами) автоматически создаются при записи, но могут находиться или не находиться в том же виртуальном устройстве (vdev), что и оригинальная копия. С другой стороны, зеркальные блоки всегда отражаются на другом виртуальном устройстве.
Однако код ссылается на оба типа блоков как дочерние. Вы увидите здесь , что Дитто блоки просто дети с
io_vd == NULL
(это в функции записи). Для зеркального блокаio_vd
будет установлено соответствующее виртуальное устройство (например, ваш второй диск).Имея это в виду, когда он попадает в часть чтения , он рассматривает все дочерние элементы (будь то зеркальные или такие же блоки) как потенциально небезопасные, если он не содержит ожидаемого
good_copies
, и перезаписывает их по мере необходимости . Похоже, ответ на ваш вопрос - да, он перепишет их, когда у вас будет хотя бы одна хорошая копия, и одно из следующих:Уф! Может быть, кто-то может указать на недостатки, но мне понравилось изучать ZFS с помощью этого небольшого упражнения, и я надеюсь, что это поможет!
источник
@jlliagre и другие, которые, кажется, думают, что весь zpool умирает, если умирает один из дисков (vdevs), но пул не является избыточным (mirror / raidz). Это неправда; многодисковый бассейн будет всегда выжить один полный отказ диска , даже если он не является зеркальным или RAIDZ.
Метаданные ZFS всегда копируются как минимум 2 раза, поэтому полный отказ всего диска (или любой его части) не приведет к сбою файловой системы. Кроме того, многие файлы, особенно меньшие, не будут распространяться по всем дискам и, следовательно, не обязательно будут повреждены из-за сбоя диска. ОП задает вопрос о случае использования многодискового пула с такими же блоками (копии пользовательских данных> 1). Здесь, один полный отказ диска
никогда недолжен приводить к потере данных.ZFS всегда будет пытаться поместить блоки ditto далеко от исходного блока, а для пулов с несколькими vdevs это всегда означает для другого vdev (исключение может быть, когда один vdev составляет> 50% пула, что было бы очень необычно) , Метаданные файловой системы также всегда копируются в +1 или +2 раза больше, чем уровень того же уровня, поэтому они всегда сохраняются при сбое диска. Кроме того, если у вас в пуле более трех дисков, вы сможете потерять до половины из них без потери данных; ZFS сохраняет такие же блоки на следующем диске, так что, если вы никогда не потеряете два соседних диска, вы никогда не потеряете данные. (три приличных сбоя диска для того же самого = 2).Когда имеется достаточно копий данных для доступа к файлу (независимо от того, являются ли они копиями из блоков ditto, mirror или raidz), все недостающие копии данных восстанавливаются при доступе к файлу. Это цель скраба; читать все данные и исправлять все, что плохо, используя избыточные копии. Таким образом, чтобы ответить на вопрос OP напрямую, вам нужно просто почистить после замены неисправного диска, и все копии будут восстановлены.
Как всегда, вы можете легко экспериментировать с концепциями, создавая пулы, чьи vdevs для резервного копирования являются обычными разреженными файлами. Удаляя или повреждая файлы vdev, вы можете смоделировать любой тип сбоя, а также можете проверить целостность пула, файловых систем и данных на этом пути.
РЕДАКТИРОВАТЬ: после эксперимента, похоже, что zfs выйдет из строя пул, если диск выходит из строя в многодисковом резервном пуле с копиями> = 2. Повреждение четных данных на одном или нескольких дисках должно оставаться живучим и исправляться с помощью очистки.
источник