Как добавить второй диск и превратить ZFS Single Disk в зеркало (RAID1)

Proxmox migration from ZFS single disk to ZFS RAID1 Статьи

   Сегодня клиент обратился с задачей: необходимо превратить уже установленную систему на одном ZFS-диске в зеркало (RAID1), после добавления второго диска. Для Proxmox VE, установленного на ZFS на одном диске, процедура расширения до зеркала требует нескольких шагов. Пройдём по ним на примере реального сервера. В данной статье мы изучим как на Proxmox VE безопасно перейти с ZFS single disk на ZFS mirror — пошаговая инструкция с примерами и настройкой загрузчика. Proxmox ZFS mirror это аналог RAID1. Те же самые шаги можно сделать на чистом Debian, только процесс установки загрузчика будет немного другим — если интересно, пишите в комментариях, и мы рассмотрим данный вариант.


Что мы знаем о системе

  • Proxmox установлен на одном диске (/dev/sdb) с ZFS
  • Системный пул называется rpool
  • Новый диск подключён как /dev/sda
  • Используется UEFI загрузка

Проверка текущего состояния Proxmox

Для начала взглянем что у нас с ZFS:

   Пример вывода:

  pool: rpool
 state: ONLINE
  scan: scrub repaired 0B in 00:00:26 with 0 errors on Sun May 11 00:24:27 2025
config:

        NAME                                             STATE     READ WRITE CKSUM
        rpool                                            ONLINE       0     0     0
          ata-SuperMicro_SSD_SMC0515D90722CB44445-part3  ONLINE       0     0     0

   Мы видим что системный том действительно называется rpool и состоит из одного диска. Точнее даже не диска целиком а одной из партиций диска — part3 . Так как у нас в ZFS используется Disk-ID, проверим какому диску этот Disk-ID соответствует :

   И мы видим что данный ID это символическая ссылка на диск sdb, то есть информация по диску от клиента верна :

lrwxrwxrwx 1 root root 9 May 26 13:12 /dev/disk/by-id/ata-SuperMicro_SSD_SMC0515D90722CB44445 -> ../../sdb

Взглянем что у нас с дисками

   Для начала диск который в данный момент используется как системный (в вашем случае это может быть другой диск) :

   Получаем следующую информацию :

Disk /dev/sdb: 59 GiB, 63350767616 bytes, 123731968 sectors
Disk model: SuperMicro SSD  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 95BC74E5-551A-47EB-ADC5-BA2D85CEB4CF

Device       Start      End  Sectors  Size Type
/dev/sdb1       34     2047     2014 1007K BIOS boot
/dev/sdb2     2048  2099199  2097152    1G EFI System
/dev/sdb3  2099200 83886080 81786881   39G Solaris /usr & Apple ZFS

   Это стандартная разбивка системного диска для Proxmox 7/8, под UEFI используется 2 раздел. Очень хорошо, продолжаем. Теперь надо понять какой диск поставили для зеркала, клиент написал что это sda :

   Видим чистый диск такого же размера как и наш системный — 64гб. Это диски Supermicro SATA DOM, предназначенные для серверных систем с питанием на 8 пине. Очень хорошие и надежные.

Disk /dev/sda: 59 GiB, 63350767616 bytes, 123731968 sectors
Disk model: SuperMicro SSD  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Проверка текущего типа загрузки

   Убедитесь, что используется proxmox-boot:

   Пример вывода:

Re-executing '/usr/sbin/proxmox-boot-tool' in new private mount namespace..
System currently booted with uefi
BC5B-E6D6 is configured with: uefi (versions: 5.15.158-2-pve, 6.8.12-10-pve, 6.8.12-11-pve)

   Загрузчик нам показывает что системы работает с UEFI а не legacy boot. То есть вся информация предоставленная нам изначально клиентом подтвердилась и мы можем приступать к нашей задаче


Очистка второго диска

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


Клонирование разметки с первого диска

 

Тут как говорится надо не перепутать диски — sdb у нас существующий, sda новый

Присоединение нового диска к зеркалу ZFS

   Если ваш ZFS-пул использует раздел /dev/sdb3, уточните это:

  pool: rpool
 state: ONLINE
config:

        NAME                                             STATE     READ WRITE CKSUM
        rpool                                            ONLINE       0     0     0
          ata-SuperMicro_SSD_SMC0515D90722CB44445-part3  ONLINE       0     0     0

errors: No known data errors

   После нам надо узнать ID нового диска, точнее его 3 раздела :

lrwxrwxrwx 1 root root  9 May 26 14:29 ata-SuperMicro_SSD_SMC0515D94317CHE5147 -> ../../sda
lrwxrwxrwx 1 root root 10 May 26 14:29 ata-SuperMicro_SSD_SMC0515D94317CHE5147-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 26 14:29 ata-SuperMicro_SSD_SMC0515D94317CHE5147-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 26 14:29 ata-SuperMicro_SSD_SMC0515D94317CHE5147-part3 -> ../../sda3

   А далее нам надо присоединить ata-SuperMicro_SSD_SMC0515D94317CHE5147-part3 к нашему rpool в котором есть ata-SuperMicro_SSD_SMC0515D90722CB44445-part3 :

   Проверка:

   Вы увидите, как идёт ресинхронизация (resilvering).

  pool: rpool
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Mon May 26 14:34:50 2025
        8.56G / 8.56G scanned, 136M / 8.56G issued at 68.2M/s
        125M resilvered, 1.56% done, 00:02:06 to go
config:

        NAME                                               STATE     READ WRITE CKSUM
        rpool                                              ONLINE       0     0     0
          mirror-0                                         ONLINE       0     0     0
            ata-SuperMicro_SSD_SMC0515D90722CB44445-part3  ONLINE       0     0     0
            ata-SuperMicro_SSD_SMC0515D94317CHE5147-part3  ONLINE       0     0     0  (resilvering)

errors: No known data errors

    Когда перестроение закончится , мы увидим красивую картину — наша система сейчас работает в RAID1:

  pool: rpool
 state: ONLINE
  scan: resilvered 8.74G in 00:01:37 with 0 errors on Mon May 26 14:36:27 2025
config:

        NAME                                               STATE     READ WRITE CKSUM
        rpool                                              ONLINE       0     0     0
          mirror-0                                         ONLINE       0     0     0
            ata-SuperMicro_SSD_SMC0515D90722CB44445-part3  ONLINE       0     0     0
            ata-SuperMicro_SSD_SMC0515D94317CHE5147-part3  ONLINE       0     0     0

errors: No known data errors

Настройка загрузчика

   С самой системой мы разобрались — теперь всё работает, остается разобраться с загрузчиком. Напомним, что в UEFI используется второй раздел диска, поэтому будем работать с ним.

Важно: format /dev/sda2, а не /dev/sda!

Это:
   создаст новую ESP (EFI System Partition),
   отформатирует её в FAT32,
   настроит её как загрузочную.

Убедитесь, что /dev/sda2 — это EFI-раздел на новом диске. Если вы клонировали таблицу разделов с помощью sgdisk -R, он уже существует.

Синхронизация содержимого proxmox-boot:

Это:
   установит GRUB и необходимые файлы EFI,
   синхронизирует ядра и initrd на новом диске.

Проверка:

   После выполнения:

    Ожидаемый вывод — оба диска настроены на загрузку:

Re-executing '/usr/sbin/proxmox-boot-tool' in new private mount namespace..
System currently booted with uefi
3579-98A0 is configured with: uefi (versions: 5.15.158-2-pve, 6.8.12-10-pve, 6.8.12-11-pve)
BC5B-E6D6 is configured with: uefi (versions: 5.15.158-2-pve, 6.8.12-10-pve, 6.8.12-11-pve)

    Проверьте так же :

BootCurrent: 0002
Timeout: 1 seconds
BootOrder: 0000,0002,0008,0003,0007
Boot0000* Linux Boot Manager
Boot0002* Linux Boot Manager
Boot0003* UEFI: Built-in EFI Shell
Boot0007  Hard Drive
Boot0008* UEFI OS

    Мы видим что Linux Boot Manager установлен уже на 2 дисках.


Тестирование отказоустойчивости

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


Итог

  • Система теперь работает в зеркале ZFS (RAID1)
  • Оба диска настроены как загрузочные
  • Используется proxmox-boot-tool для управления загрузкой

   Напишите в комментариях, если есть вопросы или что то осталось не понятно.

Оцените автора
Серверное администрирование
Добавить комментарий