作为穷人,我们选择基于FreeBSD+ZFS+SAMBA构建山寨存储
毋庸质疑,也无需赘述
freebsd操作系统是公认的“快”、“安全”、“稳定”
zfs是人类有史以来最先进的文件系统
FreeBSD入门
软件包管理
Linux® 命令 (Red Hat/Debian) | FreeBSD 等价命令 目的 |
---|---|
yum install package / apt-get install package | pkg install package 从远程仓库安装 package |
rpm -ivh package / dpkg -i package | pkg add package 安装 package |
rpm -qa / dpkg -l | pkg info 列出已安装的软件包 |
系统管理
Linux | FreeBSD 等价命令 目的 |
---|---|
lspci | pciconf 列出 PCI 设备 |
lsmod | kldstat 列出已载入的内核模块 |
modprobe. | kldload / kldunload 载入/卸载内核模块 |
strace. | truss 跟踪系统调用 |
网络管理
Linux | FreeBSD 等价命令 目的 |
---|---|
ip | ifconfig |
ifconfig | ifconfig |
iptable | ipfw |
ZFS入门
ZFS 的历史
ZFS是由 Matthew Ahrens 和 Jeff Bonwick 在 2001 年开发的。ZFS 是作为 太阳微系统(Sun MicroSystem) 公司的 OpenSolaris 的下一代文件系统而设计的。在 2008 年,ZFS 被移植到了 FreeBSD 。同一年,一个移植 ZFS 到 Linux 的项目也启动了。然而,由于 ZFS 是 通用开发和发布许可证 (Common Development and Distribution License)(CDDL)许可的,它和 GNU 通用公共许可证 不兼容,因此不能将它迁移到 Linux 内核中。为了解决这个问题,绝大多数 Linux 发行版提供了一些方法来安装 ZFS。 在甲骨文公司收购太阳微系统公司之后不久,OpenSolaris 就闭源了,这使得 ZFS 的之后的开发也变成闭源的了。许多 ZFS 开发者对这件事情非常不满。 三分之二的 ZFS 核心开发者 ,包括 Ahrens 和 Bonwick,因为这个决定而离开了甲骨文公司。他们加入了其它公司,并于 2013 年 9 月创立了 OpenZFS 这一项目。该项目引领着 ZFS 的开源开发。 让我们回到上面提到的许可证问题上。既然 OpenZFS 项目已经和 Oracle 公司分离开了,有人可能好奇他们为什么不使用和 GPL 兼容的许可证,这样就可以把它加入到 Linux 内核中了。根据 OpenZFS 官网 的介绍,更改许可证需要联系所有为当前 OpenZFS 实现贡献过代码的人(包括初始的公共 ZFS 代码以及 OpenSolaris 代码),并得到他们的许可才行。这几乎是不可能的(因为一些贡献者可能已经去世了或者很难找到),因此他们决定保留原来的许可证。
ZFS 是什么,它有什么特性?
正如前面所说过的,ZFS 是一个先进的文件系统。因此,它有一些有趣的 特性 。比如:
- 存储池
- 写时拷贝
- 快照
- 数据完整性验证和自动修复
- RAID-Z
- 最大单个文件大小为 16 EB(1 EB = 1024 PB)
- 最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储
- 压缩
- 去重复数据
- 最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储
- 精简配置(thin provisioning)
安装部署
网络
25G*2 with rdma
磁盘
3616T sata 1 1T nvme (zfs log,相当于写缓存,其实应该配备2块,作为写缓存的镜像) 1*3.8T nvme (zfs cache,读缓存)
创建zpool
准备创建zpool之前,先查看磁盘列表;
freebsd查看磁盘列表
geom disk list
创建zpool
zpool create datasets raidz2 da0 da1 da2 da3 da4 da5 da6 da7 da8 da9 da10 da11 da12 da13 da14 da15 da16 da17 da18 da19 da20 da21 da22 da23 da24 da25 da26 da27 da28 da29 da30 da31 da32 da33 da34 da35
这里的raidz2相当于raid6的冗余级别. 能够取得相对数据可靠性和性能、容量的均衡。
写缓存
zpool add datasets log nvd0
若有需要,写缓存可以开启mirror
zpool add datasets log mirror xxx xxx
读缓存
zpool add datasets cache nvd1
查看zpool状态
zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
datasets 524T 95.6T 428T - - 0% 18% 1.00x ONLINE -
zpool status datasets
pool: datasets
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
datasets ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
da3 ONLINE 0 0 0
da4 ONLINE 0 0 0
da5 ONLINE 0 0 0
da6 ONLINE 0 0 0
da7 ONLINE 0 0 0
da8 ONLINE 0 0 0
da9 ONLINE 0 0 0
da10 ONLINE 0 0 0
da11 ONLINE 0 0 0
da12 ONLINE 0 0 0
da13 ONLINE 0 0 0
da14 ONLINE 0 0 0
da15 ONLINE 0 0 0
da16 ONLINE 0 0 0
da17 ONLINE 0 0 0
da18 ONLINE 0 0 0
da19 ONLINE 0 0 0
da20 ONLINE 0 0 0
da21 ONLINE 0 0 0
da22 ONLINE 0 0 0
da23 ONLINE 0 0 0
da24 ONLINE 0 0 0
da25 ONLINE 0 0 0
da26 ONLINE 0 0 0
da27 ONLINE 0 0 0
da28 ONLINE 0 0 0
da29 ONLINE 0 0 0
da30 ONLINE 0 0 0
da31 ONLINE 0 0 0
da32 ONLINE 0 0 0
da33 ONLINE 0 0 0
da34 ONLINE 0 0 0
da35 ONLINE 0 0 0
logs
nvd0 ONLINE 0 0 0
cache
nvd1 ONLINE 0 0 0
errors: No known data errors
创建挂载点并挂载
zfs set mountpoint=/datasets datasets
zfs mount datasets
查看挂载状态和用量
df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 429G 10G 385G 3% /
devfs 1.0K 1.0K 0B 100% /dev
datasets 451T root@wsi:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 429G 11G 384G 3% /
devfs 1.0K 1.0K 0B 100% /dev
datasets 451T 9.5G 451T 0% /datasets
root@wsi:~ # zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
datasets 524T 19.6G 524T - - 0% 0% 1.00x ONLINE - 450T 1% /datasets
安装samba
pkg install samba413-4.13.17_1
启用samba服务
- sysrc samba_server_enable=YES
- 编辑/etc/rc.conf 增加samba_server_enable=“YES”
- 修改samba配置文件
[global]
workgroup = SAMBA
security = user
server string = ZFS SAMBA Version %v
passdb backend = tdbsam
hosts allow = 127. 10.20.193. 192.168.23. 192.168.1. 10.20.191. 10.88.88.
load printers = no
use sendfile=yes
socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
write raw = yes
read raw = yes
max xmit=65535
unix charset = UTF-8
dos charset = GB2312
server multi channel support=yes
max protocol = SMB3
[zfs]
comment = ZFS SAMBA Version %v Image Storage
path = /datasets/
browseable = yes
writable = yes
public = no
guest ok = no
create mask = 0755
directory mode = 0755
security = share
然后创建用户,重启samba服务就可与挂载了