Как mdadm rasync узнает, на каком из дисков блок актуальный, а на каком нет?
Когда RAID1 ресинкается, что происходит в этот момент? Он всегда
1) копирует с первого диска на второй?
2) или же для каждого блока где-то хранит timestamp его изменения, и копирует блоки, которые более новые (т.е. может одновременно часть блоков копировать с первого диска на второй, а часть — со второго на первый)?
Если (1), то как узнать, какой диск «ведущий», а какой — «ведомый»?
Если (2), то где это место, где хранится timestamp? В самом блоке же вряд ли оно есть (или все же есть?).
На сколько наблюдал, при ресинхронизации mdadm читает со всех дисков массива и сравнивает значения.
А вот чего он делает, когда видит расхождения (кроме инкремента /sys/block/md*/md/mismatch_cnt ) и при этом все диски уверены, что их значения корректны — вопрос, не знаю.
> Event Count for the Array — Incremented whenever the superblock is updated. Used by mdadm in re-assembly to detect failed/out-of-sync component devices.
Тут смотря что считать рассинхронизацией, есть несколько случаев:
1) сбой одного диска зарегистрированный mdadm — тогда он помечает его как сбойный и ждет замены, потом берет данные с нормального диска.
2) сбой одного диска замеченный админом, и пометка его руками как fail, алгорит такой же у первого
3) так называемая «разовая ошибка» — когда оба диска были нормальными, а вдруг между ними оказались разные данные. такая ошибка не имеет нормального способа восстановления в raild1. С какого диска он берет данные сказать не могу, но фс он данные он не восстанавливает — это падает на плечи fsck и журнала файловой системы.
например третий стлучай может быть вызван отключением питания, если там ext3 — ничего страшного, журнал сделает свое дело и всё восстановит (если успел записать журнал), если например XFS — прощай данные. можно даже эксперимент с виртуалкой произвести)
в этом плане raid5 лучше — он застрахован от разовой ошибки.