
Недавно я перенес пул хранения больших объемов данных (ZFS на Linux 0.6.2, Debian Wheezy) из конфигурации vdev с одним устройством в конфигурацию vdev с двусторонним зеркалированием.
Предыдущая конфигурация пула была следующей:
NAME STATE READ WRITE CKSUM
akita ONLINE 0 0 0
ST4000NM0033-Z1Z1A0LQ ONLINE 0 0 0
После завершения восстановления все было в порядке (я запустил очистку после завершения восстановления, просто чтобы система еще раз все проверила и убедилась, что все в порядке):
pool: akita
state: ONLINE
scan: scrub repaired 0 in 6h26m with 0 errors on Sat May 17 06:16:06 2014
config:
NAME STATE READ WRITE CKSUM
akita ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ST4000NM0033-Z1Z1A0LQ ONLINE 0 0 0
ST4000NM0033-Z1Z333ZA ONLINE 0 0 0
errors: No known data errors
Однако после перезагрузки я получил письмо, уведомляющее меня о том, что бассейн не в порядке и не денди. Я взглянул и вот что я увидел:
pool: akita
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: scrub in progress since Sat May 17 14:20:15 2014
316G scanned out of 1,80T at 77,5M/s, 5h36m to go
0 repaired, 17,17% done
config:
NAME STATE READ WRITE CKSUM
akita DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
ST4000NM0033-Z1Z1A0LQ ONLINE 0 0 0
ST4000NM0033-Z1Z333ZA UNAVAIL 0 0 0
errors: No known data errors
Ожидается очистка; есть задание cron, которое запускает полную очистку системы при перезагрузке. Однако я определенно не ожидал, что новый HDD выпадет из зеркала.
Я определяю псевдонимы, которые сопоставляются с именами /dev/disk/by-id/wwn-*, и в случае обоих этих дисков предоставляю ZFS полную свободу действий для использования всего диска, включая обработку разделов:
# zpool history akita | grep ST4000NM0033
2013-09-12.18:03:06 zpool create -f -o ashift=12 -o autoreplace=off -m none akita ST4000NM0033-Z1Z1A0LQ
2014-05-15.15:30:59 zpool attach -o ashift=12 -f akita ST4000NM0033-Z1Z1A0LQ ST4000NM0033-Z1Z333ZA
#
Вот соответствующие строки из /etc/zfs/vdev_id.conf (теперь я заметил, что Z1Z333ZA использует символ табуляции для разделения, тогда как строка Z1Z1A0LQ использует только пробелы, но, честно говоря, не понимаю, как это может быть здесь уместно):
alias ST4000NM0033-Z1Z1A0LQ /dev/disk/by-id/wwn-0x5000c500645b0fec
alias ST4000NM0033-Z1Z333ZA /dev/disk/by-id/wwn-0x5000c50065e8414a
Когда я посмотрел, /dev/disk/by-id/wwn-0x5000c50065e8414a*
они были там, как и ожидалось, но /dev/disk/by-vdev/ST4000NM0033-Z1Z333ZA*
их не было.
Выдача sudo udevadm trigger
привела к появлению символических ссылок в /dev/disk/by-vdev. Однако ZFS, похоже, просто не понимает, что они там есть (Z1Z333ZA все еще отображается как UNAVAIL
). Я полагаю, этого можно было ожидать.
Я попытался заменить соответствующее устройство, но безуспешно:
# zpool replace akita ST4000NM0033-Z1Z333ZA
invalid vdev specification
use '-f' to override the following errors:
/dev/disk/by-vdev/ST4000NM0033-Z1Z333ZA-part1 is part of active pool 'akita'
#
Оба диска обнаружены во время процесса загрузки (выход журнала dmesg, показывающий соответствующие диски):
[ 2.936065] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 2.936137] ata4: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 2.937446] ata4.00: ATA-9: ST4000NM0033-9ZM170, SN03, max UDMA/133
[ 2.937453] ata4.00: 7814037168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
[ 2.938516] ata4.00: configured for UDMA/133
[ 2.992080] ata6: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[ 3.104533] ata6.00: ATA-9: ST4000NM0033-9ZM170, SN03, max UDMA/133
[ 3.104540] ata6.00: 7814037168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
[ 3.105584] ata6.00: configured for UDMA/133
[ 3.105792] scsi 5:0:0:0: Direct-Access ATA ST4000NM0033-9ZM SN03 PQ: 0 ANSI: 5
[ 3.121245] sd 3:0:0:0: [sdb] 7814037168 512-byte logical blocks: (4.00 TB/3.63 TiB)
[ 3.121372] sd 3:0:0:0: [sdb] Write Protect is off
[ 3.121379] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 3.121426] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 3.122070] sd 5:0:0:0: [sdc] 7814037168 512-byte logical blocks: (4.00 TB/3.63 TiB)
[ 3.122176] sd 5:0:0:0: [sdc] Write Protect is off
[ 3.122183] sd 5:0:0:0: [sdc] Mode Sense: 00 3a 00 00
[ 3.122235] sd 5:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Оба привода подключены напрямую к материнской плате; внешний контроллер не задействован.
Поддавшись импульсу, я сделал:
# zpool online akita ST4000NM0033-Z1Z333ZA
что, похоже, сработало; Z1Z333ZA теперь, по крайней мере, ONLINE
и переиздает. Примерно через час после переиздания он просканировал 180G и переиздал 24G с выполнением 9,77%, что указывает на то, что он не выполняет полный переиздания, а только передает дельту набора данных.
Честно говоря, я не уверен, связана ли эта проблема с ZFS On Linux или с udev (немного похоже на udev, но тогда почему один диск определяется нормально, а другой нет), но у меня вопрос:как сделать так, чтобы то же самое не повторилось при следующей перезагрузке?
При необходимости я с радостью предоставлю вам дополнительные данные по настройке; просто дайте мне знать, что именно вам нужно.
решение1
Это проблема udev, которая, кажется,специфично для вариантов Debian и Ubuntu. Большая часть моей работы с ZFS на Linux связана с CentOS/RHEL.
Похожие темы в списке обсуждений ZFS уже упоминались.
Видеть:
записи scsi и ata для одного и того же жесткого диска в /dev/disk/by-id
и
ZFS на Linux/Ubuntu: помогите импортировать zpool после обновления Ubuntu с 13.04 до 13.10, идентификаторы устройств изменились
Я не уверен, какой подход к устройству пула является наиболее детерминированным для систем Debian/Ubuntu. Для RHEL я предпочитаю использовать WWN-имена устройств на общих устройствах пула. Но в других случаях имя устройства/серийный номер тоже полезны. Но udevдолжениметь возможность держать все это под контролем.
# zpool status
pool: vol1
state: ONLINE
scan: scrub repaired 0 in 0h32m with 0 errors on Sun Feb 16 17:34:42 2014
config:
NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
wwn-0x500000e014609480 ONLINE 0 0 0
wwn-0x500000e0146097d0 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
wwn-0x500000e0146090c0 ONLINE 0 0 0
wwn-0x500000e01460fd60 ONLINE 0 0 0