ZFS là trình quản lý hệ thống tập tin và ổ đĩa logic kết hợp. Các tính năng của ZFS bao gồm bảo vệ chống lại sự hỏng dữ liệu, hỗ trợ dung lượng lưu trữ lớn, nén dữ liệu hiệu quả, tích hợp khái niệm quản lý hệ thống tệp và ổ đĩa, ảnh chụp nhanh và bản sao chép khi ghi, kiểm tra tính toàn vẹn liên tục và sửa chữa tự động, RAID-Z và ACL NFSv4 gốc.
ZFS ban đầu được triển khai dưới dạng phần mềm nguồn mở, được cấp phép theo Giấy phép phát triển và phân phối chung (CDDL).
Khi chúng ta nói về hệ thống tệp ZFS, chúng ta có thể nêu bật các khái niệm chính sau:
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn từng bước cài đặt hệ thống tệp ZFS trên Debian 8.1 (Jessie). Tôi sẽ chỉ cho bạn cách tạo và cấu hình nhóm sử dụng raid0 (stripe), raid1 (Mirror) và RAID-Z (Raid có tính chẵn lẻ) và giải thích cách cấu hình hệ thống tệp bằng ZFS.
Dựa trên thông tin từ trang webwww.zfsonlinux.org, ZFS chỉ được hỗ trợ trên kiến trúc AMD64 và Intel 64 Bit (amd64). Hãy bắt đầu với quá trình thiết lập.
Đăng nhập vào máy chủ Debian bằng quyền truy cập SSH, trở thành người dùng root, sau đó chạy các lệnh sau.
Kết quả trên cho thấy zfs trên linux đã được cài đặt, vì vậy chúng ta có thể tiếp tục tạo nhóm đầu tiên.
Tôi đã thêm năm đĩa vào máy chủ này, mỗi đĩa có kích thước 2GB. Chúng ta có thể kiểm tra các đĩa có sẵn bằng lệnh này:
Chúng ta có thể thấy rằng chúng ta có /dev/sda cho đến /dev/sdg, /dev/sdađược sử dụng cho hệ điều hành Debian Linux Jessie 8.1. Chúng ta sẽ sử dụng /dev/sdb cho đến /dev/sdg cho hệ thống tệp ZFS.
Bây giờ chúng ta có thể bắt đầu tạo nhóm, đối với nhóm đầu tiên, tôi sẽ chỉ cho bạn cách tạo raid0 (stripe).
Lệnh "zpool list" cho thấy chúng ta đã tạo thành công một nhóm zfs raid0, tên của nhóm là pool0 và kích thước là 2GB.
Tiếp theo chúng ta sẽ tạo một raid1 (mirror) với các đĩa khác.
Chúng ta có thể thấy rằng hiện tại chúng ta có hai nhóm, pool0 cho raid0 và pool1 cho raid1.
Để kiểm tra trạng thái của các nhóm, chúng ta có thể sử dụng lệnh bên dưới:
Chúng ta có thể kiểm tra trạng thái nhóm bằng lệnh "zpool status". Chúng ta có thể thấy sự khác biệt giữa pool0 và pool1, pool0 chỉ có một đĩa, còn pool1 có hai đĩa và trạng thái của các đĩa là phản chiếu (mirror-0).
Tiếp theo, chúng ta sẽ tạo một pool với RAID-Z, RAID-Z là một lược đồ phân phối dữ liệu/tính chẵn lẻ giống như RAID-5, nhưng nó sử dụng độ rộng dải động: mỗi khối có dải RAID riêng, bất kể kích thước khối, dẫn đến mọi lần ghi RAID-Z đều là lần ghi toàn dải.
RAID-Z yêu cầu tối thiểu ba ổ cứng và là một dạng thỏa hiệp giữa RAID 0 và RAID 1. Trong một nhóm RAID-Z: Nếu một đĩa duy nhất trong nhóm của bạn bị hỏng, chỉ cần thay thế đĩa đó và ZFS sẽ tự động xây dựng lại dữ liệu dựa trên thông tin tính chẵn lẻ từ các đĩa khác. Để mất tất cả thông tin trong nhóm lưu trữ của bạn, hai đĩa sẽ phải bị hỏng. Để thiết lập ổ đĩa dự phòng hơn nữa, bạn có thể sử dụng RAID 6 (RAID-Z2 trong trường hợp ZFS) để có được tính chẵn lẻ kép.
Trước tiên, hãy tạo một nhóm RAID-Z với một tính chẵn lẻ.
Như chúng ta có thể thấy, df -h cho thấy nhóm 6GB của chúng ta hiện đã giảm xuống còn 4GB, 2GB đang được sử dụng để lưu trữ thông tin chẵn lẻ. Với lệnh zpool status, chúng ta thấy rằng nhóm của chúng ta hiện đang sử dụng RAID-Z.
Tiếp theo, chúng ta sẽ tạo RAID-Z2 (raid 6), vì mục đích này, chúng ta phải xóa nhóm hiện có vì không còn đĩa nào khả dụng nữa. Xóa một nhóm rất dễ, chúng ta có thể sử dụng lệnh zpool destroy cho việc đó.
Bây giờ tất cả zpool của chúng ta đã biến mất, vì vậy chúng ta có thể tạo một nhóm RAID-Z2.
Như chúng ta có thể thấy, df -h cho thấy nhóm 8GB của chúng ta hiện đã giảm xuống còn 4GB, vì 4GB đang được sử dụng để lưu trữ thông tin chẵn lẻ hai lần. Với lệnh "zpool status", chúng ta thấy rằng nhóm của chúng ta hiện đang sử dụng RAID-Z2.
Tạo một tệp trong poolz2 và đảm bảo chúng ta có thể truy cập tệp đó.
Trước khi chúng tôi mô phỏng lỗi: hãy kiểm tra trạng thái của poolz2và đảm bảo rằng trạng thái là Onlinevà trạng thái của tất cả các đĩa là Online.
Lỗi được mô phỏng bằng cách ghi dữ liệu ngẫu nhiên bằng lệnh dd vào /dev/sdb.
Bây giờ chúng ta có thể thấy một hoặc nhiều đĩa đã gặp lỗi không thể phục hồi, do đó chúng ta phải thay đĩa. Trong trường hợp này, chúng tôi thay thế đĩa /dev/sdb bằng /dev/sdf.
Sau khi chúng tôi thay thế/dev/sdbbằng/dev/sdf, lỗi đã biến mất và chúng tôi vẫn có thể truy cập vào tệp thử nghiệm mà chúng tôi đã tạo trước đó.
Cho đến bước này, chúng tôi đã biết cách tạo và cấu hình azpool.
Chúng tôi đã có một hệ thống tệp ZFS, hệ thống này được tự động thêm vào khi chúng ta tạo zpool. Bây giờ chúng ta sẽ tạo một hệ thống tệp ZFS khác.
Rất dễ phải không? Chúng tôi tạo một hệ thống tệp ZFS mới có tên là tank và tự động gắn kết nó dưới dạng /poolz2/tank.
Làm thế nào để tạo một điểm gắn kết tùy chỉnh cho hệ thống tệp ZFS? Sử dụng lệnh bên dưới:
Làm thế nào để sửa đổi điểm gắn kết hiện có? Chúng ta có thể thực hiện điều đó bằng lệnh bên dưới:
Để gắn kết và hủy gắn kết một hệ thống tập tin, hãy sử dụng lệnh bên dưới:
Xóa hệ thống tệp zfs rất dễ, chúng ta có thể sử dụng lệnh zfs destroy cho việc đó.
Hệ thống tệp /data đã biến mất.
ZFS ban đầu được triển khai dưới dạng phần mềm nguồn mở, được cấp phép theo Giấy phép phát triển và phân phối chung (CDDL).
Khi chúng ta nói về hệ thống tệp ZFS, chúng ta có thể nêu bật các khái niệm chính sau:
- Tính toàn vẹn dữ liệu.
- Quản trị lưu trữ đơn giản chỉ với hai lệnh: zfs và zpool.
- Mọi thứ có thể được thực hiện khi hệ thống tệp trực tuyến.
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn từng bước cài đặt hệ thống tệp ZFS trên Debian 8.1 (Jessie). Tôi sẽ chỉ cho bạn cách tạo và cấu hình nhóm sử dụng raid0 (stripe), raid1 (Mirror) và RAID-Z (Raid có tính chẵn lẻ) và giải thích cách cấu hình hệ thống tệp bằng ZFS.
Dựa trên thông tin từ trang webwww.zfsonlinux.org, ZFS chỉ được hỗ trợ trên kiến trúc AMD64 và Intel 64 Bit (amd64). Hãy bắt đầu với quá trình thiết lập.
Điều kiện tiên quyết:
- Debian 8 với Kernel 64bit.
- quyền root.
Bước 1 - Cập nhật kho lưu trữ và cập nhật hệ thống Debian Linux
Để thêm kho lưu trữ zfsonlinux vào hệ thống của chúng tôi, hãy tải xuống và cài đặt gói zfsonlinux như được hiển thị bên dưới. Thao tác này sẽ thêm các tệp/etc/apt/sources.list.d/zfsonlinux.list và /etc/apt/trusted.gpg.d/zfsonlinux.gpg trên máy tính của bạn. Sau đó, bạn có thể cài đặt zfs giống như bất kỳ gói Debian nào khác bằng lệnh apt-get. Một lợi ích khác khi sử dụng kho lưu trữ zfsonlinux là bạn sẽ tự động nhận được các bản cập nhật bằng cách chạy "apt-get update && apt-get upgrade".Đăng nhập vào máy chủ Debian bằng quyền truy cập SSH, trở thành người dùng root, sau đó chạy các lệnh sau.
Mã:
# uname -a
Linux debian-zfs 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
# wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_6_all.deb
# dpkg -i zfsonlinux_6_all.deb
# apt-get update
Bước 2 - Cài đặt zfsonlinux
Zfsonlinux có nhiều phần mềm phụ thuộc được apt tự động cài đặt. Quá trình này sẽ mất một lúc. Khi quá trình cài đặt hoàn tất, hãy khởi động lại máy chủ.
Mã:
# apt-get install lsb-release
# apt-get install debian-zfs
# shutdown -r now
Bước 3 - Tạo và cấu hình nhóm
Sau khi máy chủ được khởi động lại, hãy kiểm tra xem zfsonlinux đã được cài đặt và chạy tốt chưa.
Mã:
# dpkg -l | grep zfs
ii debian-zfs 7~jessie amd64 Gói siêu dữ liệu hệ thống tệp ZFS gốc cho Debian.
ii libzfs2 0.6.5.2-2 amd64 Thư viện hệ thống tệp ZFS gốc cho Linux
ii zfs-dkms 0.6.5.2-2 tất cả các mô-đun hạt nhân hệ thống tệp ZFS gốc cho Linux
ii zfsonlinux 6 tất cả archive.zfsonlinux.org trust package
ii zfsutils 0.6.5.2-2 amd64 công cụ dòng lệnh để quản lý hệ thống tệp ZFS
Tôi đã thêm năm đĩa vào máy chủ này, mỗi đĩa có kích thước 2GB. Chúng ta có thể kiểm tra các đĩa có sẵn bằng lệnh này:
Mã:
# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
Bây giờ chúng ta có thể bắt đầu tạo nhóm, đối với nhóm đầu tiên, tôi sẽ chỉ cho bạn cách tạo raid0 (stripe).
Mã:
# zpool list
không có nhóm nào khả dụng
Mã:
# zpool create -f pool0 /dev/sdb
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0% 0% 1.00x ONLINE -
Tiếp theo chúng ta sẽ tạo một raid1 (mirror) với các đĩa khác.
Mã:
# zpool create -f pool1 mirror /dev/sdc /dev/sdd
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0% 0% 1.00x ONLINE -
pool1 1.98G 64K 1.98G - 0% 0% 1.00x ONLINE -
Để kiểm tra trạng thái của các nhóm, chúng ta có thể sử dụng lệnh bên dưới:
Mã:
# zpool trạng thái
nhóm: pool0
trạng thái: TRỰC TUYẾN
quét: không có yêu cầu
cấu hình:
TÊN TRẠNG THÁI ĐỌC GHI CKSUM
nhóm0 TRỰC TUYẾN 0 0 0
sdb TRỰC TUYẾN 0 0 0
lỗi: Không có lỗi dữ liệu nào được biết đến
nhóm: pool1
trạng thái: TRỰC TUYẾN
quét: không có yêu cầu
cấu hình:
TÊN TRẠNG THÁI ĐỌC GHI CKSUM
nhóm1 TRỰC TUYẾN 0 0 0
gương-0 TRỰC TUYẾN 0 0 0
sdc TRỰC TUYẾN 0 0 0
sdd TRỰC TUYẾN 0 0 0
lỗi: Không có lỗi dữ liệu nào được biết đến
Tiếp theo, chúng ta sẽ tạo một pool với RAID-Z, RAID-Z là một lược đồ phân phối dữ liệu/tính chẵn lẻ giống như RAID-5, nhưng nó sử dụng độ rộng dải động: mỗi khối có dải RAID riêng, bất kể kích thước khối, dẫn đến mọi lần ghi RAID-Z đều là lần ghi toàn dải.
RAID-Z yêu cầu tối thiểu ba ổ cứng và là một dạng thỏa hiệp giữa RAID 0 và RAID 1. Trong một nhóm RAID-Z: Nếu một đĩa duy nhất trong nhóm của bạn bị hỏng, chỉ cần thay thế đĩa đó và ZFS sẽ tự động xây dựng lại dữ liệu dựa trên thông tin tính chẵn lẻ từ các đĩa khác. Để mất tất cả thông tin trong nhóm lưu trữ của bạn, hai đĩa sẽ phải bị hỏng. Để thiết lập ổ đĩa dự phòng hơn nữa, bạn có thể sử dụng RAID 6 (RAID-Z2 trong trường hợp ZFS) để có được tính chẵn lẻ kép.
Trước tiên, hãy tạo một nhóm RAID-Z với một tính chẵn lẻ.
Mã:
# zpool create -f poolz1 raidz sde sdf sdg
# zpool list poolz1
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz1 5,94G 117K 5,94G - 0% 0% 1,00x ONLINE -
Mã:
# zpool status poolz1
pool: poolz1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
poolz1 ONLINE 0 0 0
raidz1-0 TRỰC TUYẾN 0 0 0
sde TRỰC TUYẾN 0 0 0
sdf TRỰC TUYẾN 0 0 0
sdg TRỰC TUYẾN 0 0 0
lỗi: Không có lỗi dữ liệu nào được biết đến
Mã:
# df -h /poolz1
Kích thước hệ thống tệp đã sử dụng Có sẵn Sử dụng% Đã gắn kết trên
poolz1 3,9G 0 3,9G 0% /poolz1
Tiếp theo, chúng ta sẽ tạo RAID-Z2 (raid 6), vì mục đích này, chúng ta phải xóa nhóm hiện có vì không còn đĩa nào khả dụng nữa. Xóa một nhóm rất dễ, chúng ta có thể sử dụng lệnh zpool destroy cho việc đó.
Mã:
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1,98G 64K 1,98G - 0% 0% 1,00x ONLINE -
pool1 1,98G 64K 1,98G - 0% 0% 1,00x ONLINE -
poolz1 5,94G 117K 5,94G - 0% 0% 1,00x ONLINE -
Mã:
# zpool destroy pool0
# zpool destroy pool1
# zpool destroy poolz1
# zpool list
no pools available
Mã:
# zpool create poolz2 raidz2 sdb sdc sdd sde
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz2 7.94G 135K 7.94G - 0% 0% 1.00x ONLINE -
Mã:
# df -h /poolz2
Filesystem Size Used Avail Use% Mounted on
poolz2 3.9G 0 3.9G 0% /poolz2
Mã:
# zpool status poolz2
pool: poolz2
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
poolz2 ONLINE 0 0 0
raidz2-0 TRỰC TUYẾN 0 0 0
sdb TRỰC TUYẾN 0 0 0
sdc TRỰC TUYẾN 0 0 0
sdd TRỰC TUYẾN 0 0 0
sde TRỰC TUYẾN 0 0 0
lỗi: Không có lỗi dữ liệu nào được biết đến
Bước 4 - Mô phỏng lỗi đĩa
Trong bước này, chúng ta sẽ mô phỏng lỗi đĩa nghiêm trọng (tức là một trong các ổ cứng HDD trong zpool ngừng hoạt động).Tạo một tệp trong poolz2 và đảm bảo chúng ta có thể truy cập tệp đó.
Mã:
# echo "Chỉ kiểm tra" > /poolz2/test.txt
# cat /poolz2/test.txt
Chỉ kiểm tra
Lỗi được mô phỏng bằng cách ghi dữ liệu ngẫu nhiên bằng lệnh dd vào /dev/sdb.
Mã:
# dd if=/dev/urandom of=/dev/sdb bs=1024 count=20480
# zpool scrub poolz2
# zpool status
pool: poolz2
state: ONLINE
status: Một hoặc nhiều thiết bị đã gặp phải lỗi không thể khôi phục. Đã có nỗ lực để sửa lỗi. Các ứng dụng không bị ảnh hưởng.
hành động: Xác định xem thiết bị có cần thay thế không và xóa lỗi
bằng cách sử dụng 'zpool clear' hoặc thay thế thiết bị bằng 'zpool replace'.
xem: http://zfsonlinux.org/msg/ZFS-8000-9P
quét: xóa sửa chữa 17K trong 0 giờ 0 phút với 0 lỗi vào Thứ Ba, ngày 8 tháng 12 lúc 22:37:49 năm 2015
cấu hình:
TÊN TRẠNG THÁI ĐỌC GHI CKSUM
poolz2 TRỰC TUYẾN 0 0 0
raidz2-0 TRỰC TUYẾN 0 0 0
sdb TRỰC TUYẾN 0 0 25
sdc TRỰC TUYẾN 0 0 0
sdd TRỰC TUYẾN 0 0 0
sde TRỰC TUYẾN 0 0 0
lỗi: Không có lỗi dữ liệu nào được biết đến
Mã:
# zpool replace poolz2 sdb sdf
# zpool status
pool: poolz2
state: ONLINE
scan: resilvered 49,5K trong 0 giờ 0 phút với 0 lỗi vào Thứ Ba, ngày 8 tháng 12 lúc 22:43:35 năm 2015
config:
NAME STATE READ WRITE CKSUM
poolz2 ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
sdf ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
lỗi: Không có lỗi dữ liệu nào được biết đến
Mã:
# cat /poolz2/test.txt
Chỉ thử nghiệm
Bước 5 - Tạo và cấu hình hệ thống tệp ZFS
Trong bước tiếp theo, chúng tôi sẽ tìm hiểu cách tạo và cấu hình hệ thống tệp ZFS.
Mã:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 105K 3.83G 26.1K /poolz2
Mã:
# zfs create poolz2/tank
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 132K 3,83G 26,1K /poolz2
poolz2/tank 25,4K 3,83G 25,4K /poolz2/tank
Mã:
# df -h | grep poolz2
poolz2 3,9G 128K 3,9G 1% /poolz2
poolz2/tank 3,9G 128K 3,9G 1% /poolz2/tank
Làm thế nào để tạo một điểm gắn kết tùy chỉnh cho hệ thống tệp ZFS? Sử dụng lệnh bên dưới:
Mã:
# zfs create poolz2/data -o mountpoint=/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /poolz2/tank
poolz2/data 3.9G 0 3.9G 0% /data
Mã:
# zfs set mountpoint=/tank poolz2/tank
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/data 3.9G 0 3.9G 0% /data
poolz2/tank 3.9G 0 3.9G 0% /tank
Mã:
# zfs unmount /data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /tank
Mã:
# zfs mount poolz2/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /tank
poolz2/data 3.9G 0 3.9G 0% /data
Mã:
# zfs destroy poolz2/data
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 152K 3.83G 26.1K /poolz2
poolz2/tank 25.4K 3.83G 25.4K /tank