Thay thế một đĩa chết trong một zpool


31

Tôi đang chạy Ubuntu Server 13.04 64-bit bằng ZFS gốc. Tôi có một zpool bao gồm 4 ổ cứng trong đó một ổ đã chết ngày hôm qua và hiện không được hệ điều hành hoặc BIOS nhận ra nữa.

Thật không may, tôi chỉ gặp vấn đề sau lần khởi động lại tiếp theo nên bây giờ nhãn ổ đĩa bị thiếu và tôi không thể thay thế đĩa bằng hướng dẫn chính thức tại đâyđây .

zpool status hermes -x

in

root@zeus:~# zpool status hermes -x
  pool: hermes
 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 repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  UNAVAIL      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

Tôi đã thay thế ổ đĩa bằng một cái mới (có nhãn /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ)

Bất kỳ một trong các lệnh

zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X

thất bại với

root@zeus:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool

bởi vì nhãn của ổ đĩa đã chết không còn tồn tại trong hệ thống nữa. Tôi cũng đã thử các lệnh trên bỏ qua đường dẫn đến nhãn của ổ đĩa nhưng không có kết quả.

Làm thế nào tôi có thể thay thế đĩa "ma"?

Câu trả lời:


38

Sau khi đào không ngừng đêm nay cuối cùng tôi cũng tìm được giải pháp. Câu trả lời ngắn gọn là bạn có thể sử dụng GUID của đĩa (vẫn tồn tại ngay cả sau khi ngắt kết nối ổ đĩa) với zpoollệnh.

Câu trả lời dài: Tôi đã nhận được GUID của đĩa bằng cách sử dụng zdblệnh cho tôi đầu ra sau

root@zeus:/dev# zdb
hermes:
    version: 28
    name: 'hermes'
    state: 0
    txg: 162804
    pool_guid: 14829240649900366534
    hostname: 'zeus'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 14829240649900366534
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5355850150368902284
            nparity: 1
            metaslab_array: 31
            metaslab_shift: 32
            ashift: 9
            asize: 791588896768
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 11426107064765252810
                path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
                phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 15935140517898495532
                path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
                phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 7183706725091321492
                path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
                phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17196042497722925662
                path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
                phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
    features_for_read:

GUID mà tôi đang tìm kiếm cho 15935140517898495532phép tôi làm

root@zeus:/dev# zpool offline hermes 15935140517898495532
root@zeus:/dev# zpool status
  pool: hermes
 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 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  OFFLINE      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

và sau đó

root@zeus:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
root@zeus:/dev# zpool status
  pool: hermes
 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 Sun Jun  9 01:44:36 2013
    408M scanned out of 419G at 20,4M/s, 5h50m to go
    101M resilvered, 0,10% done
config:

        NAME                            STATE     READ WRITE CKSUM
        hermes                          DEGRADED     0     0     0
          raidz1-0                      DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP     ONLINE       0     0     0
            replacing-1                 OFFLINE      0     0     0
              ata-ST3300831A_5NF0552X   OFFLINE      0     0     0
              ata-ST3500320AS_9QM03ATQ  ONLINE       0     0     0  (resilvering)
            ata-ST3200822A_5LJ1CHMS     ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C     ONLINE       0     0     0

errors: No known data errors

Sau khi phục hồi đã hoàn thành mọi thứ hoạt động tốt trở lại. Nó sẽ có được tốt đẹp để đưa thông tin này, mà bạn có thể sử dụng GUID của một đĩa thu được thông qua zdbvới các zpoollệnh, với manpage của zpool.

Chỉnh sửa

Như được chỉ ra bởi durval bên dưới zdblệnh có thể không xuất ra bất cứ điều gì. Sau đó, bạn có thể thử sử dụng

zdb -l /dev/<name-of-device>

để liệt kê rõ ràng thông tin về thiết bị (ngay cả khi thiết bị đã bị thiếu trong hệ thống).


Thật tuyệt, sau đó trước khi chạy thêm bằng cách sử dụng -ncông tắc, nhưng công -gtắc cũng sẽ lấy uuid theo cách đó.
Brian Thomas

Cảm ơn điều này khá hữu ích khi chọc vào web Tôi không thể tìm thấy thông tin về việc lấy nội dung từ zdb.
xamox

Tôi đã tìm kiếm trong nhiều tuần và cuối cùng câu trả lời này đã thực hiện được mẹo. Nhưng ID được liệt kê bởi zpool status(tên như sdab) KHÔNG giống với đường dẫn trong /dev/disk/by-id(tên ID dài điên rồ). Nhưng ls -la /dev/disk/by-idtiết lộ rằng tất cả chúng đều liên kết đến /dev/...nên tôi đã tìm thấy một cái trỏ đến đĩa UNAVAIL (và sau đó là OFFLINE) và tôi đã có thể hoàn thành các bước này thành công. Bây giờ nó đang phục hồi. Cảm ơn bạn!
Matt

Một cách khác ngắn hơn để có được GUID là zpool status -ghiển thị trạng thái bằng GUID cho mỗi thiết bị. Ngoài ra, đối với @Matt, zpool status -Lsẽ hiển thị trạng thái bằng tên thiết bị cơ bản thay vì /dev/disk/by-idtên dài .
StarNamer 17/03/18

Bạn là một MVP thực sự trở lại với giải pháp của bạn. Điều này làm việc cho tôi.
ngoại khóa

3

Vấn đề là các đĩa được tham chiếu bởi id chứ không phải bởi thiết bị.

Đây là một cách giải quyết nên làm việc:

ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

Chỉnh sửa: Tôi đã trễ 30 giây ...


Cảm ơn. Tôi đã cố gắng tạo một liên kết trống đến ổ đĩa bị mất nhưng nó cứ nói no such device in pool.
Marcus

Đề nghị của tôi gần giống với những gì bạn đã làm. Sự khác biệt duy nhất là cách để có được hướng dẫn thiết bị. Sau khi tạo liên kết tượng trưng đến / dev / null (khác với liên kết trống) và xuất / nhập nhóm, nó sẽ xuất hiện trongzpool status
jlliagre

Sử dụng phương pháp này tôi thực sự đã xoay sở để đưa ổ "khiếm khuyết" trở lại trực tuyến mà không cần thay thế (vì vậy tôi đã bỏ qua offlinereplacethực hiện các bước). Tôi đã nhập nhóm lần thứ hai sau khi xóa liên kết null. Có lẽ nó chỉ là một vấn đề với nhãn ổ đĩa? Trong thực tế, tên ổ đĩa vẫn giữ nguyên. Tôi đã thực hiện một chà hoàn toàn sau đó và không có lỗi được tìm thấy.
Serrano

2

@Marcus: Cảm ơn bạn đã đăng câu trả lời tuyệt vời này cho câu hỏi của riêng bạn, nó đã giúp tôi rất nhiều.

Vào một ngày khác, tôi đã tìm thấy một vòng xoắn có thể khiến bạn quan tâm (và bất kỳ ai khác đến đây trong tương lai): Tôi có một thiết bị bộ nhớ cache bị rơi khỏi nhóm (và được đánh dấu là "UNAVAIL") do lỗi tương tự (ZFS-8000-4J, "nhãn bị thiếu hoặc không hợp lệ") và cố gắng ngoại tuyến / xóa / thay thế nó không thành công với chính xác thông báo "không có thiết bị như vậy trong nhóm".

NHƯNG, khi tôi cố gắng áp dụng giải pháp của bạn, "zdb" đơn giản (không có đối số) đã không liệt kê thiết bị, ít hơn nhiều so với GUID của nó.

Sau khi đào bới, tôi thấy rằng "zdb -l / dev / DEVICENAME" đã liệt kê GUID (lấy trực tiếp từ thiết bị chứ không phải từ hồ sơ nhóm) và sử dụng GUID đó cho phép tôi thực hiện thay thế (thực ra tôi đã làm một "zpool offline" theo sau là "zpool remove" và sau đó là "zpool add", hoạt động hoàn hảo).


Cảm ơn! Một gợi ý thêm trong câu trả lời được chấp nhận của riêng tôi với một tham chiếu đến nhận xét của bạn.
Marcus

Đối với tôi, zdb -l /dev/...luôn luôn hiển thị "không thể giải nén nhãn".
Matt

0

Tôi đã có một vấn đề tương tự:

Ổ đĩa bị lỗi theo cách mà nó không đăng ký trong BIOS nữa (hoàn toàn chết). Các zpool statuschỉ ra rằng nó đã được UNAVAILABLE.

Tôi đặt một ổ đĩa có dung lượng tương tự và tôi quản lý để phân bổ nó như một ổ đĩa mới và spaređã INUSEphục hồi ổ đĩa. Nhưng, nó thực sự không phải là một phần của zpool, thay vào đó, hồ bơi có ký ức về ổ đĩa bị mất, nghĩ rằng một ngày nào đó nó sẽ xuất hiện trở lại.

Giải pháp là đầu tiên thả ổ đĩa bị mất khỏi zpool:

[root@hactar ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094  

Sau đó, thả ổ đĩa được đánh dấu spare-1 INUSEcũng:

[root@hactar ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094

Khi tôi đã làm điều này, có vẻ như FreeNAS đã tìm ra nó mà không cần tôi phải thực hiện một replacelệnh nào, tuy nhiên nếu hệ thống của bạn không tự tìm ra nó, lệnh sau sẽ thay thế một thiết bị bằng thiết bị khác:

zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}

Ví dụ:

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • Các gptids đến từ zpool statuslệnh của tôi .
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.