Чтобы проверить, какое влияние окажет добавление устройства журнала ZFS на массив ZFS, я решил создать zpool и выполнить несколько тестов, прежде чем подключать SSD в качестве ZIL.
К сожалению, всякий раз, когда я подключаю SSD после создания zpool или отключаю SSD после создания пула (все, что приводит к изменению букв дисков после создания пула), а затем перезагружаюсь, мой пул ухудшается, что можно увидеть, запустив:sudo zpool status
pool: zpool1
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zpool1 DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
sda ONLINE 0 0 0
1875547483567261808 UNAVAIL 0 0 0 was /dev/sdc1
Я подозреваю, что проблема возникла из-за того, что я создал пул, используя такие буквы дисков:
sudo zpool create -f zpool1 mirror /dev/sdb /dev/sdc
Вопросы
К счастью для меня, это всего лишь тест и нет риска потери данных, но если это произойдет в реальном сценарии, каков наилучший способ устранения этой проблемы? Очевидно, что диск все еще существует и готов к работе.
Есть ли лучший способ создать zpool без использования букв дисков, /dev/sda
чтобы избежать этой проблемы в будущем? Я заметил, чтов документации Ubuntu говоритсясоздать zpool таким же образом, как это сделал я.
Дополнительная информация
- ОС: Ubuntu 16.04 Сервер 4.10
- Установил zfs из установочного
zfsutils-linux
пакета
решение1
Получив помощь от Dexter_Kane наФорум технических специалистов уровня 1, ответ — использовать /dev/disk/by-id/...
пути при создании пулов.
Например
sudo zpool create zpool1 mirror \
/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N0PKS6S7 \
/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7VXZF6H
Преобразование и ремонт существующих бассейнов
Хорошей новостью является то, что вы можете «преобразовать» существующий массив ZFS RAID для использования этих меток, что предотвратит возникновение подобной ситуации в будущем и даже устранит деградацию массива, если такая ситуация уже произошла с вами.
sudo zpool export [pool name]
sudo zpool import -d /dev/disk/by-id [pool name]
Вам просто нужно убедиться, что наборы данных пулов не используются. Например, не выполняйте команды, находясь внутри пула, и убедитесь, что они не используются совместно через NFS и т. д.
После выполнения преобразования вывод sudo zpool status
должен быть похож на:
pool: zpool1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zpool1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N0PKS6S7 ONLINE 0 0 0
ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7VXZF6H ONLINE 0 0 0
Тестирование выполнено
Я обязательно проверил это:
- Использование путей by-id предотвратило возникновение проблемы.
- После записи некоторых данных, когда пул находился в неисправном состоянии, я все равно смог прочитать все файлы после выполнения экспорта/импорта и
sudo zpool status
не сообщил об ошибках.