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
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