Tuesday, July 2, 2024

Quản lý device trong ZFS

-

1. Tổng quan.

Trong hệ thống tệp ZFS, việc quản lý không gian lưu trữ được thực hiện thông qua các “zpool”. Một zpool là một nhóm các thiết bị lưu trữ (ví dụ: ổ cứng, SSD) được quản lý như một đơn vị duy nhất. ZFS cung cấp khả năng linh hoạt cao trong việc quản lý không gian lưu trữ, bao gồm việc thêm và xóa các thiết bị lưu trữ khỏi zpool.

Thêm Thiết Bị vào Zpool.

  • Mục Đích: Tăng dung lượng lưu trữ hoặc cải thiện hiệu suất.
  • Cách Thực Hiện: Sử dụng lệnh zpool add [pool_name] [device] để thêm một thiết bị mới vào pool.
  • Lưu Ý: Khi thêm thiết bị, cần đảm bảo rằng nó không chứa dữ liệu quan trọng vì ZFS sẽ khởi tạo thiết bị này.

Thay Thế Đĩa Hỏng.

  • Mục Đích: Đảm bảo tính toàn vẹn và khả năng phục hồi của dữ liệu trong trường hợp một đĩa trong zpool gặp sự cố.
  • Cách Thực Hiện: Sử dụng lệnh zpool replace [pool_name] [old_device] [new_device] để thay thế một thiết bị hỏng với một thiết bị mới.
  • Lưu Ý: Trước khi thay thế, cần đảm bảo rằng thiết bị mới không chứa dữ liệu quan trọng hoặc đã được định dạng sẵn. ZFS sẽ tự động bắt đầu quá trình resilvering, sao chép dữ liệu từ các đĩa còn lại trong pool sang đĩa mới để phục hồi dữ liệu và tính toàn vẹn của pool.

Xóa Thiết Bị khỏi Zpool.

  • Mục Đích: Loại bỏ thiết bị hỏng, nâng cấp thiết bị, hoặc tái cấu trúc pool.
  • Cách Thực Hiện: Sử dụng lệnh zpool remove [pool_name] [device] để xóa một thiết bị khỏi pool.
  • Lưu Ý: Không phải tất cả thiết bị đều có thể được loại bỏ một cách an toàn. Ví dụ, thiết bị chứa dữ liệu không thể dễ dàng loại bỏ nếu không có cơ chế sao chép dữ liệu.

2. Thực hành thêm thiết bị vào Zpool.

Để thêm một ổ đĩa mới vào một zpool hiện có trong ZFS, bạn sẽ sử dụng lệnh zpool add. Trong trường hợp của bạn, nếu bạn muốn thêm ổ đĩa sdf vào zpool hiện tại để nó tham gia cùng với các ổ đĩa sdbsdc, và sdd, bạn cần đảm bảo rằng ổ đĩa sdf không chứa dữ liệu quan trọng nào vì quá trình này có thể ghi đè lên dữ liệu hiện có trên ổ đĩa.

Dưới đây là các bước bạn cần thực hiện:

Kiểm Tra Zpool Hiện Tại: Đầu tiên, hãy kiểm tra trạng thái của zpool hiện tại và các ổ đĩa thành viên bằng lệnh zpool status:

shell> zpool status
  pool: zpool_vol01
 state: ONLINE
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            sdb      ONLINE       0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0
        cache
          sde        ONLINE       0     0     0

errors: No known data errors

Kiểm tra tra pool với lệnh zpool status.

shell> zfs list
NAME          USED  AVAIL     REFER  MOUNTPOINT
zpool_vol01   157K  57.8G     30.6K  /zpool_vol01

Kiểm tra tra pool với lệnh zpool list.

shell> zpool list
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zpool_vol01  89.5G   235K  89.5G        -         -     0%     0%  1.00x    ONLINE  -

Danh sách device của mình hiện tại như sau.

shell> lsblk 
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0   62M  1 loop /snap/core20/1587
loop1                       7:1    0 79.9M  1 loop /snap/lxd/22923
loop2                       7:2    0   47M  1 loop /snap/snapd/16292
sda                         8:0    0   50G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   48G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0   24G  0 lvm  /
sdb                         8:16   0   30G  0 disk 
├─sdb1                      8:17   0   30G  0 part 
└─sdb9                      8:25   0    8M  0 part 
sdc                         8:32   0   30G  0 disk 
├─sdc1                      8:33   0   30G  0 part 
└─sdc9                      8:41   0    8M  0 part 
sdd                         8:48   0   30G  0 disk 
├─sdd1                      8:49   0   30G  0 part 
└─sdd9                      8:57   0    8M  0 part 
sde                         8:64   0   30G  0 disk 
├─sde1                      8:65   0   30G  0 part 
└─sde9                      8:73   0    8M  0 part 
sdf                         8:80   0   30G  0 disk 
sr0                        11:0    1 1024M  0 rom

Sao Lưu Dữ Liệu: Trước khi thực hiện bất kỳ thay đổi nào, hãy đảm bảo bạn đã sao lưu dữ liệu quan trọng. Thêm ổ đĩa vào zpool có thể là một quá trình không thể đảo ngược mà không mất dữ liệu.

Thêm Ổ Đĩa vào Zpool: Để thêm ổ đĩa sdf vào mảng raidz1-0 trong zpool_vol01, bạn cần sử dụng lệnh zpool add. Tuy nhiên, lưu ý rằng bạn không thể thêm trực tiếp một ổ đĩa vào một vdev (raidz1-0 trong trường hợp này) sau khi đã tạo pool. Bạn chỉ có thể thêm ổ đĩa vào pool dưới dạng một vdev mới hoặc thay thế ổ đĩa hỏng.

Nếu bạn muốn mở rộng dung lượng của raidz1-0, bạn cần thay thế từng ổ đĩa bằng ổ có dung lượng lớn hơn và sau đó mở rộng kích thước của pool. Điều này đòi hỏi việc thay thế từng ổ đĩa một và đợi dữ liệu được tái tổ chức (resilver) trước khi thay thế ổ tiếp theo.

Nếu bạn chỉ muốn thêm sdf vào pool như một vdev mới (không phải là một phần của raidz1-0), bạn có thể sử dụng lệnh sau:

zpool add zpool_vol01 sdf

Nếu bạn gặp lỗi “invalid vdev specification” thì hãy thêm thêm tham số -f vào lệnh và chạy lại lệnh.

shell> zpool add zpool_vol01 sdf
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses raidz and new vdev is disk

Lệnh này sẽ thêm sdf vào zpool_vol01 như một vdev độc lập, không là một phần của raidz1-0. Điều này sẽ tăng dung lượng khả dụng của pool nhưng cũng sẽ ảnh hưởng đến mức độ chịu lỗi và hiệu suất của pool tùy thuộc vào cách bạn sử dụng vdev mới này.

Kiểm Tra Zpool sau khi Thêm: Sau khi thêm ổ đĩa, hãy kiểm tra lại để đảm bảo rằng ổ đĩa đã được thêm thành công và zpool đang hoạt động bình thường:

shell> zpool status
  pool: zpool_vol01
 state: ONLINE
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            sdb      ONLINE       0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0
          sdf        ONLINE       0     0     0
        cache
          sde        ONLINE       0     0     0

errors: No known data errors

Kiểm Tra Dung Lượng Zpool: Cuối cùng, kiểm tra dung lượng của zpool để đảm bảo rằng dung lượng lưu trữ đã tăng lên theo mong đợi:

shell> zpool list
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zpool_vol01   119G   286K   119G        -         -     0%     0%  1.00x    ONLINE  -

Nhớ rằng, việc thêm ổ đĩa vào zpool là một quá trình quan trọng và có thể ảnh hưởng đến dữ liệu của bạn. Hãy chắc chắn rằng bạn đã thực hiện đầy đủ các bước sao lưu và hiểu rõ cấu trúc của zpool hiện tại trước khi thêm ổ đĩa mới.

3. Thay thế đĩa hỏng.

Trường hợp thay thế ổ đĩa hỏng (ví dụ: sdb) trong một vdev (raidz1-0 trong trường hợp này) của ZFS pool (zpool_vol01) là khác biệt so với việc thêm một ổ đĩa mới vào pool. ZFS cung cấp cơ chế để thay thế một ổ đĩa hỏng mà không làm mất dữ liệu, thông qua quá trình được gọi là resilvering. Dưới đây là các bước để thay thế ổ đĩa sdb bằng ổ mới sdf:

Offline ổ đĩa hỏng: Đầu tiên, bạn cần đưa ổ đĩa hỏng ra khỏi trạng thái hoạt động trong pool.

zpool offline zpool_vol01 sdb

Sử dụng lệnh zpool status xác minh trạng thái poo bạn thấy trạng thái của pool đã thay đổi.

shell> zpool status
  pool: zpool_vol01
 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'.
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  DEGRADED     0     0     0
          raidz1-0   DEGRADED     0     0     0
            sdb      OFFLINE      0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0
          sdf        ONLINE       0     0     0
        cache
          sde        ONLINE       0     0     0

errors: No known data errors

Tuy nhiên dung lượng của pool sẽ không thay đổi nhé.

shell> zpool list
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zpool_vol01   119G   283K   119G        -         -     0%     0%  1.00x  DEGRADED  -

Chuẩn bị ổ đĩa mới: Mình đã thêm vào máy ảo 1 đĩa mới tên sdg thông tin như dưới.

shell> lsblk 
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0   62M  1 loop /snap/core20/1587
loop1                       7:1    0 79.9M  1 loop /snap/lxd/22923
loop2                       7:2    0   47M  1 loop /snap/snapd/16292
loop3                       7:3    0 38.8M  1 loop /snap/snapd/21759
loop4                       7:4    0 63.9M  1 loop /snap/core20/2318
sda                         8:0    0   50G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   48G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0   24G  0 lvm  /
sdb                         8:16   0   30G  0 disk 
├─sdb1                      8:17   0   30G  0 part 
└─sdb9                      8:25   0    8M  0 part 
sdc                         8:32   0   30G  0 disk 
├─sdc1                      8:33   0   30G  0 part 
└─sdc9                      8:41   0    8M  0 part 
sdd                         8:48   0   30G  0 disk 
├─sdd1                      8:49   0   30G  0 part 
└─sdd9                      8:57   0    8M  0 part 
sde                         8:64   0   30G  0 disk 
├─sde1                      8:65   0   30G  0 part 
└─sde9                      8:73   0    8M  0 part 
sdf                         8:80   0   30G  0 disk 
├─sdf1                      8:81   0   30G  0 part 
└─sdf9                      8:89   0    8M  0 part 
sdg                         8:96   0   30G  0 disk

Thay thế ổ đĩa hỏng: Sau khi đã offline ổ đĩa hỏng, bạn thay thế nó bằng ổ đĩa mới (sdg). Đảm bảo rằng ổ đĩa mới đã được gắn vào hệ thống và nhận diện đúng.

Thay thế ổ đĩa trong ZFS pool: Sử dụng lệnh zpool replace để bắt đầu quá trình thay thế ổ đĩa trong pool. ZFS sẽ tự động bắt đầu quá trình resilvering để đồng bộ dữ liệu từ các ổ đĩa còn lại trong vdev vào ổ đĩa mới.zpool replace zpool_vol01 sdb sdg

zpool replace zpool_vol01 sdb sdg

Xác minh trạng thái đĩa sdg.

shell> lsblk /dev/sdg
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdg      8:96   0  30G  0 disk 
├─sdg1   8:97   0  30G  0 part 
└─sdg9   8:105  0   8M  0 part

Kiểm tra trạng thái của pool: Sau khi quá trình resilvering hoàn tất, bạn nên kiểm tra trạng thái của pool để đảm bảo rằng ổ đĩa mới đã được thêm vào và pool đang hoạt động bình thường.

shell> zpool status zpool_vol01
  pool: zpool_vol01
 state: ONLINE
  scan: resilvered 120K in 00:00:00 with 0 errors on Sun Jun 30 18:49:00 2024
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            sdg      ONLINE       0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0
          sdf        ONLINE       0     0     0
        cache
          sde        ONLINE       0     0     0

errors: No known data errors

Quá trình resilvering có thể mất một khoảng thời gian tùy thuộc vào dung lượng dữ liệu và tốc độ của ổ đĩa. Trong thời gian này, pool vẫn có thể sử dụng được, nhưng hiệu suất có thể giảm do quá trình đồng bộ dữ liệu.

4. Xóa Thiết Bị khỏi Zpool.

Để loại bỏ ổ đĩa sdf ra khỏi ZFS pool zpool_vol01, bạn có thể sử dụng lệnh zpool remove. Tuy nhiên, cần lưu ý rằng việc loại bỏ ổ đĩa khỏi pool chỉ có thể thực hiện được nếu ổ đĩa đó không chứa dữ liệu không thể di chuyển hoặc nếu pool được cấu hình để cho phép loại bỏ vdev (ví dụ, khi sử dụng các tính năng như vdev removal hoặc khi ổ đĩa là một phần của một cache hoặc log device).

Tôi không muốn sử dụng sdf nữa nên tôi sẽ loại bỏ nó ra khỏi pool.

shell> zpool status zpool_vol01
  pool: zpool_vol01
 state: ONLINE
  scan: resilvered 120K in 00:00:00 with 0 errors on Sun Jun 30 18:49:00 2024
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            sdg      ONLINE       0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0
          sdf        ONLINE       0     0     0
        cache
          sde        ONLINE       0     0     0

errors: No known data errors

Nếu sdf được thêm vào như một vdev độc lập (không phải là một phần của raidz1-0), bạn có thể thử loại bỏ nó bằng cách sử dụng lệnh sau:

zpool remove zpool_vol01 sdf

Lệnh này sẽ yêu cầu ZFS di chuyển dữ liệu từ sdf sang các vdev còn lại trong pool trước khi loại bỏ sdf khỏi pool. Quá trình này có thể mất một thời gian tùy thuộc vào lượng dữ liệu cần được di chuyển.

Tuy nhiên, nếu sdf là một phần của một vdev mirror hoặc nếu có bất kỳ ràng buộc nào khác không cho phép loại bỏ nó một cách an toàn, ZFS sẽ thông báo lỗi và từ chối thực hiện thao tác.

shell> zpool remove zpool_vol01 sdf
cannot remove sdf: invalid config; all top-level vdevs must have the same sector size and not be raidz.

Trong trường hợp đó, bạn cần xem xét lại cấu trúc của pool và quyết định liệu có cần phải tái cấu trúc pool để đáp ứng yêu cầu của bạn hay không.

Ví dụ như lỗi “cannot remove sdf: invalid config; all top-level vdevs must have the same sector size and not be raidz” xảy ra do ZFS không cho phép loại bỏ một vdev từ pool khi các vdev cấp cao nhất (top-level vdevs) trong pool có kích thước sector khác nhau hoặc khi có vdev kiểu raidz trong pool. Điều này bảo vệ tính nhất quán và tính toàn vẹn của dữ liệu trong pool.

Trong trường hợp của bạn, có vẻ như pool zpool_vol01 chứa một vdev kiểu raidz (raidz1-0) và bạn đã thêm sdf như một vdev độc lập, không phải là một phần của raidz. ZFS không hỗ trợ loại bỏ vdev trong tình huống này do hạn chế về cấu trúc và tính toàn vẹn dữ liệu.

Cách giải quyết:

  • Sao lưu dữ liệu: Trước tiên, hãy đảm bảo rằng bạn đã sao lưu toàn bộ dữ liệu quan trọng. Việc này cực kỳ quan trọng trước khi thực hiện bất kỳ thao tác nào có thể ảnh hưởng đến dữ liệu.
  • Tạo pool mới: Nếu bạn cần cấu trúc lại pool của mình (ví dụ: để loại bỏ sdf hoặc thay đổi cấu trúc vdev), cách tốt nhất là tạo một pool mới với cấu trúc mong muốn.
  • Chuyển dữ liệu: Sau khi tạo pool mới, chuyển dữ liệu từ pool cũ sang pool mới. Bạn có thể sử dụng lệnh zfs send và zfs receive để di chuyển datasets một cách an toàn.
  • Xóa pool cũ: Khi đã chắc chắn rằng tất cả dữ liệu quan trọng đã được chuyển sang pool mới và hoạt động đúng đắn, bạn có thể xóa pool cũ bằng lệnh zpool destroy.
  • Kiểm tra lại: Sau khi hoàn tất, kiểm tra lại để đảm bảo rằng dữ liệu và cấu trúc pool mới đều đúng như mong đợi.

Lưu ý rằng việc tái cấu trúc pool ZFS có thể là một quá trình phức tạp và tiềm ẩn rủi ro đối với dữ liệu. Hãy chắc chắn rằng bạn hiểu rõ các bước cần thực hiện và đã thực hiện đầy đủ các biện pháp sao lưu trước khi bắt đầu.

5. Kết Luận.

Quản lý zpool trong ZFS không chỉ giới hạn ở việc thêm và xóa thiết bị, mà còn bao gồm việc thay thế các thiết bị hỏng để đảm bảo tính toàn vẹn và khả năng phục hồi của dữ liệu. Quá trình này đòi hỏi sự cẩn trọng và lập kế hoạch cụ thể, đặc biệt là trong việc chọn lựa thiết bị thay thế và thời điểm thực hiện để giảm thiểu ảnh hưởng đến hoạt động của hệ thống. Việc sao lưu dữ liệu vẫn là một bước quan trọng và không thể bỏ qua trong quản lý zpool.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories