# ZFS操作說明

##### 限制zfs記憶體使用量

```
zfs status
zpool import —取得zpool資訊
zpool import zpool名稱 —回復zpool儲存池
zpool list —看有無zfs
zpool get freeing zpool名稱       --檢查已經釋放的zpool空間
```

```
cat /proc/spl/kstat/zfs/arcstats --檢視運行參數
```

```
/etc/modprobe.d/zfs.conf
```

```
options zfs zfs_arc_max=4299967296 --限制最高4GB（zfs建議至少4GB）
```

```
zfs set user quota@username=10gb  --使用者配額（none則移除配額，groupquota為群組配額）
zfs get quota  --列出配額
zfs set reservation=10G   --zpool保留空間（none移除保留）
zfs get reservation   --檢視保留空間
```

**補充：因為zpool destroy並不會同步馬上釋放，所以可以用這個指令先看已經釋放了多少**

```
zpool create pool名稱 /dev/sda(要加入的硬碟)  —新增zpool
zpool create zpool名稱 mirror /dev/sda /dev/sdb —建立鏡射zpool
zpool add zpool名稱 raidz ada2s1 ada2s2 ada2s3 ada2s4(加入的硬碟)
```

**補充：Raidz1 約等同 Raid5 允許一個HD掛**  
Raidz2 約等同 Raid6 允許兩個HD掛，但至少要4顆HD  
Raidz3 允許三個HD掛  
-o ashift=12 設定參數  
-m 指定路徑

```
zfs create -o compression=on zpool名稱 --建立zpool 並實行壓縮
zfs create -o compression=lz4 zpool名稱 --建立zpool 並實行lz4壓縮
zfs set compression=on tank(儲存池名稱) —設定現有zpool的壓縮
zfs set compression=lz4 tank(儲存池名稱)—設定現有的zpool lz4壓縮(建議)
```

```
zpool destroy pool名稱 —取消zpool(不會做確認)
```

**補充：若有快照需先刪除快照，否則需加 -r 強制刪除**

```
zpool offline zpool名稱 ada2s2 —硬碟下線
zpool replace zpool名稱 ada2s2(舊的) ada3s1(新的) —更換新硬碟
zpool detach zpool名稱 /dev/sda —卸載硬碟
zpool attach zpool名稱 /dev/sdb(原有) /dev/sda(新硬碟)   —加入新裝置(變Raid1)
zpool status —詳細狀態檢視
zpool clear -F zpool名稱  --修復zpool
zfs set compression=on zpool名稱 —對Zpool使用壓縮
zfs set compression=lz4 zpool名稱 —對Zpool使用lz4壓縮
zpool upgrade tank —更新zpool版本
zfs get compression —檢視壓縮狀況
zfs get compressratio—壓縮比(越高越好)
zfs rename (原名稱) （新名稱）
```

**補充：ubuntu 需要先umount該區後才能更名**

```
zfs diff   ---檔案比較
zfs snapshot zpool名稱@快照名稱   --建立快照（可用-r對子資料建立快照）
zfs destroy zpool名稱   --移除快照
zfs rename zpool原名稱 zpool新名稱 --更改快照名稱（可用-r對通常@後名稱做修改）
zfs rollback 快照名稱      --使用快照還原
zfs rollback 檔案路徑＠快照名稱     --還原特定檔案或資料
zfs send zpoolA@快照名稱｜zfs receive zpoolB(將zpoolA的快照內容轉至zpoolB，加-i作漸近式快照)
zfs send zpoolA@快照名稱 > zpoolB(將zpoolA的快照資料轉至zpoolB)
zfs list  --列出所有檔案（沒有快照，可用 -t all全部列出或-t snapshot 僅列出快照）
```

\#清除超級塊:（加-f強制執行）

```
zpool labelclear
```

\#取得儲存池資訊:

```
zpool get all zpool名稱
```

\#列出硬碟詳細列表:

```
zpool list -v
```

\#設定自動擴展容量:

```
zpool set autoexpand=on zpool名稱
```

\#增加L2ARC讀取快取:（使用remove做移除)

```
zpool add -f zpool名稱 cache /dev/disk/by-id/
```

\#增加ZIL寫入快取:

```
zpool add zpool名稱 log /dev/disk/by-id/
```

\#重新更新zpool.cache File

```
zpool set cachefile=/etc/zfs/zpool.cache zpool名稱
```

＃查看 zpool 使用狀況

```
zpool iostat -v
```

\#對 zpool 加上 Metadata 的 Special Device 加速讀取效能的方式

```
zpool add zpool名稱 special mirror /dev/nvme0n1 /dev/nvme1n1
```

· 說明：Metadata 是指 ZFS 儲存檔案系統資訊的資料, 由於讀取和寫入頻率較高，因此對系統效能有較大的影響。所以在一般 HDD 的 ZFS 加上 SSD 當 Special Device 就可以提高整體存取效能。不過需要注意的是 Special Device 如果損壞, 整個 zpool 就會毀損, 因此會將 special device 用兩個實體的 SSD 進行 mirror 保護來確保安全。另外 spool 設上 special device 是無法復原回沒有設定的狀態, 因此設定前要審慎。  
· 語法 : zpool add &lt;pool&gt; special mirror &lt;device1&gt; &lt;device2&gt;  
· Exp. 對 pbs-zpool 加上 /dev/nvme0n1 與 /dev/nvme1n1 當 special device

```
zpool iostat -v zpool名稱  —可以檢視實際寫入狀況
zfs scrub zpool名稱   —錯誤檢察
```

備註：如果要中止請加-s

  
容量擴充  
逐步將新的大容量硬碟換上做同步後執行

```
zpool online -e pool-00 adaX adaX 即可
```

zfs新增使用swap

```
zfs create -V swap空間 zfs名稱/swap
zfs set checksum=off zfs名稱/swap
zfs set 自定義名稱:swap=on zfs名稱/swap
ll /dev/zvol/zfs名稱/ #檢查是否設定完成
mkswap -f /dev/zvol/zfs名稱/swap
swapon /dev/zvol/zfs名稱/swap
vim /etc/fstab 
/dev/zvol/zfs名稱/swap none swap sw 0 0
```

限制zfs記憶體使用量

```
nano /etc/modprobe.d/zfs.conf
     4GB:
                options zfs zfs_arc_max=4294967296
     6GB:
                options zfs zfs_arc_max=6442450944
```

```
update-initramfs -u -k all
```