Замена члена пула zfs после перезагрузки изменила порядок путей к дискам

Я создал пул raidz1 -0 с тремя устройствами. Два из них были добавлены по их идентификатору /dev/disk/by-id, и каким-то образом я решил использовать /dev/sdg1для третьего.

Несколько лет спустя после перезагрузки я не могу снова подключить все три устройства к сети. Вот текущий статус:

# zpool status safe00
  pool: safe00
 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 0 in 2h54m with 0 errors on Sun Jan 12 03:18:13 2020
config:

    NAME                                          STATE     READ WRITE CKSUM
    safe00                                        DEGRADED     0     0     0
      raidz1-0                                    DEGRADED     0     0     0
        ata-ST3500418AS_9VM89VGD                  ONLINE       0     0     0
        13759036004139463181                      OFFLINE      0     0     0  was /dev/sdg1
        ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E1NYTHJF  ONLINE       0     0     0

errors: No known data errors

Диски на этой машине — :

# lsblk -f 
NAME   FSTYPE     LABEL      UUID                                 MOUNTPOINT
sda                                                               
├─sda1 ext4       Ubuntu LTS 8a2a3c19-580a-474d-b248-bf0822cacab6 /
├─sda2 vfat                  B55A-693E                            /boot/efi
└─sda3 swap       swap       7d1cf001-07a6-4534-9624-054d70a562d5 [SWAP]
sdb    zfs_member dump       11482263899067190471                 
├─sdb1 zfs_member dump       866164895581740988                   
└─sdb9 zfs_member dump       11482263899067190471                 
sdc                                                               
sdd                                                               
├─sdd1 zfs_member dump       866164895581740988                   
└─sdd9                                                            
sde    zfs_member dump       866164895581740988                   
├─sde1 zfs_member safe00     6143939454380723991                  
└─sde2 zfs_member dump       866164895581740988                   
sdf                                                               
├─sdf1 zfs_member dump       866164895581740988                   
└─sdf9                                                            
sdg                                                               
├─sdg1 zfs_member safe00     6143939454380723991                  
└─sdg9                                                            
sdh                                                               
├─sdh1 zfs_member safe00     6143939454380723991                  
└─sdh9   

, то есть safe00должны содержать три устройства :sde1, sdgи sdh.

И просто получить сопоставление с by-idиpath:

# cd /dev/disk/by-id
# ls -la ata* | cut -b 40- | awk '{split($0, a, " "); print a[3],a[2],a[1]}' | sort -h
../../sda1 -> ata-INTEL_SSDSC2KW120H6_BTLT712507HK120GGN-part1
../../sda2 -> ata-INTEL_SSDSC2KW120H6_BTLT712507HK120GGN-part2
../../sda3 -> ata-INTEL_SSDSC2KW120H6_BTLT712507HK120GGN-part3
../../sda -> ata-INTEL_SSDSC2KW120H6_BTLT712507HK120GGN
../../sdb1 -> ata-WDC_WD20EARX-00PASB0_WD-WCAZAE573068-part1
../../sdb9 -> ata-WDC_WD20EARX-00PASB0_WD-WCAZAE573068-part9
../../sdb -> ata-WDC_WD20EARX-00PASB0_WD-WCAZAE573068
../../sdc -> ata-SAMSUNG_HD204UI_S2H7JD1ZA21911
../../sdd1 -> ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0416553-part1
../../sdd9 -> ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0416553-part9
../../sdd -> ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0416553
../../sde1 -> ata-ST6000VN0033-2EE110_ZAD5S9M9-part1
../../sde2 -> ata-ST6000VN0033-2EE110_ZAD5S9M9-part2
../../sde -> ata-ST6000VN0033-2EE110_ZAD5S9M9
../../sdf1 -> ata-WDC_WD10EADS-00L5B1_WD-WCAU4C151323-part1
../../sdf9 -> ata-WDC_WD10EADS-00L5B1_WD-WCAU4C151323-part9
../../sdf -> ata-WDC_WD10EADS-00L5B1_WD-WCAU4C151323
../../sdg1 -> ata-ST3500418AS_9VM89VGD-part1
../../sdg9 -> ata-ST3500418AS_9VM89VGD-part9
../../sdg -> ata-ST3500418AS_9VM89VGD
../../sdh1 -> ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E1NYTHJF-part1
../../sdh9 -> ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E1NYTHJF-part9
../../sdh -> ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E1NYTHJF

И zdb (с небольшими АННОТАЦИЯМИ от меня)

# zdb -C safe00

MOS Configuration:
        version: 5000
        name: 'safe00'
        state: 0
        txg: 22826770
        pool_guid: 6143939454380723991
        errata: 0
        hostname: 'filserver'
        vdev_children: 1
        vdev_tree:
            type: 'root'
            id: 0
            guid: 6143939454380723991
            children[0]:
                type: 'raidz'
                id: 0
                guid: 9801294574244764778
                nparity: 1
                metaslab_array: 33
                metaslab_shift: 33
                ashift: 12
                asize: 1500281044992
                is_log: 0
                create_txg: 4
                children[0]:
                    type: 'disk'
                    id: 0
                    guid: 135921832921042063
                    path: '/dev/disk/by-id/ata-ST3500418AS_9VM89VGD-part1'
                    whole_disk: 1
                    DTL: 58
                    create_txg: 4
                children[1]:         ### THIS CHILD USED TO BE sdg1
                    type: 'disk'
                    id: 1
                    guid: 13759036004139463181
                    path: '/dev/sdg1'
                    whole_disk: 0
                    not_present: 1   ### THIS IS sde1 NOW
                    DTL: 52
                    create_txg: 4
                    offline: 1
                children[2]:         ### THIS CHILD IS NOW sdg1
                    type: 'disk'
                    id: 2
                    guid: 2522190573401341943
                    path: '/dev/disk/by-id/ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E1NYTHJF-part1'
                    whole_disk: 1
                    DTL: 57
                    create_txg: 4
        features_for_read:
            com.delphix:hole_birth
            com.delphix:embedded_data
space map refcount mismatch: expected 178 != actual 177

Резюме для пулаsafe00:

offline: sde1 --> ata-ST6000VN0033-2EE110_ZAD5S9M9-part1  <-- this likely was sdg1 before reboot
online:  sdg1 --> ata-ST3500418AS_9VM89VGD
online:  sdh1 --> ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E1NYTHJF

Попытка подключить к сети устройство, которое находится в автономном режиме:

# zpool online safe00 ata-ST6000VN0033-2EE110_ZAD5S9M9-part1
cannot online ata-ST6000VN0033-2EE110_ZAD5S9M9-part1: no such device in pool
# zpool online safe00 /dev/sde1
cannot online /dev/sde1: no such device in pool

Я также пытался заменить автономное устройство на реальное:

# zpool replace safe00 13759036004139463181 ata-ST6000VN0033-2EE110_ZAD5S9M9-part1
invalid vdev specification
use '-f' to override the following errors:
/dev/disk/by-id/ata-ST6000VN0033-2EE110_ZAD5S9M9-part1 is part of active pool 'safe00'
# zpool replace safe00 /dev/sdg1 ata-ST6000VN0033-2EE110_ZAD5S9M9-part1
invalid vdev specification
use '-f' to override the following errors:
/dev/disk/by-id/ata-ST6000VN0033-2EE110_ZAD5S9M9-part1 is part of active pool 'safe00'

Итак, наконец, я попытался подключить отсутствующее устройство к сети, используя его идентификатор:

# zpool online safe00 13759036004139463181
warning: device '13759036004139463181' onlined, but remains in faulted state
use 'zpool replace' to replace devices that are no longer present

Это привело к тому, что диск оказался НЕИСПРАВНЫМ, и был начат ремонт.

# zpool status safe00
  pool: safe00
 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 Sun Feb 23 11:19:00 2020
    14.3G scanned out of 1.09T at 104M/s, 3h0m to go
    0 repaired, 1.29% done
config:

    NAME                                          STATE     READ WRITE CKSUM
    safe00                                        DEGRADED     0     0     0
      raidz1-0                                    DEGRADED     0     0     0
        ata-ST3500418AS_9VM89VGD                  ONLINE       0     0     0
        13759036004139463181                      FAULTED      0     0     0  was /dev/sdg1
        ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E1NYTHJF  ONLINE       0     0     0

errors: No known data errors

Что мне делать, чтобы этого больше не повторилось? -Как изменить свойство «путь» устройства в zdb, чтобы оно не зависело от нумерации дисков в Linux при загрузке?

1
задан 23 February 2020 в 23:39
1 ответ

Наиболее надежным методом может быть создание пулов с использованием GUID или меток GPT, и лично я считаю, что метка GPT является лучшим решением, как упоминалось в одном из сообщений в Передовая практика для указания дисков (vdevs )для пулов ZFS в 2021 году

data-1-sces3-3tb-Z1Y0P0DK

<pool>-<pool-id>-<disk-vendor-and-model-name>-<size-of-disk>-<disk-serial-number>

Такое именование поможет вам с этими:

  1. Легко понять топологию определенных пулов.
  2. Легко найти название производителя и название модели используемых дисков.
  3. Простой поиск дисковой емкости.
  4. Легко идентифицируйте и находите неисправный диск (s )в корзине для дисков (s ), в то время как вы включаете серийный номер, напечатанный на диске, внутри этикетки GPT.

Существуют и другие постоянные методы идентификации дисков, такие как использование идентификаторов, но сам по себе он недостаточно интуитивен, вы не можете легко найти свой диск, просто основываясь на его электрическом идентификаторе, вы должны связать идентификатор к его физическому местонахождению самостоятельно.

И я также обнаружил, что это может помочь, если вы хотите переназначить диски в пуле Смешанные имена gptid и dev в статусе zpool:

# zpool import -d /dev/gptid tank
2
ответ дан 5 November 2021 в 20:02

Теги

Похожие вопросы