Thứ Tư, 5 tháng 9, 2018

Hướng dẫn tạo ZFS pools và file systems trên Solaris

Chúng tôi có thể tạo nhóm ZFS bằng các thiết bị khác nhau như:

a. Sử dụng toàn bộ đĩa
b. Sử dụng slices đĩa
c. Sử dụng tập tin
a. Sử dụng toàn bộ đĩa
# echo | format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
       0. c1t0d0
          /pci@0,0/pci15ad,1976@10/sd@0,0
       1. c1t1d0 <VMware,-VMware Virtual S-1.0-1.00GB>
          /pci@0,0/pci15ad,1976@10/sd@1,0
       2. c1t2d0
          /pci@0,0/pci15ad,1976@10/sd@2,0
       3. c1t3d0
          /pci@0,0/pci15ad,1976@10/sd@3,0
       4. c1t4d0
          /pci@0,0/pci15ad,1976@10/sd@4,0
Specify disk (enter its number): Specify disk (enter its number):
Tôi sẽ không sử dụng đĩa hệ điều hành (disk0).
# zpool create dbapool  c1t1d0
# zpool list
NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
dbapool  1008M  78.5K  1008M     0%  ONLINE  -

Để hủy pool :
# zpool destroy dbapool
# zpool list
no pools available

b. Sử dụng slices đĩa
Bây giờ chúng ta sẽ tạo một slice đĩa trên đĩa c1t1d0 là c1t1d0s0 có kích thước 512 MB
# zpool create dbapool c1t1d0s0
# zpool list
NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
dbapool   504M  78.5K   504M     0%  ONLINE  -

c. Sử dụng tập tin


Chúng tôi cũng có thể tạo một zpool với các tập tin. Hãy chắc chắn rằng bạn đưa ra một đường dẫn tuyệt đối trong khi tạo một zpool
# mkfile 100m file1
# zpool create dbapool /file1
# zpool list
NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
dbapool  95.5M   115K  95.4M     0%  ONLINE  -

Tạo nhóm với các cấp RAID khác nhau
Bây giờ chúng ta có thể tạo một nhóm zfs với các cấp RAID khác nhau:
1. Dynamic strip – 
Đó là một pool rất cơ bản có thể được tạo bằng một đĩa đơn hoặc ghép một đĩa. Chúng ta đã thấy việc tạo zpool bằng một đĩa đơn trong ví dụ tạo zpool bằng đĩa. Hãy xem làm thế nào chúng ta có thể tạo zfs pool nối nhau.
# zpool create dbapool c1t1d0 c1t2d0
# zpool list
NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
dbapool  1.97G    80K  1.97G     0%  ONLINE  -
# zpool status
  pool: dbapool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        dbapool    ONLINE       0     0     0
          c1t1d0    ONLINE       0     0     0
          c1t2d0    ONLINE       0     0     0

errors: No known data errors

Cấu hình này không cung cấp bất kỳ sự dư thừa. Do đó, bất kỳ lỗi đĩa sẽ dẫn đến mất dữ liệu. Cũng lưu ý rằng một khi đĩa được thêm theo kiểu này vào zfs pool có thể không bị xóa khỏi pool nữa. Cách duy nhất để giải phóng đĩa là phá hủy toàn bộ pool. Điều này xảy ra do tính chất phân dải động của pool sử dụng cả hai đĩa để lưu trữ dữ liệu.
2. Mirrored pool
a. Mirror 2 chiều
Một mirror pool cung cấp cho bạn sự dự phòng cho phép chúng tôi lưu trữ nhiều bản sao dữ liệu trên các đĩa khác nhau. Tại đây bạn cũng có thể tách một đĩa khỏi nhóm vì dữ liệu sẽ có sẵn trên các đĩa khác.
# zpool create dbapool mirror c1t1d0 c1t2d0
# zpool list
NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
dbapool  1008M  78.5K  1008M     0%  ONLINE  -
# zpool status
  pool: dbapool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        dbapool    ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0

errors: No known data errors

b. 3 way mirror
# zpool destroy dbapool
# zpool create dbapool mirror c1t1d0 c1t2d0 c1t3d0
# zpool list
NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
dbapool  1008M  78.5K  1008M     0%  ONLINE  -
# zpool status
  pool: dbapool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        dbapool    ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0

errors: No known data errors

2. RAID-Z pools
Bây giờ chúng ta cũng có thể có một nhóm tương tự như cấu hình RAID-5 được gọi là RAID-Z. RAID-Z có 3 loại raidz1 (chẵn lẻ) và raidz2 (chẵn lẻ kép) và rzidz3 (chẵn lẻ ba). Hãy cho chúng tôi xem làm thế nào chúng ta có thể cấu hình từng loại.
Yêu cầu đĩa tối thiểu cho mỗi loại
Đĩa tối thiểu cần thiết cho từng loại RAID-Z
1. raidz1 - 2 đĩa
2. raidz2 - 3 đĩa
3. raidz3 - 4 đĩa
a. raidz1
# zpool create dbapool raidz c1t1d0 c1t2d0 c1t3d0
# zpool list
NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
dbapool  2.95G   166K  2.95G     0%  ONLINE  -
# zpool status
  pool: dbapool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        dbapool    ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0

errors: No known data errors

b. raidz2
#zpool create dbapool raidz2 c1t1d0 c1t2d0 c1t3d0
#zpool list
NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT
dbapool  2.95G   186K  2.95G     0%  ONLINE  -
#zpool status
  pool: dbapool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        dbapool    ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0

errors: No known data errors

c. raidz3
# zpool create dbapool raidz3 c1t1d0 c1t2d0 c1t3d0 c1t4d0
# zfs list
NAME       USED  AVAIL  REFER  MOUNTPOINT
dbapool    61K   976M    31K  /dbapool
# zpool status
  pool: dbapool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        dbapool    ONLINE       0     0     0
          raidz3-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0
            c1t4d0  ONLINE       0     0     0

errors: No known data errors

Thêm thiết bị dự phòng vào zpool
Bằng cách thêm một thiết bị dự phòng vào zfs pool, các đĩa bị lỗi sẽ tự động được thay thế bởi thiết bị không gian và quản trị viên có thể thay thế các diks thất bại vào thời điểm sau. Chúng tôi cũng có thể chia sẻ thiết bị dự phòng giữa nhiều zfs pool.
# zpool add dbapool spare c1t3d0
# zpool status
  pool: dbapool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        dbapool    ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
        spares
          c1t3d0    AVAIL

errors: No known data errors

Đảm bảo bạn bật tính năng tự động thay thế (thuộc tính zfs) trên dbapool
# zpool autoreplace=on mpool

Chạy dry trên tạo zpool
Bạn có thể thực hiện chạy khô và kiểm tra kết quả của việc tạo pool trước khi thực sự tạo ra nó.
# zpool create -n dbapool raidz2 c1t1d0 c1t2d0 c1t3d0
would create 'dbapool' with the following layout:

        dbapool
          raidz2
            c1t1d0
            c1t2d0
            c1t3d0

Nhập vào và xuất ra pool
Bạn có thể cần phải di chuyển các zfs pool giữa các hệ thống. ZFS thực hiện điều này bằng cách xuất một nhóm từ một hệ thống và nhập nó vào một hệ thống khác.
a. Xuất ra 1 ZFS pool

Để nhập một pool, trước tiên bạn phải xuất một nhóm rõ ràng từ hệ thống nguồn. Xuất một nhóm, ghi tất cả dữ liệu chưa được ghi vào nhóm và xóa tất cả thông tin của pool khỏi hệ thống nguồn.
# zpool export dbapool
# zpool list
no pools available

Trong trường hợp bạn có một số hệ thống tệp được gắn kết, bạn có thể buộc xuất
# zpool export -f dbapool

b. Nhập vào 1 ZFS pool

Bây giờ chúng ta có thể nhập pool đã xuất. Để biết nhóm nào có thể được nhập, hãy chạy lệnh nhập mà không có tùy chọn nào.
# zpool import
  pool: dbapool
    id: 940735588853575716
 state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

        dbapool    ONLINE
          raidz3-0  ONLINE
            c1t1d0  ONLINE
            c1t2d0  ONLINE
            c1t3d0  ONLINE
            c1t4d0  ONLINE

Như bạn có thể thấy trong đầu ra, mỗi nhóm có một pool ID duy nhất, rất tiện lợi khi bạn có nhiều nhóm có cùng tên. Trong trường hợp đó, một pool có thể được nhập bằng ID pool.
# zpool import 940735588853575716

Nhập vào pools với file

Theo mặc định lệnh nhập tìm kiếm 
thiết bị pool  /dev/dsk cho. Vì vậy, để xem các pool có thể nhập được với các tệp như thiết bị của họ, chúng ta có thể sử dụng:
# zpool import -d /
  pool: geekfilepool
    id: 8874031618221759977
 state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

        geekfilepool  ONLINE
          //file1   ONLINE
          //file2   ONLINE

Bây giờ chúng ta có thể nhập pool chúng ta muốn:
# zpool import dbapool
# zpool import -d / geekfilepool

Tương tự như xuất ra, chúng ta có thể buộc nhập một nhóm
# zpool import -f dbapool

Tạo một hệ thống tệp ZFS
Phần tốt nhất về zfs là oracle (hay tôi nên nói là Sun) đã giữ các lệnh cho nó khá dễ hiểu và dễ nhớ. Để tạo một hệ thống tệp fs1 trong dbapool pool zfs hiện có:
# zfs create dbapool/fs1
# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
dbapool       131K   976M    31K  /dbapool
dbapool/fs1    31K   976M    31K  /dbapool/fs1

Bây giờ theo mặc định khi bạn tạo một hệ thống tập tin vào một nhóm, nó có thể chiếm tất cả không gian trong nhóm. Vì vậy, quá giới hạn việc sử dụng hệ thống tập tin, chúng tôi xác định  đặt phòng và hạn ngạch.  Hãy để chúng tôi xem xét một ví dụ để hiểu hạn ngạch và đặt phòng.
Giả sử chúng ta gán hạn ngạch = 500 MB và đặt trước = 200 MB cho hệ thống tệp fs1. Chúng tôi cũng tạo một hệ thống tệp mới fs2 mà không có bất kỳ hạn ngạch và bảo lưu nào. Vì vậy, bây giờ đối với fs1 200 MB được dành riêng trong 1GB (kích thước nhóm), điều mà không hệ thống tệp nào khác có thể có. Nó cũng có thể mất tới 500 MB (hạn ngạch) ra khỏi nhóm, nhưng nếu nó là miễn phí. Vì vậy, fs2 có quyền chiếm tới 800 MB (1000 MB - 200 MB) không gian bể bơi.

Vì vậy, nếu bạn không muốn không gian của một hệ thống tệp được chiếm bởi hệ thống tệp khác, hãy xác định đặt chỗ cho nó.
Một điều nữa, đặt phòng không thể lớn hơn hạn ngạch nếu nó đã được xác định. Mặt khác, khi bạn thực hiện một danh sách zfs, bạn sẽ có thể thấy không gian có sẵn cho hệ thống tệp bằng với hạn ngạch được xác định cho nó (nếu không gian bị chiếm bởi các hệ thống tệp khác) và không được bảo lưu như mong đợi.
Để đặt dịch vụ và hạn ngạch trên fs1 như đã nêu ở trên:
# zfs set quota=500m dbapool/fs1
# zfs set reservation=200m dbapool/fs1
# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
dbapool       200M   776M    32K  /dbapool
dbapool/fs1    31K   500M    31K  /dbapool/fs1

Để đặt mount point fcho hệ thống tệp
Theo mặc định, mount point (/poolname /fs_name) sẽ được tạo cho hệ thống tệp nếu bạn không chỉ định. Trong trường hợp của chúng tôi, đó là /dbapool/fs1. Ngoài ra, bạn không cần phải có một mục của điểm gắn kết trong /etc/vfstab vì nó được lưu trữ nội bộ trong siêu dữ liệu của nhóm zfs và được gắn tự động khi hệ thống khởi động. Nếu bạn muốn thay đổi điểm gắn kết:
# zfs set mountpoint=/test dbapool/fs1
# df -h |grep /test
dbapool/fs1           500M    31K   500M     1%    /test

Các thuộc tính quan trọng khác
Bạn cũng có thể thay đổi một số thuộc tính quan trọng khác như nén, sharenfs, v.v. Ngoài ra, chúng tôi có thể chỉ định các thuộc tính trong khi tạo chính hệ thống tệp.
# zfs create -o mountpoint=/test dbapool/fs1

Ref from thegeekdiary


ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master