FreeBSD ZFS存储与samba配置

作为穷人,我们选择基于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服务

  1. sysrc samba_server_enable=YES
  2. 编辑/etc/rc.conf 增加samba_server_enable=“YES”
  3. 修改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服务就可与挂载了

Published At