ZFS در FreeBSD بخشی از سیستم پایه است و ابزار جداگانهای لازم ندارد.
۱. فعالسازی و شناسایی دیسک
sysrc zfs_enable=YES
service zfs start
geom disk list | grep -E 'Geom name|Mediasize|descr'۲. pool آینهای
دیسکها (اینجاda1وda2) کاملاً پاک میشوند.
gpart create -s gpt da1 && gpart add -t freebsd-zfs -a 1m -l data0 da1
gpart create -s gpt da2 && gpart add -t freebsd-zfs -a 1m -l data1 da2
zpool create -o ashift=12 -O compression=lz4 -O atime=off tank mirror gpt/data0 gpt/data1
zpool status tankبرچسبهای GPT (gpt/data0) نسبت به da1 پایدارترند و در گزارش خرابی دیسک دقیقاً نشان میدهند کدام دیسک باید تعویض شود.
۳. dataset و سهمیه
zfs create tank/www
zfs create -o quota=50G tank/backup
zfs create -o recordsize=16k tank/pgdata # small records suit databases
zfs list -o name,used,avail,quota,compressratio,mountpointهر dataset تنظیمات، سهمیه و snapshot جداگانه دارد.
۴. snapshot
zfs snapshot tank/www@$(date +%F)
zfs list -t snapshot
ls /tank/www/.zfs/snapshot/بازیابی یک فایل از snapshot با cp از همان پوشهی .zfs انجام میشود. برگرداندن کل dataset به آخرین snapshot:
zfs rollback tank/www@2026-11-08snapshot روزانهی خودکار با cron (crontab -e برای root). این خط ۱۴ snapshot آخر tank/www را نگه میدارد:
15 2 * * * /sbin/zfs snapshot tank/www@auto-$(date +\%F) && /sbin/zfs list -H -t snapshot -o name -S creation tank/www | grep '@auto-' | tail -n +15 | xargs -n1 /sbin/zfs destroyبرای چند dataset و سیاستهای پیچیدهتر (ساعتی، روزانه، ماهانه)، ابزار آمادهی zfstools یا sanoid را از pkg نصب کنید.
۵. انتقال به سرور دیگر
zfs snapshot tank/www@send1
zfs send tank/www@send1 | ssh backup01 zfs receive -u backup/www
# Later, only the changes:
zfs snapshot tank/www@send2
zfs send -i @send1 tank/www@send2 | ssh backup01 zfs receive -u backup/www۶. نگهداری
sysrc -f /etc/periodic.conf daily_scrub_zfs_enable=YES
zpool status -xبا این تنظیم، periodic هر ۳۵ روز یک بار scrub اجرا میکند و نتیجه در گزارش روزانهی ایمیل root میآید.