Перенос данных с ZFS RAID на Btrfs RAID1
Подготовка к рискам
Перед началом обязательно сделайте бэкап критичных данных (документы, конфиги) на любой внешний носитель или в облако. При операциях с “живым” разделением зеркала легко потерять данные.
Отключение диска из ZFS mirror
# Смотрим статус пула
zpool status
# Отключаем один диск (например, /dev/sdb, замените на ваш)
zpool offline <pool_name> /dev/sdb
# Проверяем, что пул работает в DEGRADED состоянии на одном диске
zpool status
Диск /dev/sdb теперь свободен и содержит “остатки” ZFS, которые мы позже затрём.
Создание Btrfs на отключённом диске
# Затираем ZFS-метки (важно!)
wipefs -a /dev/sdb
# Создаём btrfs в single-режиме (пока без зеркала)
mkfs.btrfs -L mydata /dev/sdb
# Монтируем
mount /dev/sdb /mnt/new_btrfs
Копирование данных из ZFS в Btrfs
# Синхронизируем данные (сохраняя права, симлинки и т.д.)
rsync -avxHAX --delete /путь_к_zfs/ /mnt/new_btrfs/
Можно использовать cp -a, но rsync удобнее для верификации и возобновления.
Уничтожение старого ZFS пула
# Размонтируем старый ZFS
zfs unmount -a
# Уничтожаем пул (осторожно!)
zpool destroy <pool_name>
# Затираем метаданные на втором диске
wipefs -a /dev/sda
Добавление второго диска и конвертация в RAID1
# Добавляем второй диск в btrfs
btrfs device add /dev/sda /mnt/new_btrfs
# Конвертируем все данные в RAID1 (mirror) — вот ключевой момент!
btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/new_btrfs
Без этого balance у вас будет single-профиль на двух дисках, который не является зеркалом.
Финальные настройки
# Правим /etc/fstab (UUID можно узнать через blkid)
blkid /dev/sdb # или /dev/sda
# fstab:
# UUID=... /mountpoint btrfs defaults,compress=zstd,autodefrag 0 0
# Перезагружаемся для проверки
Насколько надёжно Btrfs mirror?
Коротко: достаточно надёжно при соблюдении условий.
Сильные стороны:
- Ядро Linux с 2014 года. RAID1 работает стабильно. Red Hat использует его в продуктивных средах.
- Встроенная проверка чексумм на лету и автоматическое исправление битых блоков при наличии зеркала (через scrub).
- Гибкость: можно добавлять/удалять диски, менять профили на лету.
Что нужно делать обязательно:
Регулярный scrub (раз в месяц):
btrfs scrub start /mountpoint
Мониторинг ошибок:
btrfs device stats /mountpoint
- Не полагаться только на RAID1 для целостности метаданных — метаданные (файловая структура) при btrfs RAID1 копируются в двух экземплярах на разных устройствах, это хорошо.
- Использовать проверенный сценарий восстановления: если умирает один диск, не паниковать, загружаться с оставшегося в degraded-режиме (mount -o degraded) и заменять сбойный.
Слабые места, о которых важно знать:
- RAID5/6 всё ещё нестабилен (у вас RAID1 — с ним проблем нет).
- При “split-brain” (диски разъехались и оба считают себя главными) автоматического разрешения конфликта нет. Надо вручную решать, какой диск источник. При обычном сценарии “один диск вышел из строя” это не проблема.
- Лучше избегать дешёвых SATA-кабелей/контроллеров, искажающих данные. ECC-память приветствуется.
Важные предостережения
- После удаления диска из ZFS пула данные на нём не тронуты, но ZFS продолжает считать диск членом пула. Пока вы не уничтожили старый пул, можно вернуть диск обратно. Но как только вы создадите btrfs и добавите второй диск в новый пул — пути назад нет.
- При копировании rsync-ом большие файлы сохранят целостность, но обязательно проверьте, что все данные перенеслись (сравните размер, количество файлов).
- После конвертации в RAID1 проверьте:
btrfs filesystem df /mnt/new_btrfs
# Должно показывать RAID1 для Data и Metadata
Этот метод позволяет выполнить миграцию без внешних дисков и простоя системы, но с моментом риска при операции zpool destroy. Будьте внимательны.