замена носителя ZFS, адаптация разделов

У меня есть микросервер HP gen8 под управлением FreeBSD с зеркальным загрузочным носителем: один USB-накопитель (16 ГБ) и одна карта microSD (16 ГБ). Недавно флешка показала ошибки контрольной суммы, поэтому я заменил ее, но под рукой у меня была только флешка на 32 Гб. После повторного использования zpool кажется довольным, но я не могу написать загрузочный код, а gpart даже не распознает носитель.

В деталях.

Это состояние zpool на момент возникновения проблемы:


Checking status of zfs pools:
NAME           SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
freenas-boot  14.5G   791M  13.7G         -      -     5%  1.00x  ONLINE  -
freising       928G  84.6G   843G         -     6%     9%  1.00x  ONLINE  /mnt

  pool: freenas-boot
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://illumos.org/msg/ZFS-8000-9P
  scan: scrub repaired 213K in 0h15m with 0 errors on Thu Mar 23 04:00:56 2017
config:

        NAME        STATE     READ WRITE CKSUM
        freenas-boot  ONLINE     0     0     0
          mirror-0  ONLINE       0     0     0
            da0p2   ONLINE       0     0     3
            da1p2   ONLINE       0     0     0

errors: No known data errors

Я выключил машину, заменил флешку на 32 Гб, перезагрузил. статус zpool дал:


        NAME                     STATE     READ WRITE CKSUM
        freenas-boot             DEGRADED     0     0     0
          mirror-0               DEGRADED     0     0     0
            3278622582862864884  UNAVAIL      0     0     0  was /dev/da0p2
            da1p2                ONLINE       0     0     0

Хорошо, поэтому я сказал zpool использовать новый носитель:


sudo zpool replace freenas-boot 3278622582862864884 /dev/da0 

(zpool не позволял мне использовать '/dev/da0p2')

Потребовалось около 8 часов, чтобы восстановить эту штуку, теперь zpool, похоже, доволен:


sudo zpool status -xv
all pools are healthy

Но я не могу написать загрузочный код:


sudo gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
gpart: No such geom: da0.

gpart даже не распознает новую флешку:


sudo gpart status
  Name  Status  Components
ada0p1      OK  ada0
ada0p2      OK  ada0
ada1p1      OK  ada1
ada1p2      OK  ada1
 da1p1      OK  da1
 da1p2      OK  da1

Как лучше всего поступить? Я совершенно не уверен, что я должен контролировать через gpart, а что лучше оставить zfs и его магии.


person patmin    schedule 30.03.2017    source источник


Ответы (2)


Если у вас все еще есть старая палка, вы можете использовать ее. Ошибки контрольной суммы, особенно при малых значениях, таких как 3 в вашем случае, не о чем беспокоиться. Они могут быть результатом ненадежного кабельного соединения или принудительного отключения устройства, внезапной потери питания или повторного подключения (особенно с USB, который был разработан для частого отключения вместо идеальной стабильности).

Итак, если вы только что столкнулись с этими ошибками один раз (и без ошибок записи или чтения) и все еще имеете работоспособное зеркало, я бы лично продолжил использовать старое устройство, которое уже правильно настроено для загрузки. Вы можете заменить устройство на себя, дважды указав его имя: zpool replace poolname device device, или просто сбросить ошибки с помощью zpool clear poolname. Если это не повторится, я бы не стал выбрасывать работающее устройство.

person user121391    schedule 03.04.2017

Тем временем я выяснил, как использовать gpart для создания раздела для загрузочного кода и другого для данных перед добавлением последнего в пул (при условии, что новое устройство /dev/da2):

sudo gpart show da2
sudo gpart delete -i 1 da2
sudo gpart destroy da2
sudo gpart create -s gpt da2
sudo gpart add -s 512K -t bios-boot da2
sudo gpart add -s 15G -t freebsd-zfs da2
sudo gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da2
sudo zpool attach freenas-boot da1p2 da2p2

Однако в процессе мне удалось столкнуться с новой проблемой: восстановление неправильно настроенного зеркального пула zfs

person patmin    schedule 04.04.2017