*** Alex Kicelew <arko...@gmail.com> [2017-07-16 21:02]:
>2) дожидаемся окончания ресилвера, однократно делаем этот диск
>загрузочным, говорим ему zpool offline и отсоединяем его; пул остается в
>degraded state, но полностью работоспособный (в этом моменте я уверен не
>до конца, и хотелось бы выслушать его подтверждение или опровержение);

Да, всё верно.

>Цель этих нетривиальных действий: если в процессе эксплуатации основного
>диска (когда резервный отключен) на нем возникнет checksum error, есть
>предположение (в котором я как раз совершенно не уверен), что когда
>вечером будет подключен резервный и окажется, что поврежденные данные
>есть в неповрежденном виде на резервном, zfs поправит их на основном,
>как он поступает в случае, если в момент обнаружения ошибки доступны оба
>зеркала.

Тоже всё верно. Но есть засада. Время от времени ZFS делает checkpoint
-- обновляет überblock ссылающийся на самое свежее дерево метаданных. У
этого checkpoint есть, грубо говоря, timestamp, который только
увеличивается. Во время вставки диска для resilvering он пытается понять
не был ли он частью этого пула и если был, то он понимает насколько
checkpoint-ов он "отстал" от основного. Найдя в основном поле старый
checkpoint, он может создать "diff", который будет заresilverен. Но если
прошло достаточно большое время, то настолько старого checkpoint-а не
будет и он вынужден будет делать resilvering полностью всех данных с
нуля, ведь он же не может "вечно" хранить все прошлые известные ему
checkpoint-ы/überblock-и. Я точно не уверен, но вот терзают смутные
сомнения что он будет хоть как-то смотреть на данные которые там всё же
были -- поэтому такой старый диск для него будет как пустой.

Кол-во checkpoint-ов на пуле вроде как фиксировано и что-то порядка
полутысячи (где-то слышал). То есть минуты отключенного состояния он
конечно переживёт спокойно, но вот часы уже навряд ли.

-- 
Sergey Matveev (http://www.stargrave.org/)
OpenPGP: CF60 E89A 5923 1E76 E263  6422 AE1A 8109 E498 57EF

Ответить