]> Sergey Matveev's repositories - stargrave-blog.git/commit
Обожаю удобство ZFS
authorSergey Matveev <stargrave@stargrave.org>
Sun, 17 Jan 2016 22:12:31 +0000 (01:12 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 17 Jan 2016 22:12:31 +0000 (01:12 +0300)
commit3df04ced3bebb15c49f874f2f3674a170ac61358
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent943799dd8b474ab437370a26aa6cfc8161e4ea2f
Обожаю удобство ZFS

Очередная радость от использования ZFS. dmesg стал говорить регулярно
что на ada1 диске возникают unrecoverable ошибки DMA. ada1 это зеркало
ada0. Возможно порт SATA плохой в корзине, возможно шлейф, возможно диск
или ещё чего. Самое простое это просто переткнуть диск в другой слот
корзины.

Можно выключить систему, переткнуть, включить. Это будет большое время
простоя, не хочется выключать систему. Можно сделать по горячему: вынуть
и вставить. Будь это обычный RAID, то не миновать полного rebuild-а
всего трёхтерабайтного диска.

Но в ZFS это тривиально:

    # zpool offline zroot ada1

Через пару секунд ada1 диск можно вынуть, он отключен от пула.
Перетыкаем в другой слот.

    # zpool online zroot ada1

И видим что он автоматически понял что диск из этого пула, и быстро
сделал resilvering:

  pool: zroot
 state: ONLINE
  scan: resilvered 33.5M in 0h0m with 0 errors on Mon Jan 18 00:23:43 2016

То есть ему пришлось всего 33.5 мегабайта данных синхронизировать. Он
находит superblock, находит ближайший checkpoint в одном и другом диске.
У каждого checkoint-а есть монотонно инкрементирующийся timestamp. По
нему он понимает насколько кто отстаёт. Используя деревья Меркле он
шустро находит разницу между ними и её дописывает во время resilvering
на второй диск. Теперь они синхронизированы точно.

Никакого downtime, 33.5 мегабайта переданных данных, вместо трёх
терабайт, пара команд, всё работает как ни в чём не бывало.