ZFS
- ZFS 2.2 支持 Overlay
Tips
- zfsonlinuxLinkzfsonlinux.orgZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- zfsonlinux/zfsGitHubzfsonlinux/zfsZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- open-zfsLinkopen-zfs.orgZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- Archlinux ZFSLinkwiki.archlinux.org/index.php/ZFSZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- Archlinux ZFS/Virtual disksLinkwiki.archlinux.org/index.php/ZFS/Virtual_disksZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- ZFS AdministrationLinkpthree.org/2012/04/17/install-zfs-on-debian-gnulinuxZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- ZFS Tutorial - 2016Linkbuildwithbsd.org/zfs/zfs_tutorial_part_1.htmlZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- ZFS ResourcesLinkserverfault.com/questions/355708ZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- Oracle® Solaris Administration: ZFS File Systems - 2012Linkdocs.oracle.com/cd/E23824_01/pdf/821-1448.pdfZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFSHTML
- Encryption
- 数据完整性
- 数据完整性是 ZFS 的主要特性
- 256 位的校验和位于元数据中,与数据相隔离
- Copy on Write
- 数据快照
- Pooled Data Storage
- ZFS 会将存储设备的可用空间作为一个资源池, zpool
- 会用于优化性能和冗余
- RAIDZ
- RAIDZ1 - RAID-5
- RAIDZ2 - RAID-6
- RAIDZ3 用的相对较少, 多一个冗余
- SSD 混合存储池
- 容量
- ZFS 是 128 位的文件系统, 可存储 256 ZB
- 数据清洗
- ZFS 可对存储池里的数据进行完整性校验,可修改其中的数据错误.
- 可使用 ZSF 指令来管理文件系统
- 数据去重
- 加密
- ARC - Adaptive Replacement Cache.
- faqGitHubzfsonlinux/zfs/wiki/faq
- 选择创建 pool 的名字
- 开发,测试 /dev/hdX,/dev/sdX
- 小于 10 硬盘 /dev/disk/by-id
- 大于 10 硬盘 /dev/disk/by-path
- 大于 10 最好 /dev/disk/by-vdev
- 选择创建 pool 的名字
- FAQ
- zpool.8
- zfs.8
- OpenZFS novel algorithms: snapshots, space allocation, RAID-Z - Matt Ahrens
- www.zfsbuild.com/2010/05/26/zfs-raid-levels
- ZFS Raidz Performance, Capacity and Integrity
- forum.proxmox.com/threads/zfs-with-ssds-am-i-asking-for-a-headache-in-the-near-future.25967
- 参考
- ZFS / RAIDZ Capacity Calculator
- ZFSSystemAttributes
- ZFSDRaidNotes
- ZFS native encryption vs LUKS HN #32340433Hacker NewsHacker News #32340433Hacker News
Why ZFS
- zpool - 软 RAID
- 软件控制 - 恢复创建都比硬 RAID 方便快速
- dRAID 更进一步提升大量盘位时的恢复速度
- 更灵活的冗余程度控制
- 完整性校验
- dataset - 逻辑划分 zpool
- ZFS - 文件系统
- 快照
- 增量备份 - zfs send, zfs recv
- 透明压缩
- dedup
- 缓存 - 写缓存、读缓存
- 利用额外的 SSD 加速
When not to use ZFS
- 需要基于 RAW Disk 的集群存储 - 例如: Ceph
NOTES
- zpool
- 存储池
- 一组虚拟设备的合集
- 存储池
- vdev 状态
- DEGRADED
- FAULTED
- OFFLINE
- ONLINE
- REMOVED
- UNAVAIL
- 主要的守护进程
- zfs-import
zpool import- 导入 pool
- zfs-mount
zfs mount -a/zfs umount -a- 自动挂载目录, 挂载目录和是否挂载由 mountpoint 和 canmount 控制
- zfs-share
zfs share -a/zfs unshare -a- 控制 iSCSI, NFS 或 CIFS 等网络共享
- zfs-zed
- ZFS Event Daemon
- 监控 zfs 事件, 当有 zevent 时间触发时, 会执行相应类型的脚本
- zfs-import
A raidz group with N disks of size X with P parity disks can hold approximately (N-P)*X bytes and can withstand P device(s) failing before data integrity is compromised. The minimum number of devices in a raidz group is one more than the number of parity disks. The recommended number is between 3 and 9 to help increase performance.
数据冗余
- Stripped
- 无冗余
- RAIDZ1
- 等同于 RAID 5
- 最大的磁盘空间
- 当磁盘读写块大于 128K 时性能较好
- 应该使用 2n+1 个磁盘
- RAIDZ2
- 等同于 RAID 6
- 更好的容错
- 比 RAIDZ1 更好的 MTTDL(mean time to data loss)
- 应该使用 2n+2 个磁盘
- RAIDZ3
- 应该使用 2n+3 个磁盘
- 镜像
- 等同于 RAID 1
- 使用更多的磁盘空间,但处理小数据的读写性能会较好.
- 为了追求更好的性能可基于 RAIDZ 实现镜像,特别是针对交大的,不可缓存的随机读.
- 每个 vdev 的磁盘不应该超过 12 个.建议每个 vdev 为 3-9 个磁盘.
- 一个或多个磁盘组成 vdev
- vdev 创建后不能修改
- 一个或多个 vdev 组成 zpool
- 磁盘损坏不会导致数据丢失
- vdev 损坏导致 zpool 不可使用
- 添加到 zpool 后的 vdev 不能被删除
- ZIL(ZFS intent log) 损坏会导致数据丢失
- L1ARC 是存储于 RAM 的读缓存,不应该超过 7/8 总 RAM
- L2ARC 是存储于磁盘的读缓存
- ZIL 和 L2ARC 存储于 SSD 但不应该存储于同一个 SSD
- ZIL 主要用于同步写,大多数情况下不需要
- L2ARC 大多数情况下不会提升太多的性能
- 增加 RAM 是提升性能的最好方式
zfsonlinux/zfs/module/zfs/dmu.cGitHub Filezfsonlinux/zfs/module/zfs/dmu.c This statistic shows ZFS DMU (Data Management Unit) operations/sec. docs.oracle.com/cd/E27998_01/html/E48490/analytics__statistics__disk_zfs_dmu_operations.html
ARC buffer data (ABD). zfsonlinux/zfs/module/zfs/abd.cGitHub Filezfsonlinux/zfs/module/zfs/abd.c
dnode dnode is a data structure which represents an object. An object can be a ZPL file or directory, a ZVOL volume, or several other types of internal metadata open-zfs.org/wiki/Documentation/DnodeSync
硬件
Tutor
准备工作
# 创建工作区间
mkdir -p ~/temp/zfs && cd $_
# 使用文件作为存储, 实际使用时将文件替换为设备即可
for i in {1..4};do dd bs=1M count=256 if=/dev/zero of=disk$i; done
dd bs=1M count=256 if=/dev/zero of=sparediskzpool
# 创建单个磁盘的 Pool, 没有数据冗余
zpool create tank $PWD/disk1
zpool list
# 写入数据, OS X 的挂载点在 /Volumes/tank, Linux 为 /tank
dd bs=1M count=64 if=/dev/random of=/tank/foo
# 查看写入后的状态
zpool list tank
# 清除
zpool destroy
# 镜像 Pool
zpool create tank mirror $PWD/disk1 $PWD/disk2
zpool status tank
dd bs=1M count=64 if=/dev/random of=/tank/foo
# 使 disk1 数据损坏
dd bs=1M seek=10 count=1 conv=notrunc if=/dev/random of=disk1
zpool scrub tank
zpool status tank
# 只是数据损坏磁盘没有异常, 可使用 clear 修复
zpool clear tank
zpool status tank
# 使 disk1 磁盘损坏
echo > disk1
zpool scrub tank
# 显示有一个磁盘不可用但依然可以操作
zpool status tank
dd bs=1M count=64 if=/dev/random of=/tank/bar
# 替换损坏的磁盘
zpool replace tank $PWD/disk1 $PWD/sparedisk
zpool status
# 扩容,添加新的磁盘
zpool add tank mirror $PWD/disk3 $PWD/disk4
zpool list
dd bs=1M count=100 if=/dev/urandom of=/tank/bar
zpool iostat -v tank
zpool destroy tankzfs
zpool create tank mirror $PWD/disk1 $PWD/disk2
zfs list tank
# 创建新的文件系统
zfs create tank/joey
zfs create tank/monica
zfs create tank/ross
zfs list -r tank
df -h |grep tank
# 删除文件系统
zfs destroy tank/ross
zfs create tank/ross
# 修改挂载点
zfs set mountpoint=$PWD/monica tank/monica
# 卸载文件系统
zfs umount tank/joey
df -h |grep tank
# 从新挂载
zfs mount tank/joey
# 获取所有属性
# SOURCE: '-' 只读 default 默认值 local 本地修改的值 inherited 继承自父文件系统的值 temporary
zfs get all tank/joey
zfs get -Hp -o name,property,value used,available tank/joey
# 限制配额
zfs set quota=50m tank/joey
# 设置预留
zfs set reservation=25m tank/joey
zfs get -r quota tank
zfs get -r reservation tank
# 启用压缩
zfs set compression=lz4 tank/joey
zfs get -r compression tank
# 使用词典测试压缩
# 在 Ubuntu/Debian 下需要安装 wordlist,例如 apt-get install wamerican-large
cp /usr/share/dict/words /tank/ross/
cp /usr/share/dict/words /tank/joey/
zfs list -o name,used,compressratio,compression tank/{joey,ross}share
# 启动 nfs
apk add nfs-utils
service nfs start
# 会修改 /var/lib/nfs/etab 配置文件
zfs set sharenfs=on data/share
# samba
# zfs set sharesmb=on data/share
# 设置额外选项
zfs set sharenfs="[email protected]/24" data/share
# 共享是所有定义了共享属性的卷
zfs share -a
# 启动时执行 zfs share -a
rc-update add zfs-share
# 查看所有的共享状态
zfs list -o name,sharenfs
# 取消所有共享
zfs unshare -a管理运维
zpool status -x
# 进行数据清理操作
zpool scrub tank
# 查看 scrub 状态
zpool status
# io 统计, 间隔 5s
zpool iostat -v 5
# 从 pool 中移除设备, 只能移除 未使用的热备, 缓存, 顶层设备, 日志设备
zpool remove main device
# 添加顶层设备
zpool add main raidz dev1 dev2
# 添加缓存
zpool add main cache dev
# -f 格式化
sudo zpool add main -f cache /dev/disk/by-id/wwn-0x500000000abcd
# 查看压缩信息
# compressratio, compression, refcompressratio
zfs get all main/archive | grep com
# 查看压缩后的大小
du -h .
# 查看实际大小
du --apparent-size -h .加密
blog.heckel.xyz/2017/01/08/zfs-encryption-openzfs-zfs-on-linux www.rolando.cl/blog/2017/06/13/playing-with-zfs-encryption HN #14591452Hacker NewsHacker News #14591452Hacker News
参考
- ZFS RAIDZ stripe width, or: How I Learned to Stop Worrying and Love RAIDZ
- [Getting the Most out of ZFS Pools](Getting the Most out of ZFS Pools)
- A Closer Look at ZFS, Vdevs and Performance
- FreeBSD ZFS Tuning Guide
- ZFS Administration Guide
- Becoming a ZFS Ninja (video)
- Slideshow explaining VDev, zpool, ZIL and L2ARC and other newbie mistakes!
- A Crash Course on ZFSLinkwww.bsdnow.tv/tutorials/zfsZFS 2.2 支持 Overlay · zfsonlinux · zfsonlinux/zfs · open-zfs · Archlinux ZFS · Archlinux ZFS/Virtual disks · ZFS Administration笔记:ZFS
- ZFS: The Last Word in File Systems - Part 1 (video)
- ZFS Raidz Performance, Capacity and Integrity
- The 'Hidden' Cost of Using ZFS for Your Home NAS
SSD
- linuxhint.com/configuring-zfs-cache
- www.reddit.com/r/zfs/comments/7bd797/ssd_caching
- SLOG is a write cache. This is the one you'd want to mirror and you'd also want to use an SSD that can finish in flight writes in the case of a power outage
- Something with a battery or capacitor
关联信息
反向链接、本文链接的其他页面和外部资料。
References
GitHub4 条
- zfsonlinux/zfsgithub.com/zfsonlinux/zfs
- zfsonlinux/zfs/module/zfs/abd.cgithub.com/zfsonlinux/zfs/blob/master/module/zfs/abd.c
- zfsonlinux/zfs/module/zfs/dmu.cgithub.com/zfsonlinux/zfs/blob/master/module/zfs/dmu.c
- zfsonlinux/zfs/wiki/faqgithub.com/zfsonlinux/zfs/wiki/faq
Hacker News2 条
- Hacker News #14591452HN #14591452
- Hacker News #32340433HN #32340433
其他外链36 条
- calomel.org/zfs_raid_speed_capacity.htmlcalomel.org/zfs_raid_speed_capacity.html
- blog.delphix.com/matt/2014/06/06/zfs-stripe-widthblog.delphix.com/matt/2014/06/06/zfs-stripe-width
- blog.heckel.xyz/2017/01/08/zfs-encryption-openzfs-zfs-on-linuxblog.heckel.xyz/2017/01/08/zfs-encryption-openzfs-zfs-on-linux
- blogs.oracle.com/video/entry/becoming_a_zfs_ninjablogs.oracle.com/video/entry/becoming_a_zfs_ninja
- buildwithbsd.org/zfs/zfs_tutorial_part_1.htmlbuildwithbsd.org/zfs/zfs_tutorial_part_1.html
- constantin.glez.de/blog/2010/06/closer-look-zfs-vdevs-and-performanceconstantin.glez.de/blog/2010/06/closer-look-zfs-vdevs-and-performance
- docs.oracle.com/cd/E19253-01/819-5461/index.htmldocs.oracle.com/cd/E19253-01/819-5461/index.html
- docs.oracle.com/cd/E23824_01/html/821-1448docs.oracle.com/cd/E23824_01/html/821-1448
- docs.oracle.com/cd/E23824_01/html/821-1448/gkkih.htmldocs.oracle.com/cd/E23824_01/html/821-1448/gkkih.html
- docs.oracle.com/cd/E23824_01/pdf/821-1448.pdfdocs.oracle.com/cd/E23824_01/pdf/821-1448.pdf
- docs.oracle.com/cd/E27998_01/html/E48490/analytics__statistics__disk_zfs_dmu_operations.htmldocs.oracle.com/cd/E27998_01/html/E48490/analytics__statistics__disk_zfs_dmu_operations.html
- forum.proxmox.com/threads/zfs-with-ssds-am-i-asking-for-a-headache-in-the-near-future.25967forum.proxmox.com/threads/zfs-with-ssds-am-i-asking-for-a-headache-in-the-near-future.25967
- forums.freenas.org/index.php?threads/slideshow-explaining-vdev-zpool-zil-and-l2arc-for-noobs.7775/forums.freenas.org/index.php?threads%2Fslideshow-explaining-vdev-zpool-zil-and-l2arc-for-noobs.7775%2F=
- linuxhint.com/configuring-zfs-cachelinuxhint.com/configuring-zfs-cache
- louwrentius.com/the-hidden-cost-of-using-zfs-for-your-home-nas.htmllouwrentius.com/the-hidden-cost-of-using-zfs-for-your-home-nas.html
- open-zfs.orgopen-zfs.org/
- open-zfs.org/wiki/Documentation/DnodeSyncopen-zfs.org/wiki/Documentation/DnodeSync
- open-zfs.org/wiki/Hardwareopen-zfs.org/wiki/Hardware
- openzfs.github.io/openzfs-docs/Project and Community/FAQ.htmlopenzfs.github.io/openzfs-docs/Project%20and%20Community/FAQ.html
- pthree.org/2012/04/17/install-zfs-on-debian-gnulinuxpthree.org/2012/04/17/install-zfs-on-debian-gnulinux
- serverfault.com/questions/355708serverfault.com/questions/355708
- utcc.utoronto.ca/~cks/space/blog/solaris/ZFSDRaidNotesutcc.utoronto.ca/~cks/space/blog/solaris/ZFSDRaidNotes
- utcc.utoronto.ca/~cks/space/blog/solaris/ZFSSystemAttributesutcc.utoronto.ca/~cks/space/blog/solaris/ZFSSystemAttributes
- wiki.archlinux.org/index.php/ZFSwiki.archlinux.org/index.php/ZFS
- wiki.archlinux.org/index.php/ZFS/Virtual_diskswiki.archlinux.org/index.php/ZFS/Virtual_disks
- wiki.freebsd.org/ZFSTuningGuidewiki.freebsd.org/ZFSTuningGuide
- wintelguy.com/zfs-calc.plwintelguy.com/zfs-calc.pl
- www.bsdnow.tv/tutorials/zfswww.bsdnow.tv/tutorials/zfs
- www.freebsd.org/cgi/man.cgi?query=zfs&sektion=8www.freebsd.org/cgi/man.cgi?query=zfs&sektion=8
- www.freebsd.org/cgi/man.cgi?query=zpool&sektion=8www.freebsd.org/cgi/man.cgi?query=zpool&sektion=8
- www.reddit.com/r/zfs/comments/7bd797/ssd_cachingwww.reddit.com/r/zfs/comments/7bd797/ssd_caching
- www.rolando.cl/blog/2017/06/13/playing-with-zfs-encryptionwww.rolando.cl/blog/2017/06/13/playing-with-zfs-encryption
- www.slideshare.net/MatthewAhrens/openzfs-novel-algorithms-snapshots-space-allocation-raidz-matt-ahrenswww.slideshare.net/MatthewAhrens/openzfs-novel-algorithms-snapshots-space-allocation-raidz-matt-ahrens
- www.youtube.com/watch?v=uT2i2ryhCiowww.youtube.com/watch?v=uT2i2ryhCio
- www.zfsbuild.com/2010/05/26/zfs-raid-levelswww.zfsbuild.com/2010/05/26/zfs-raid-levels
- zfsonlinux.orgzfsonlinux.org/