У меня 3-дисковый массив RAIDZ1 с 3 жесткими дисками:
# zpool status
...
config:
NAME STATE READ WRITE CKSUM
gpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdd ONLINE 0 0 0
sda ONLINE 0 0 0
(когда я создал пул, я использовал /dev/disk/by-id
пути, но они отображаются как /dev/sdx
).
Я хотел поменять все 3 жестких диска на твердотельные, но делаю это постепенно. Поскольку у меня есть 6 разъемов SATA и дополнительный кабель, я сначала подключил новый SSD и настроил его, используя заменяемый диск в качестве источника:
# sgdisk --replicate=/dev/disk/by-id/newSSD1 /dev/disk/by-id/oldHDD1
The operation has completed successfully.
# sgdisk --randomize-guids /dev/disk/by-id/newSSD1
The operation has completed successfully.
# grub-install /dev/disk/by-id/newSSD1
Installing for i386-pc platform.
Installation finished. No error reported.
затем fdisk -l /dev/disk/by-id/newSSD1
показал мне, что разделы были такими же, как у 3 жестких дисков, то есть:
Disk /dev/disk/by-id/newSSD1: 931.53 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: CT1000MX500SSD1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: EF97564D-490F-4A76-B0F0-4E8C7CAFFBD2
Device Start End Sectors Size Type
/dev/disk/by-id/newSSD1-part1 2048 1953507327 1953505280 931.5G Solaris /usr & Apple ZFS
/dev/disk/by-id/newSSD1-part2 48 2047 2000 1000K BIOS boot
/dev/disk/by-id/newSSD1-part9 1953507328 1953523711 16384 8M Solaris reserved 1
Partition table entries are not in disk order.
Затем я заменил диск:
# zpool offline gpool /dev/sdb
# zpool status
pool: gpool
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: scrub repaired 0B in 0 days 00:30:46 with 0 errors on Sat Jun 27 12:29:56 2020
config:
NAME STATE READ WRITE CKSUM
gpool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
sdb OFFLINE 0 0 0
sdd ONLINE 0 0 0
sda ONLINE 0 0 0
errors: No known data errors
# zpool replace gpool /dev/sdb /dev/disk/by-id/newSSD1
Make sure to wait until resilver is done before rebooting.
# zpool status
pool: gpool
state: DEGRADED
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 Thu Jul 16 20:00:58 2020
427G scanned at 6.67G/s, 792M issued at 12.4M/s, 574G total
0B resilvered, 0.13% done, 0 days 13:10:03 to go
config:
NAME STATE READ WRITE CKSUM
gpool DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
replacing-0 DEGRADED 0 0 0
sdb OFFLINE 0 0 0
ata-newSSD1 ONLINE 0 0 0
sdd ONLINE 0 0 0
sda ONLINE 0 0 0
errors: No known data errors
В конце концов он восстановился.
# zpool status
pool: gpool
state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
the pool may no longer be accessible by software that does not support
the features. See zpool-features(5) for details.
scan: resilvered 192G in 0 days 00:27:48 with 0 errors on Thu Jul 16 20:28:46 2020
config:
NAME STATE READ WRITE CKSUM
gpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ata-SSD1 ONLINE 0 0 0
sdd ONLINE 0 0 0
sda ONLINE 0 0 0
errors: No known data errors
на этот раз с by-id
этикетки. Поскольку я реплицировал разделы и установил GRUB на новый SSD, я не ожидал никаких проблем.
Однако, когда я загрузился, GRUB бросил меня в grub rescue>
подсказка, потому что grub_file_filters not found
. Я попытался загрузиться с двух других жестких дисков и SSD, каждый раз одна и та же ошибка. Вставил 3-й жесткий диск обратно, результат тот же.
Сегодня загрузился с SSD .. заработало. Zpool как и ожидалось, ошибок grub нет. Я пишу это по этой системе.
ls
в приглашении восстановления действительно показывает кучу разделов, как и ожидалось, но я смог заставить GRUB показывать значимую информацию только после того, как я insmod zfs
(или похожие). Однако пытаясь ls
что-то вроде (hd0,gpt1)/ROOT/gentoo@/boot
приводит к compression algorithm 73 not supported
(или 80 тоже).
Я использую ядро 5.4.28 с сопровождающими initramfs, и root=ZFS
параметры для GRUB. У меня не было инцидентов, связанных с загрузкой ZFS-root, пока я не решил поменять диск. Мой /etc/default/grub
есть записи для поиска корня ZFS,
GRUB_CMDLINE_LINUX_DEFAULT="dozfs spl.spl_hostid=0xa8c06101 real_root=ZFS=gpool/ROOT/gentoo"
и это так. Я бы хотел продолжить замену других дисков, но я бы предпочел сначала узнать, что произошло и как этого избежать.
Редактировать 1
Я кое-что заметил. После запуска sgdisk --replicate
я получаю 3 раздела, такие же, как на исходных дисках:
# fdisk -l ${NEWDISK2}
Disk /dev/disk/by-id/ata-CT1000MX500SSD1_NEWDISK2: 931.53 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: CT1000MX500SSD1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 2190C74D-46C8-44AC-81FB-36C3B72A7EA7
Device Start End Sectors Size Type
/dev/disk/by-id/ata-CT1000MX500SSD1_NEWDISK2-part1 2048 1953507327 1953505280 931.5G Solaris /usr & Apple ZFS
/dev/disk/by-id/ata-CT1000MX500SSD1_NEWDISK2-part2 48 2047 2000 1000K BIOS boot
/dev/disk/by-id/ata-CT1000MX500SSD1_NEWDISK2-part9 1953507328 1953523711 16384 8M Solaris reserved 1
Partition table entries are not in disk order.
... но после бега zpool replace
я теряю один раздел:
# fdisk -l ${NEWDISK}
Disk /dev/disk/by-id/ata-CT1000MX500SSD1_NEWDISK2: 931.53 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: CT1000MX500SSD1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 0FC0A6C0-F9F1-E341-B7BD-99D7B370D685
Device Start End Sectors Size Type
/dev/disk/by-id/ata-CT1000MX500SSD1_NEWDISK2-part1 2048 1953507327 1953505280 931.5G Solaris /usr & Apple ZFS
/dev/disk/by-id/ata-CT1000MX500SSD1_NEWDISK2-part9 1953507328 1953523711 16384 8M Solaris reserved 1
... загрузочный раздел. Это странно, учитывая, что мне удалось загрузиться с нового SSD.
Я продолжу эксперимент. А что касается версий ZFS:
# zpool version
zfs-0.8.4-r1-gentoo
zfs-kmod-0.8.3-r0-gentoo
Редактировать 2
Это последовательно. Когда я реплицирую с sgdisk --replicate
я получаю 3 раздела в качестве оригинала, включая загрузочный раздел BIOS. После запуска zpool replace
и при переносе я теряю загрузочный раздел.
Я предполагаю, что система все еще загружается, потому что данные этого раздела все еще находятся в MBR, поэтому BIOS может запустить GRUB.
Это текущий статус:
# zpool status
pool: gpool
state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
the pool may no longer be accessible by software that does not support
the features. See zpool-features(5) for details.
scan: resilvered 192G in 0 days 00:08:04 with 0 errors on Fri Jul 17 21:04:54 2020
config:
NAME STATE READ WRITE CKSUM
gpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ata-CT1000MX500SSD1_NEWSSD1 ONLINE 0 0 0
ata-CT1000MX500SSD1_NEWSSD2 ONLINE 0 0 0
ata-CT1000MX500SSD1_NEWSSD3 ONLINE 0 0 0
errors: No known data errors