คำสั่งที่จำเป็นเมื่อใช้ zfs (import pool เมื่อ log device fail)

By | 23/02/2021
Spread the love

วันนี้ได้มีโอกาศทดสอบทำ zfs zpool mirror+cache+log ทดสอบถอด disk cache กับ log ออก พบว่า pool fail จะกู้ข้อมูลยังไง?

ลองสั่ง

zpool import pool-name -f

ผลที่ได้ มีเสียวเลยครับ!!!

cannot import 'data_pool': no such pool available

ลองดู pool db หรือ signature disk (ถ้าสร้าง pool แบบเลือกเป็น disk จะอยู่ใน partition 1)

zdb -l /dev/sdb1

ผลที่ได้

------------------------------------
LABEL 0
------------------------------------
    version: 5000
    name: 'raid1-cache'
    state: 0
    txg: 319
    pool_guid: 17176831795566606353
    errata: 0
    hostid: 2877909868
    hostname: 'node1'
    top_guid: 1620325715334265316
    guid: 17195744663847841469
    vdev_children: 2
    vdev_tree:
        type: 'mirror'
        id: 0
        guid: 1620325715334265316
        metaslab_array: 65
        metaslab_shift: 33
        ashift: 12
        asize: 1000189984768
        is_log: 0
        create_txg: 4
        children[0]:
            type: 'disk'
            id: 0
            guid: 17195744663847841469
            path: '/dev/disk/by-id/ata-ST1000DM003-1CH162_S1DHZWFC-part1'
            devid: 'ata-ST1000DM003-1CH162_S1DHZWFC-part1'
            phys_path: 'pci-0000:00:1f.2-ata-6'
            whole_disk: 1
            create_txg: 4
        children[1]:
            type: 'disk'
            id: 1
            guid: 4322749718336279230
            path: '/dev/disk/by-id/ata-WDC_WD1002FBYS-18A6B0_WD-WMATV1021622-part1'
            devid: 'ata-WDC_WD1002FBYS-18A6B0_WD-WMATV1021622-part1'
            phys_path: 'pci-0000:00:1f.2-ata-4'
            whole_disk: 1
            create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
    labels = 0 1 2 3 

OK เจอข้อมูล signature กรณีนี้ disk ไม่ได้เสียนะครับ

มาลอง import กันเลยครับ สั่งตามนี้

zpool import -f -F -m poolname

พบว่า import ได้เลยไม่สนใจพวก log และ cache device ไม่ขออธิบายพวก option ให้ไปหาอ่านเองนะครับ

  pool: raid1-cache
 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
        raid1-cache                                    DEGRADED     0     0     0
          mirror-0                                     ONLINE       0     0     0
            ata-ST1000DM003-1CH162_S1DHZWFC            ONLINE       0     0     0
            ata-WDC_WD1002FBYS-18A6B0_WD-WMATV1021622  ONLINE       0     0     0
        logs
          2856806483326932070                          UNAVAIL      0     0     0  was /dev/disk/by-id/ata-INTEL_SSDSC2CW060A3_CVCV153305QV060AGN-part1

errors: No known data errors

เพิ่มเติมให้อีกนิด หลังจากเรา import ได้แล้ว zfs จะยังไม่ mount ให้นะครับเพราะ zfs มองเห็น dir เดิมที่ยังมีข้อมูลบางอย่างอยู่ ถ้าบังคับ mount ข้อมูลที่อยู่ใน dir นั้นจะหายไปเลย ต้องระวัง

สั่งตามนี้

zfs mount -O -a

จะพบว่าทั้ง sub volume และข้อมูลกลับมาพร้อมใช้งานแล้วครับ

NAME                            USED  AVAIL     REFER  MOUNTPOINT
raid1-cache                     463M   899G      120K  /raid1-cache
raid1-cache/subvol-101-disk-0   462M  7.55G      462M  /raid1-cache/subvol-101-disk-0

Link ที่เกี่ยวข้อง
https://www.truenas.com/community/threads/import-zfs-pool-with-missing-log-device-missing-device.82200/
https://forum.proxmox.com/threads/mount-zfs-when-directory-not-empty.29657/

ใส่ความเห็น