在 Debian 9(Stretch) 中安裝 ZOL(ZFS for Linux)

在 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.com 為發信者的gmail, 為發信者登入gmail 的密碼.

由於 /etc/s-nail.rc 含有密碼在裡面,所以我將檔案屬性改成600, 增加一點點安全性.

# chmod 600 /etc/s-nail.rc

設定完畢, 測試一下吧

# echo "test mail" | s-nail -s "test subject" @gmail.com

其中@gmail.com 為收信者的gmail. 若成功的話, 在收信者的gmail 中會收到來自@gmail.com寄過來的測試信件.

若不想要在/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 中就可以收到通知了.

This entry was posted in Linux, storage and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *