在 Debian 9 中安裝 ZOL(ZFS for Linux)
由於Debian 並沒有將ZFS 納入官方套件, 所以只能從backports 取得ZFS 套件. 以下安裝適用於Debian 8(Jessie), Debian 9(Stretch)
Add jessie-backports repository (ZFS packages are in contrib area):
# echo "deb http://ftp.debian.org/debian jessie-backports main contrib" >> /etc/apt/sources.list.d/backports.list
# apt update
安裝Kernel headers:
# apt install linux-headers-$(uname -r)
安裝ZFS 套件:
# apt-get install -t jessie-backports zfs-dkms
載入 zfs module
# echo "zfs" > /etc/modules-load.d/zfs.conf
# modprobe zfs
測試 zfs 是否成功
# zpool status
Get Disk information
在Linux 中, 我們常用/dev/sda, /dev/sdb 來存取硬碟, 但是/dev/sda, /dev/sdb..的順序並不保證對應到主機板的sata port.
因此, 要對應主機板的sata port 中的硬碟裝置, 需要採用其他的辨認方式.
已經有神人寫出好用的shell script, 所以就抓下來使用吧.
#git clone https://github.com/louwrentius/showtools.git
#cd showtools
#./show disk -mp
----------------------------------------------------------
| Dev | Model | /dev/disk/by-path |
----------------------------------------------------------
| nvme0n1 | | pci-0000:07:00.0-nvme-1 |
| sda | TOSHIBA MD04ACA400 | pci-0000:00:17.0-ata-1 |
| sdb | TOSHIBA MD04ACA400 | pci-0000:00:17.0-ata-2 |
| sdc | TOSHIBA MD04ACA400 | pci-0000:00:17.0-ata-3 |
| sdd | TOSHIBA MD04ACA400 | pci-0000:00:17.0-ata-4 |
| sde | TOSHIBA MD04ACA400 | pci-0000:00:17.0-ata-5 |
| sdf | TOSHIBA MD04ACA400 | pci-0000:00:17.0-ata-6 |
| sdg | TOSHIBA MD04ACA400 | pci-0000:00:17.0-ata-7 |
| sdh | TOSHIBA MD04ACA400 | pci-0000:00:17.0-ata-8 |
----------------------------------------------------------
其中/dev/disk/by-path
就是對應到主機板上的硬碟裝置. 待會就要採用這個名稱來設定zpool.
建立 Zpool
我目前決定採用 “Raidz1 + Raidz1”, 設定方式如下:
#zpool create -f -o ashift=12 fspool raidz1 pci-0000:00:17.0-ata-1 pci-0000:00:17.0-ata-2 pci-0000:00:17.0-ata-3 pci-0000:00:17.0-ata-3 raidz1 pci-0000:00:17.0-ata-5 pci-0000:00:17.0-ata-6 pci-0000:00:17.0-ata-7 pci-0000:00:17.0-ata-8
#zpool status
pool: fspool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
fspool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
pci-0000:00:17.0-ata-1 ONLINE 0 0 0
pci-0000:00:17.0-ata-2 ONLINE 0 0 0
pci-0000:00:17.0-ata-3 ONLINE 0 0 0
pci-0000:00:17.0-ata-4 ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
pci-0000:00:17.0-ata-5 ONLINE 0 0 0
pci-0000:00:17.0-ata-6 ONLINE 0 0 0
pci-0000:00:17.0-ata-7 ONLINE 0 0 0
pci-0000:00:17.0-ata-8 ONLINE 0 0 0
errors: No known data errors
其中ashift=12
是為了Advance Format 的硬碟格式.
啟用ZFS 壓縮功能, 可以增加讀寫速度. 但是CPU 等級不能太差喔. 不然會更慢.
#zfs set compression=on fspool
啟用 ZED 服務
ZOL (ZFS on Linux) 有提供一個叫做 ZED
的服務, 可以隨時監控ZFS 的狀態, 並透過e-mail 來通知.
Install s-nail (as POSIX mailx incarnation)
我比較常用gmail, 但是linux 系統內建的mail 程式無法使用gmail 來寄信. 因此在啟用 ZED 之前, 先搞定e-mail 設定.
上網看了一些資料, 決定採用 s-nail
來取代內建的mail 指令. 安裝方式如下:
# apt-get install s-nail
在 /etc/s-nail.rc
中增加下列設定:
set v15-compat
set ssl-method=auto
set smtp-use-starttls
set smpt-auth=plain
set smtp=smtp.gmail.com:587
set user=@gmail.com
set password=
其中
為發信者的gmail,
為發信者登入gmail 的密碼.
由於 /etc/s-nail.rc
含有密碼在裡面,所以我將檔案屬性改成600
, 增加一點點安全性.
# chmod 600 /etc/s-nail.rc
設定完畢, 測試一下吧
# echo "test mail" | s-nail -s "test subject" @gmail.com
其中
為收信者的gmail. 若成功的話, 在收信者的gmail 中會收到來自
寄過來的測試信件.
若不想要在/etc/s-nail.rc
密碼存放裡面的話, 那就得用下列超級長的指令來寄信了.
#echo "test e-mail1" | s-nail -s "test mail" -S 'v15-compat' -S 'ssl-method=auto' -S 'smtp=smtp.gmail.com:587' -S 'smtp-use-starttls' -S 'smpt-auth=plain' -S 'user=@gmail.com' -S 'password=' @email_addr.com
Start the ZED service
Ok, s-nail
安裝完畢後, 我們就來繼續設定 ZED
服務吧.
在 /etc/zfs/zed.d/zed.rc
中, 修改下列 3 項設定, 其中code>xxx@gmail.com 為收信者的gmail :
ZED_EMAIL_ADDR="xxx@gmail.com"
ZED_EMAIL_PROG="s-nail"
ZED_NOTIFY_VERBOSE=1
啟動 zed 服務
# systemctl restart zfs-zed.service
如此, 以後當zfs 有事件發生時, 比如說: 完成 scrub 指令後, 你在gmail 中就可以收到通知了.