ZFS

https://itslinuxfoss.com/install-zfs-filesystem-on-ubuntu-22-04/

https://qiita.com/pitekusu/items/d5e9b0e4f5c06f8f76e3

https://chibiegg.gitbooks.io/how-to-zfs/content/install.html

ボリュームマネージャに相当するコマンド -> zpool
ファイルシステムに相当するコマンド -> zfs


単なるストライピング (RAID0相当)
ミラーリング mirror (RAID1相当)
シングルパリティ raidz (RAID5相当)
ダブルパリティ raidz2 (RAID6相当)
トリプルパリティ raidz3

 

特殊なデバイス:
ZIL (ZFS Intent Log)
L2ARC (Adjustable Replacement Cache)
ホットスペア


前提
OS: ubuntu22.04
ハードディスク:8GB 5本追加


-- 1. インストール

sudo su -

apt update

apt install zfsutils-linux -y

zfs --version


-- 2. ZFSプール作成


fdisk -l

-- ストライピング
zpool create tank /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg

-- RAID-Z
zpool create tank raidz /dev/sdc /dev/sdd /dev/sde

-- RAID-Z2
zpool create tank raidz2 /dev/sdc /dev/sdd /dev/sde /dev/sdf

-- RAID-Z3
zpool create tank raidz3 /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg

-- ミラーリングx2 + ホットスペア
zpool create tank \
  mirror /dev/sdc /dev/sdd \
  mirror /dev/sde /dev/sdf \
  spare /dev/sdg 

-- ミラーリング + ZIL
zpool create tank \
  mirror /dev/sdc /dev/sdd \
  log mirror /dev/sde /dev/sdf 

-- ミラーリング + L2ARC
zpool create tank \
  mirror /dev/sdc /dev/sdd \
  cache  /dev/sde /dev/sdf 

 

df -Ph
zpool status
zpool status -x
zpool list
zfs list -t all -o space


-- 3. ZFSプール削除

zpool list
zpool destroy tank
zpool list


-- 4. データセットの作成

zfs list
zfs create tank/dataset0
zfs create tank/dataset1
zfs list

df -Ph

-- 5. プロパティ

zfs get all tank
zfs get all tank/dataset0

-- 6. クォータ

zfs get quota,refquota,reservation,refreservation tank/dataset0
zfs get quota,refquota,reservation,refreservation tank/dataset1
df -Ph

zfs set quota=1.5G tank/dataset0
zfs set reservation=800M tank/dataset0

zfs set quota=1.5G tank/dataset1
zfs set reservation=800M tank/dataset1

→ クォータを設定するとdfのSizeがquotaの値になる。残りのデータセットのSizeもクォータの値だけ小さくなる

ls -lha /tank/dataset0
dd if=/dev/zero of=/tank/dataset0/bigfile01 count=1024 bs=1M
ls -lha /tank/dataset0

zfs list -t all -o space

dd if=/dev/zero of=/tank/dataset0/bigfile02 count=1024 bs=1M

→ dd: error writing '/tank/dataset0/bigfile02': Disk quota exceeded


-- 7. 圧縮

zfs get compression tank/dataset0
zfs set compression=on tank/dataset0
zfs get compressratio tank/dataset0

df -Ph

rm -rf /tank/dataset0/bigfile01
rm -rf /tank/dataset0/bigfile02
df -Ph
dd if=/dev/zero of=/tank/dataset0/bigfile01 count=1024 bs=1M
dd if=/dev/zero of=/tank/dataset0/bigfile02 count=1024 bs=1M

zpool list
zfs list -t all -o space
ls -lha /tank/dataset0

→ 圧縮を有効化するとクォータが1.5Gのデータセットに2.0Gのファイルを配置できる。


-- 8. 重複排除
→ 使用禁止

zfs get dedup tank/dataset1
zfs set dedup=on tank/dataset1
zfs get dedup tank/dataset1

dd if=/dev/zero of=/tank/dataset1/bigfile01 count=1024 bs=1M
ls -lha /tank/dataset1
zpool list
zfs list -t all -o space
ls -lha /tank/dataset1

 

-- 9. ZFSスナップショット


zfs snapshot tank/dataset0@snap01
zfs list -t snapshot
zfs list -t all -o space
zpool list

rm -rf /tank/dataset0/bigfile01

dd if=/dev/zero of=/tank/dataset0/smallfile01 count=128 bs=1M

zfs snapshot tank/dataset0@snap02

zfs list -t snapshot
zfs list -t all -o space
zpool list

zfs diff tank/dataset0@snap01 tank/dataset0@snap02

zfs rollback -r tank/dataset0@snap01

ls -lha /tank/dataset0

zfs list -t snapshot
zfs destroy tank/dataset0@snap01
zfs list -t snapshot

zfs list -t all
zfs list -t all -o space


-- 10. クローンの作成

zfs snapshot tank/dataset0@snap03

zfs clone tank/dataset0@snap03 tank/clone

zfs list
zfs list -t all -o space


-- 11. バックアップリストア

zfs list -t snapshot
zfs snapshot tank/dataset1@snap04
zfs list -t snapshot

zfs send tank/dataset1@snap04 > bkup.bin

zpool list
zfs destroy -R tank/dataset0
zpool list

zfs recv tank/dataset0 < bkup.bin
zpool list

zfs list -t snapshot
zfs list

df -Ph
ls -lhR /tank

 


-- 12. データの整合性のチェック
zpool status
zpool scrub tank
zpool status

 


-- 13. イベント確認

zpool events
zpool events -v

 

-- 14. プールの移動

zpool export tank
zpool list

zpool import -d /dev/
zpool import -d /dev/ tank
zpool list

-- 15. ディスク交換

zpool list
zpool destroy tank
zpool list

zpool create tank \
  mirror /dev/sdc /dev/sdd \
  log mirror /dev/sde /dev/sdf 

zpool list


zpool status
zpool replace tank sdf sdg
zpool status


zpool attach tank sdg sdf
zpool status
zpool detach tank sdg
zpool status