Hướng dẫn cài đặt ZFS trên CentOS 7

Tác giả Network Engineer, T.Bảy 29, 2019, 05:11:28 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Hướng dẫn cài đặt ZFS trên CentOS 7


1. ZFS là gì?

ZFS (Zettabyte File System) là một file system nâng cao. Được thiết kế để trở thành file system mới cho hệ điều hành OpenSolaris. Sau được chuyển qua FreeBSD. Và tiếp là chuyển qua Linux.

Thế nhưng ban đầu ZFS được ban hành dưới giấy phép "Common Development and Distribution License", không tương thích với giấy phép GPL, nên không thể thêm vào Linux Kernel được. Để giải quyết vấn đề này thì các Linux distro cung cấp phương pháp cài ZFS lên Linux.

Khi OpenSolaris chuyển sang close-source thì ZFS cũng tương tự. Các lập trình viên ZFS không thích sự kiện này nên quyết định tách ra làm dự án OpenZFS opensource cho cộng đồng. Thế nhưng vì một số rắc rối xung quanh chuyện giấy phép cấp phát nên OpenZFS vẫn không thể thêm vào Linux Kernel được mà vẫn phải dùng phương pháp để cài thêm vào Linux. Vậy nên ở bài này khi nói cài ZFS trên CentOS 7, tức là cài OpenZFS trên CentOS 7.


2. ZFS có một số tính năng như:

  • Khả năng mở rộng dễ dàng với dung lượng lưu trữ cực kì lớn.
  • Toàn vẹn dữ liệu và sửa chữa tự động.
  • Snapshots.
  • RaidZ.
  • Nén dữ liệu hiệu quả.

Tìm hiểu một số khái niệm và tính năng của ZFS

3. VDEV

Virtual Device, về cơ bản nó là một thiết bị đại diện cho một hoặc nhiều thiết bị vật lý.

Ví dụ ở trong raid mềm thì /dev/md0 đại diện cho raid-0 của 2 đĩa. Thì ở đây, /dev/md0 chính là vdev, và sẽ có tên cách biểu diễn theo từng loại dưới đây.

Có 7 loại vdev trong ZFS:

  • disk (mặc định): đĩa vật lý trong hệ thống.
  • file: đường dẫn tuyệt đối đến file/images.
  • mirror: cái này giống như raid1 trong raid mềm vậy.
  • raidz1/2/3: tương tự các raid mềm có thêm ổ đĩa parity. Như raid 5, raid 6...
  • spare: đĩa cứng được đánh dấu là "hot spare" trong ZFS raid mềm.
  • cache
  • log

4. Pooled Storage

Không giống như những file system khác. ZFS gộp chung các tính năng của file system và quản lý volume.

Các file system khác chỉ có thể quản lý trên một partition. Còn đối với ZFS thì nó có thể trải dài trên một dãy các disk/partition, tạo thành một pool. Và bạn có thể mở rộng pool bằng cách thêm các disk/partition vào pool.

Nhưng lưu ý là đã thêm thì không xóa được. Trừ khi bạn thêm vào là vdev dạng spare như giới thiệu ở mục vdev trên kia.

5. Copy-on-write

Đây là một tính năng thú vị của ZFS. Ở các file system khác thì khi dữ liệu bị ghi đè, tiến trình sẽ ghi ngay trên chính block dữ liệu gốc. Lỡ có sự cố xảy ra thì dữ liệu gốc lẫn dữ liệu mới ghi đều mất.

Còn đối với ZFS thì lại khác, ghi chỉnh sửa dữ liệu thì ZFS sẽ sao chép block dữ liệu đó ra một bản, rồi tiến hành thay đổi trên bản copy đó. Sau khi thay đổi dữ liệu hoàn thành thì trỏ metadata về bản copy đã được chỉnh sửa kia. Sau đó giải phóng bản cũ. Điều này giúp cho khi có sự cố xảy ra thì bản gốc vẫn còn nguyên vẹn. Cũng có nghĩa là hệ thống không cần chạy fsck sau khi hệ thống bị crash.

Thế nhưng phát sinh vấn đề là dữ liệu ghi trên đĩa sẽ bị phân mảnh. Tất nhiên ZFS có một số giải pháp để làm giảm sự phân mảnh đó, vì bài viết chỉ giới thiệu các khái niệm cơ bản nên không đi sâu phần này.

6. Dataset

Đây là thuật ngữ dùng chung cho ZFS file system, snapshots, clone, volume. Mỗi dataset là một cái tên duy nhất.
Snapshots

Nhờ có Copy-on-write mà có Snapshots. Snapshots sẽ theo dõi các thay đổi của hệ thống. Snapshots chứa bản gốc của file system và một bản live file system chứa những thay đổi của hệ thống từ lúc snapshots được thực hiện. Dữ liệu mới sẽ được ghi vào live file system, không làm tốn thêm dung lượng của hệ thống. Khi một file bị xóa, thì file tham chiếu trên snapshots cũng bị xóa.

Snapshots có thể được mount vào một điểm nào đó để khôi phục về phiên bản trước đó của một file nào đó.

Hoặc có thể rollback live file system về phiên bản trước đó.

7. Toàn vẹn dữ liệu và sửa chữa tự động

Bất cứ khi nào dữ liệu mới được ghi vào ZFS, nó sẽ tạo một checksum cho dữ liệu đó. Khi dữ liệu đó được đọc, checksum được xác minh. Nếu checksum không khớp, thì ZFS biết rằng đã có lỗi. ZFS sẽ tự động cố gắng sửa lỗi.
RAID-Z

ZFS có hỗ trợ Raidz1 có tính năng tương tự Raid-5 và Raidz2 tương tự Raid-6. Đồng thời chỉnh sửa một số hạn chế của các loại raid này.

8. Khả năng lưu trữ và mở rộng lớn

Các file system trước đó được thiết kế trên nền 64-bit. Còn ZFS được thiết kế trên nền 128-bit. Đây là một con số cực kì lớn.
Hướng dẫn cài đặt

Trong bài viết này chỉ tập trung hướng dẫn cài đặt và thao tác trên CentOS 7.

Mã nguồn [Chọn]
# yum install https://download.zfsonlinux.org/epel/zfs-release.<dist>.noarch.rpm
# gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux

Kết quả như bên dưới là chuẩn:

Mã nguồn [Chọn]
pub 2048R/F14AB620 2013-03-21 ZFS on Linux <[email protected]>
Key fingerprint = C93A FFFD 9F3F 7B03 C310 CEB6 A9D5 A1C0 F14A B620
sub 2048R/99685629 2013-03-21

Tiếp theo ta sẽ có 2 tùy chọn để cài ZFS theo gói kABI-tracking kmod hoặc là DKMS. Ta sẽ cài ZFS theo gói kABI-tracking kmod để tránh phải build lại ZFS mỗi khi nâng cấp kernel. Còn gói DKMS thì dành cho những người dùng muốn áp dụng các tùy chỉnh cục bộ cho ZFS trên Linux.

Mặc định thì bản phát hành ZFS được cấu hình để cài đặt theo gói DKMS, ta cần chuyển lại cấu hình qua kABI-tracking kmod.

Mở file /etc/yum.repos.d/zfs.repo ra:

Mã nguồn [Chọn]
# vi /etc/yum.repos.d/zfs.repo
Mã nguồn [Chọn]
[zfs]

name=ZFS on Linux for EL7 - dkms

baseurl=https://download.zfsonlinux.org/epel/7.6/$basearch/

enabled=0

Chỗ này sửa từ 1 thành 0.

Mã nguồn [Chọn]
metadata_expire=7d

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux

[zfs-kmod]

name=ZFS on Linux for EL7 - kmod

baseurl=https://download.zfsonlinux.org/epel/7.6/kmod/$basearch/

enabled=1

Chỗ này sửa từ 0 thành 1.

Mã nguồn [Chọn]
metadata_expire=7d

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux

Cài đặt:

Mã nguồn [Chọn]
# yum install zfs
Sau khi cài xong thì reboot lại hệ thống.

Kiểm tra xem module của ZFS đã được load chưa:

Mã nguồn [Chọn]
# lsmod | grep zfs
Kết quả:

Mã nguồn [Chọn]
zfs 2794866 3

zunicode 331170 1 zfs

zavl 15236 1 zfs

zcommon 55411 1 zfs

znvpair 89086 2 zfs,zcommon

spl 92029 3 zfs,zcommon,znvpair

Nếu không có gì thì cần phải load thủ công các module của ZFS:

Mã nguồn [Chọn]
# modprobe zfs
Một số thao tác cơ bản

Cần chuẩn bị một số đĩa cứng để thao tác.

Ở đây Kỹ Thuật có 2 đĩa cứng là: /dev/sda và /dev/sdb, mỗi đĩa 20GB.

Ta sẽ tạo thêm các partition từ các đĩa cứng này, càng nhiều để làm thực hành cho dễ.

Mã nguồn [Chọn]
#parted -s /dev/sda mklabel gpt

#parted -s /dev/sda unit mib mkpart primary 0% 33%

#parted -s /dev/sda unit mib mkpart primary 33% 66%

#parted -s /dev/sda unit mib mkpart primary 66% 100%

#parted -s /dev/sdb mklabel gpt

#parted -s /dev/sdb unit mib mkpart primary 0% 33%

#parted -s /dev/sdb unit mib mkpart primary 33% 66%

#parted -s /dev/sdb unit mib mkpart primary 66% 100%

Gõ:

Mã nguồn [Chọn]
#parted -l
để xem danh sách các partition vừa tạo, giờ ta sẽ được: /dev/sda1, /dev/sda2, /dev/sda3, /dev/sdb1, /dev/sdb2, /dev/sdb3, mỗi partition khoảng 6.6 GB.

Đây là do Kỹ Thuật chỉ có 2 đĩa cứng nên mới tạo nhiều partition để cho dễ thực hành. Còn nếu mọi người có nhiều đĩa cứng thì không cần làm thế này.

*** OpenZFS có 2 tiện ích là: zpool và zfs. Zpool sẽ đảm nhận nhiệm vụ tạo và quản lý các ZFS pool. Còn Zfs sẽ đảm nhận nhiệm vụ tạo và quản lý các Dataset.
Tạo và xóa một pool

Tạo một pool:

Mã nguồn [Chọn]
# zpool create <option> <pool name. <drive 1> <drive 2> .... <drive n>
Ví dụ:

Mã nguồn [Chọn]
# zpool create pool01 /dev/sda1 /dev/sda2 /dev/sdb1 /dev/sdb2
Ở trường hợp này, vdev chính là các partition.

Chạy lệnh dưới để xem status của các pool hiện có:

Mã nguồn [Chọn]
# zpool status
Mã nguồn [Chọn]
pool: pool01

state: ONLINE

scan: none requested

config:

NAME STATE READ WRITE CKSUM

pool01 ONLINE 0 0 0

sda1 ONLINE 0 0 0

sda2 ONLINE 0 0 0

sdb1 ONLINE 0 0 0

sdb2 ONLINE 0 0 0

errors: No known data errors

Hoặc là:

Mã nguồn [Chọn]
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT

pool01 26.2G 110K 26.2G - 0% 0% 1.00x ONLINE -

Xác minh xem pool có tạo thành công:

# df -h

/dev/vda1 80G 1.6G 79G 2% /

devtmpfs 1.9G 0 1.9G 0% /dev

tmpfs 1.9G 0 1.9G 0% /dev/shm

tmpfs 1.9G 17M 1.9G 1% /run

tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

tmpfs 379M 0 379M 0% /run/user/0

pool01 26G 0 26G 0% /pool01

Ta thấy là pool01 được tạo có size khoảng 26GB được mount vào /pool01.

Size 26GB tương đương với dung lượng của cả 4 partition cộng lại. Ta có thể xem như pool này là một kiểu giống như raid mềm Raid-0 vậy.

Giờ hủy pool vừa tạo đi:

Mã nguồn [Chọn]
# zpool destroy <pool name>
Ví dụ:

Mã nguồn [Chọn]
# zpool destroy pool01
Mirrored pool

Tạo mirror:

# zpool create <option> <pool name> mirror <drive 1> <drive 2>... <drive n>

Ví dụ:

#zpool create pool02 mirror /dev/sda1 /dev/sdb1

Ở trường hợp này, vdev chính là mirror.

#zpool status

pool: pool02

state: ONLINE

scan: none requested

config:

NAME STATE READ WRITE CKSUM

pool02 ONLINE 0 0 0

mirror-0 ONLINE 0 0 0

sda1 ONLINE 0 0 0

sdb1 ONLINE 0 0 0

errors: No known data errors

Xác minh xem mirror có tạo thành công:

#df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 80G 1.7G 79G 3% /

devtmpfs 1.9G 0 1.9G 0% /dev

tmpfs 1.9G 0 1.9G 0% /dev/shm

tmpfs 1.9G 17M 1.9G 1% /run

tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

tmpfs 379M 0 379M 0% /run/user/0

pool02 6.4G 0 6.4G 0% /pool02

Ta thấy pool02 được tạo với 6.4GB vào được mount vào /pool02.

Size 6.4GB tương đương với dung lượng của một partition nằm trong mirror. Ta có thể xem mirror pool như là một raid mềm Raid-1 vậy.

Hủy pool vừa tạo:

#zpool destroy pool02

Giờ nếu ta lồng 2 mirror vào nhau thì sao:

#zpool create pool03 mirror /dev/sda1 /dev/sda3 mirror /dev/sda2 /dev/sdb1

#zpool status

pool: pool03

state: ONLINE

scan: none requested

config:

NAME STATE READ WRITE CKSUM

pool03 ONLINE 0 0 0

mirror-0 ONLINE 0 0 0

sda1 ONLINE 0 0 0

sda3 ONLINE 0 0 0

mirror-1 ONLINE 0 0 0

sda2 ONLINE 0 0 0

sdb1 ONLINE 0 0 0

errors: No known data errors

#df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 80G 1.7G 79G 3% /

devtmpfs 1.9G 0 1.9G 0% /dev

tmpfs 1.9G 0 1.9G 0% /dev/shm

tmpfs 1.9G 17M 1.9G 1% /run

tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

tmpfs 379M 0 379M 0% /run/user/0

pool03 13G 0 13G 0% /pool03

Ta thấy pool03 được tạo với 13GB, mount vào /pool03.

Size 13GB tương đương với tổng dung lượng 2 partition. 2 mirror lồng nhau thế này tương đương với raid mềm Raid-1+0.

Hủy pool vừa tạo:

zpool destroy pool03
Raidz

Tạo một Raidz pool:

zpool create <option> <pool name> raidz <drive 1> <drive 2>... <drive n>

Ví dụ:

#zpool create pool04 raidz /dev/sda1 /dev/sdb2 /dev/sda3

#zpool status

pool: pool04

state: ONLINE

scan: none requested

config:

NAME STATE READ WRITE CKSUM

pool04 ONLINE 0 0 0

raidz1-0 ONLINE 0 0 0

sda1 ONLINE 0 0 0

sdb2 ONLINE 0 0 0

sda3 ONLINE 0 0 0

errors: No known data errors
Quản lý thiết bị với ZFS pool

Khi một pool được tạo thì ta có thể thêm hoặc xóa vdev spare, cache ra khỏi pool. Thêm hoặc tách thiết bị từ mirrored pool hoặc là thay thiết bị. Nhưng những pool không có dự phòng hoặc raidz pool thì không thể xóa thiết bị ra khỏi pool được.

Giờ ta tạo một pool mới với 2 dev là sda1 và sdb1. Sau đó thêm sda2 vào pool.

#zpool create pool05 /dev/sda1 /dev/sdb1

#zpool status

Chắc chắn là sẽ thấy pool05 được tạo với 2 dev là sda1 và sdb1 rồi.

Thêm sda2 vào pool:

#zpool add pool05 sda2

#zpool status

pool: pool05

state: ONLINE

scan: none requested

config:

NAME STATE READ WRITE CKSUM

pool05 ONLINE 0 0 0

sda1 ONLINE 0 0 0

sdb1 ONLINE 0 0 0

sda2 ONLINE 0 0 0

errors: No known data errors

Như đã nói từ trước, ta không thể xóa bỏ một dev ra khỏi pool không dự phòng.

#zpool remove pool05 /dev/sda2

cannot remove /dev/sda2: only inactive hot spares, cache, or log devices can be removed

Chúng ta có thể thêm disk và tách disk ra khỏi mirrored pool.

#zpool attach <options> <pool name> <device> <new device>

#zpool detach <pool name> <device>

Khi dev bị lỗi, ta có thể thay thế nó:

zpool replace <options> <pool name> <device> <new device>

Tạo một mirror pool với 2 dev là sda2 và sdb3:

#zpool create pool06 mirror /dev/sda2 /dev/sdb3

Giờ ta giả sử sdb3 bị lỗi:

#dd if=/dev/zero of=/dev/sdb3

dd: error writing '/dev/sdb3': No space left on device

7+0 records in

6+0 records out

7300186112 bytes (7.3 GB) copied, 21.7305 s, 336 MB/s

Ta sẽ dùng "scrub" để phát hiện sự cố này.

#zpool scrub pool06

#zpool status

pool: pool06

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:   Đăng nhập để xem liên kết

scan: scrub repaired 0B in 0h0m with 0 errors on Mon Apr 22 15:24:00 2019

config:

NAME STATE READ WRITE CKSUM

pool06 DEGRADED 0 0 0

mirror-0 DEGRADED 0 0 0

sda2 ONLINE 0 0 0

sdb3 UNAVAIL 0 0 0 corrupted data

errors: No known data errors

Giờ ta sẽ thay sdb3 với sda3:

#zpool replace pool06 /dev/sdb3 /dev/sda3

#zpool status

pool: pool06

state: ONLINE

scan: resilvered 88.5K in 0h0m with 0 errors on Mon Apr 22 15:26:54 2019

config:

NAME STATE READ WRITE CKSUM

pool06 ONLINE 0 0 0

mirror-0 ONLINE 0 0 0

sda2 ONLINE 0 0 0

sda3 ONLINE 0 0 0

errors: No known data errors
Tiện ích ZFS

Giờ chúng ta sẽ chuyển qua làm việc với tiện ích zfs. Tạo, xóa dataset, file system compression, quotas, snapshots.
Tạo và xóa filesystem:

#zfs create <filesystem>

Ví dụ:

#zfs create pool06/fs01

#zfs create pool06/fs02

#df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 80G 1.7G 79G 3% /

devtmpfs 1.9G 0 1.9G 0% /dev

tmpfs 1.9G 0 1.9G 0% /dev/shm

tmpfs 1.9G 17M 1.9G 1% /run

tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

tmpfs 379M 0 379M 0% /run/user/0

pool06 6.4G 128K 6.4G 1% /pool06

pool06/fs01 6.4G 128K 6.4G 1% /pool06/fs01

pool06/fs02 6.4G 128K 6.4G 1% /pool06/fs02

Với ouput ở trên, ta thấy các filesystem mới tạo đã được mount sẵn vào trong các vị trí tương quan với pool.

Ngoài ra ta có thể dùng option -o để chỉ định mountpoint, compression, quota,...

Xem danh sách các zfs file system hiện có:

#zfs list

NAME USED AVAIL REFER MOUNTPOINT

pool06 148K 6.36G 27K /pool06

pool06/fs01 24K 6.36G 24K /pool06/fs01

pool06/fs02 24K 6.36G 24K /pool06/fs02

Để xóa filesystem:

#zfs destroy <filesystem>

Ví dụ ta muốn chỉ định mountpoint khác:

#mkdir /fs03

#zfs create -o mountpoint=/fs03 pool06/fs03

#df -h

[root@dovps01 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 80G 1.7G 79G 3% /

devtmpfs 1.9G 0 1.9G 0% /dev

tmpfs 1.9G 0 1.9G 0% /dev/shm

tmpfs 1.9G 17M 1.9G 1% /run

tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

tmpfs 379M 0 379M 0% /run/user/0

pool06 6.4G 0 6.4G 0% /pool06

pool06/fs01 6.4G 0 6.4G 0% /pool06/fs01

pool06/fs02 6.4G 0 6.4G 0% /pool06/fs02

pool06/fs03 6.4G 0 6.4G 0% /fs03
Compression

Để bật tính năng nén trong zfs filesystem thì ta cần bật nén lên:

#zfs set <compression=value> <filesystem|volume|snapshot>

Hoặc bật sẵn ngay lúc tạo filesystem:

#zfs create -o compression=<algorithm> <filesystem|volume|snapshot>

Khi setup xong thì nén và giải nén trong filesystem sẽ hoạt động một cách trong suốt với người dùng.

Ta sẽ bật nén cho zfs filesystem fs01 đã tạo lúc nãy với thuật toán lz4:

#zfs set compression=lz4 pool06/fs01

Để kiểm tra thì thử copy một file text nặng 5.4MB vào filesystem này:

#
du -sh ./*
5.4M ./1.doc

#cp 1.doc /pool06/fs01/

#du -sh /pool06/fs01/1.doc

1.7M /pool06/fs01/1.doc

Ta thấy là file text này đã được nén xuống còn 1.7MB so với 5.4MB ban đầu.

Kiểm tra tỉ lệ nén:

#zfs get compressratio pool06/fs01

NAME PROPERTY VALUE SOURCE

pool06/fs01 compressratio 3.16x -
Quota

Như ta thấy lúc nãy khi tạo fs01, fs02, fs03 thì dung lượng hiện có của cả 3 filesystem này đều nhận là 6.4GB của pool06.

Giờ nhu cầu đặt ra là muốn cung cấp một giới hạn cho các filesystem này, mỗi filesystem chỉ được dùng trong khoảng bao nhiêu đó thôi.

Ta sẽ dùng quota:

#zfs set quota=<value> <filesystem|volume|snapshot>

Ví dụ:

#zfs set quota=200MB pool06/fs01

#zfs set quota=1024MB pool06/fs02

#zfs set quota=500MB pool06/fs03

#df -h

Filesystem Size Used Avail Use% Mounted on

/dev/vda1 80G 1.7G 79G 3% /

devtmpfs 1.9G 0 1.9G 0% /dev

tmpfs 1.9G 0 1.9G 0% /dev/shm

tmpfs 1.9G 17M 1.9G 1% /run

tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup

tmpfs 379M 0 379M 0% /run/user/0

pool06 6.4G 128K 6.4G 1% /pool06

pool06/fs01 200M 1.8M 199M 1% /pool06/fs01

pool06/fs02 1.0G 128K 1.0G 1% /pool06/fs02

pool06/fs03 500M 128K 500M 1% /fs03

Vậy là đã set giới hạn riêng cho từng filesystem.
Snapshots

Cấu trúc:

zfs snapshot <filesystem|volume@<snap>>

Giờ ta sẽ thử tạo một số file và folder bên trong filesystem fs01 và tạo snapshot cho filesystem này.

#cd /pool06/fs01

#mkdir dir1 dir2 dir3

#echo "hello world" > test.txt

#ls -la

total 1736

-rwxr-xr-x. 1 root root 5606702 Apr 22 15:48 1.doc

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir1

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir2

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir3

-rw-r--r--. 1 root root 12 Apr 22 15:59 test.txt

Tạo snapshot cho filesystem fs01:

Cấu trúc:

#zfs snapshot pool06/fs01@firstsnap

#zfs list -t snapshot

NAME USED AVAIL REFER MOUNTPOINT

pool06/fs01@firstsnap 0B - 1.72M -

Chỉnh sửa file test.txt:

#echo "line 2" >> test.txt; cat test.txt

hello world

line 2

Xóa file test.txt đi:

#rm -fr test.txt

Trích xuất file test.txt từ snapshot đã tạo trước đó:

#cd .zfs

#cd snapshot/firstsnap

#ls -la

drwxr-xr-x. 5 root root 7 Apr 22 15:59 .

drwxrwxrwx. 2 root root 2 Apr 22 16:01 ..

-rwxr-xr-x. 1 root root 5606702 Apr 22 15:48 1.doc

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir1

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir2

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir3

-rw-r--r--. 1 root root 12 Apr 22 15:59 test.txt

#cp test.txt /pool06/fs01/

#cd /pool06/fs01

#ls -la

total 1736

-rwxr-xr-x. 1 root root 5606702 Apr 22 15:48 1.doc

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir1

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir2

drwxr-xr-x. 2 root root 2 Apr 22 15:58 dir3

-rw-r--r--. 1 root root 12 Apr 22 16:08 test.txt

#cat test.txt

hello world

Vậy là đã khôi phục được file test.txt về trạng thái lúc ta tạo snapshot, chứ không thể khôi phục về lại thời điểm mà ta chỉnh sửa thêm sau khi đã tạo snapshot.

Để xóa snapshot thì thực hiện theo cấu trúc:
#zfs destroy <filesystem|volume@<snap>>

Ví dụ:

#zfs destroy pool06/fs01@firstsnap

#zfs list -t snapshot

no datasets available

Như vậy là đã xong bài viết giới thiệu và hướng dẫn cài đặt cũng như một số thao tác cơ bản để làm quen với ZFS trên CentOS 7.

Mong mọi người có thể hiểu và thực hành theo thành công.

Nếu muốn các kiến thức nâng cao hơn, mọi người có thể đọc các link tham khảo ở phần dưới.