建议将 FreeBSD 上的 ZFS 用作 NAS 盒?

gri*_*eve 9 freebsd zfs network-attached-storage

请注意,此页面上的答案来自 2009 年,不应将其视为福音。如果您有关于的特定问题,请单击“提问”按钮并提出特定问题。

我正在考虑使用 FreeBSD 7.2 和 ZFS 文件系统构建一个家庭备份系统。有没有人有过使用该文件系统的经验?

具体来说:

  • 是否可以从 ZFS 启动?(我愿意吗?)
  • 添加驱动器有多容易?
  • 它如何处理不同大小的驱动器?
  • 您可以动态添加新驱动器(或至少只需重新启动)?
  • 现成的东西会更好地为我服务吗?

欢迎任何其他想法和建议。

编辑:

为了清楚起见,我已经阅读了ZFS 上FreeBSD 页面。我正在寻找具有与我想要的类似设置的实践经验的人的建议。

Wal*_*ter 13

我使用 ZFS 构建了一个家庭 FreeBSD 文件服务器。

它是具有 3GB RAM 的 AMD X2 3200+。它有一个 PCI Express Gig-E。启动驱动器是一个旧的 400GB,我有 4 个 750GB 的 Seagte 驱动器(一个固件版本不同,以防万一)。

从 ZFS 引导会很好(它会使安装更简单),但我使用 ZFSOnRoot 指令来设置带有 ZFS 的 Root/OS 驱动器(如果所有分区都是 ZFS,那么它不需要在引导时执行 fsck检查 UFS 文件系统)。您希望这样做的原因是,您可以根据需要使用不同的选项设置所有分区(/var、/usr、/tmp 等)(例如 /usr/obj 的 noatime 和 async,这将加速内核编译),但它们都将共享公共池中的空间。然后,您可以设置数据驱动器并为每个用户提供自己的分区(使用不同的引号和设置)。然后,您可以拍摄快照(在 ZFS 上成本较低)。

My home server has a df that looks like:
/dev/ad0s1a           1.9G    744M    1.1G    41%    /
devfs                 1.0K    1.0K      0B   100%    /dev
dozer/data            1.8T     62G    1.7T     3%    /data
dozer/home            1.7T    9.6G    1.7T     1%    /home
dozer/home/walterp    1.9T    220G    1.7T    11%    /home/walterp
tank/tmp              352G    128K    352G     0%    /tmp
tank/usr              356G    4.4G    352G     1%    /usr
tank/var              354G    2.2G    352G     1%    /var
Run Code Online (Sandbox Code Playgroud)

性能方面,复制文件真的很快。我要注意的一件事是,我一直在具有 3-4GB 的 FreeBSD AMD64 系统上使用 ZFS 并且它运行良好,但是从我的阅读来看,我担心在具有 2GB 或更少的内存。

我用完了主板上的 SATA 端口,所以我没有尝试添加任何新驱动器。初始设置很简单,一个创建 RAIDZ 的命令,然后是创建 /home 的命令,该命令以秒为单位进行格式化 (IIRC)。我仍在使用旧版本的 ZFS (v6),因此它有一些限制(它不需要相同大小的驱动器,但与 Drobo 不同的是,如果您有 3 个 750GB 驱动器和一个 1TB 驱动器,最终结果是就好像您有 4 个 750GB 驱动器一样)。

我将 ZFS 与 RAIDZ 一起使用的重要原因之一是端到端校验和。CERN 发表了一篇论文,记录了他们在运行 R/W 测试时发现 200 多个未更正的读取错误数周的测试(零售驱动器中的 ECC 预计每读取 12TB 就会出现一次故障)。我希望我服务器上的数据是正确的。由于停电(有人通过插入空间加热器使 UPS 过载),我遇到了严重的崩溃,但是当系统可以恢复时,ZFS 很快就恢复了,没有标准的 fsck 问题。

我喜欢它,因为我可以将 CUPS 添加到 Samba 以获得打印服务器。我添加了一个 DNS 缓存,并且可以根据需要添加其他软件(我正在考虑将 SNMP 监控添加到我家的桌面以测量带宽使用情况)。对于我在系统上的花费,我确信我可以买一个便宜的 NAS 盒,但是我不会有一个 64 位的本地 Unix 盒来玩。如果你喜欢 FreeBSD,我会说去吧。如果您更喜欢 Linux,那么我会推荐 Linux 解决方案。如果您不想进行任何管理,那么我会选择独立的 NAS 盒。

在我的下一轮硬件升级中,我计划升级硬件,然后安装当前版本的 FreeBSD,它具有 ZFS v13。V13 很酷,因为我有一个电池备份 RAM 磁盘,可用于 ZIL 日志(这使写入尖叫)。它还支持使用 SSD 来加速文件服务器(新 Sun 文件服务器的规格很不错,他们从使用 SSD 使系统非常快的 ZFS 系统获得它们)。

编辑:(还不能发表评论)。我几乎遵循了http://www.ish.com.au/solutions/articles/freebsdzfs 上的说明。自从编写这些指令以来,7.X 中存在的一项主要变化是 7.2 出来了,如果您有 2+ GB,则不必在 /boot/loader.conf 中添加以下三行:

vm.kmem_size_max="1024M"
vm.kmem_size="1024M"  
vfs.zfs.arc_max="100M"
Run Code Online (Sandbox Code Playgroud)

这些说明还解释了如何创建镜像以及如何将系统恢复到恢复模式(使用 ZFS 挂载)。在玩了一两次他的说明之后,我使用 Sun http://opensolaris.org/os/community/zfs/docs/zfsadmin.pdf的 ZFS Admin 手册来更好地理解 ZFS 是什么。为了创建我的数据存储,我使用了第 91 页上命令的修改版本来创建 ZFS 池。这是 FreeBSD,我必须做一个小改动:

zpool create dozer raidz /dev/ad4 /dev/ad6 /dev/ad8 /dev/ad10
Run Code Online (Sandbox Code Playgroud)

通过执行 dmesg |grep 'ata.*master' 找到的 ad4-ad10 是系统上将用于大数据分区的 SATA 硬盘驱动器的名称。在我的主板上,前三个 ata 端口 (ad0-3) 所在的 4 个 PATA 端口然后因为每个 SATA 端口都是一个主端口,所以没有旧数字。

要创建文件系统,我只是做了:

zfs create dozer/data
zfs set mountpoint=/data dozer/tank
Run Code Online (Sandbox Code Playgroud)

第二个命令是必需的,因为我关闭了共享的默认挂载点。


gri*_*eve 11

简介: 我终于建立了我的系统,这里是我的笔记,以防它对其他人有所帮助。

目标:

  • 构建一个家用 NAS 盒,它也可以兼作我的源代码控制和内部 Web 服务器。
  • 将成本控制在 1000 美元以下

规格:

  • 必须至少有 1 TB 的存储空间
  • 必须有数据冗余(RAID 或类似的东西)
  • 必须能够替换我当前老化的源代码控制服务器

设计:

  • FreeBSD 7.2(最终升级到 8.0)。
  • 操作系统在它自己的引导驱动器上,在这种情况下是一个 IDE 驱动器
  • 数据存储在六个 SATA 驱动器上。

我们使用 ZFS 作为文件系统,因为它获得了如此好评。ZFS 几乎要求我们运行 64 位操作系统,并且喜欢大量内存,所以我应该至少获得 4Gb

硬件:

软件: FreeBSD 7.2 - 1 @ $0.00 http://www.freebsd.org/

总成本: 874.81 美元

硬件设置: 基本的计算机构建,有三个小问题。

  1. 我购买的机箱有 6 个硬盘插槽和两个 3.5 托架。我认为 IDE 可以安装在 3.5 托架之一中。这是一个糟糕的假设,并且没有合理的方法让它发挥作用。我去 Fry's 买了一个大约 17.00 美元的适配器,效果很好。

  2. 我购买的 Sata 电缆有 90 度连接器,这很好,除了六个驱动器之外,无法正常工作。插入一根电缆导致连接器的不灵活部分悬挂在下一个硬盘驱动器上。我不得不去 Fry's 和 5 根普通的 SATA 电缆。可悲的是,我在 Newegg 买的那些太便宜了,不值得寄回去。

  3. 机箱将硬盘驱动器的背面指向机箱的侧面,来自电源的电源线有一个硬连接器,伸出机箱边缘。这不允许我将侧盖滑回原位。我不得不稍微玩弄它才能让它工作,最终用两根模块化电源线(每根都有四个 SATA 插头)在驱动器之间交错,这样第一根电缆为驱动器 0 供电, 2 和 4,以及第二个通电的 1、3 和 5。这允许足够的弹性,我可以用拉链将它们系在一边。

操作系统设置:

  1. 将 FreeBSD 7.2 ISO 刻录到 CD。我本可以使用单张 DVD,但我没有任何闲置。

  2. 将 memtest86+ ( http://www.memtest.org/ ) 刻录到 CD 上。

  3. 启动新组装的计算机,进入 bios 以确保它看到所有 7 个驱动器和 DVD-ROM。它做了。更改引导顺序以先制作CDROM。

  4. 将memtest86+光盘插入刚组装好的电脑,重启,让它运行一夜。通过没有错误。

  5. 安装了 FreeBSD 7.2,如果您对此不熟悉,我建议您阅读以下内容:http : //www.freebsd.org/doc/en/books/handbook/install.html 它比我更好地解释要做什么能够。以下是我的具体设置:

    • 是否进行了标准安装
    • 将整个 IDE 驱动器用于操作系统
      • 使用默认文件系统布局
      • 保持 6 个 SATA 驱动器不变
    • 开发人员在没有 X-Windows 的情况下安装,因为该框将是无头的
    • 系统不是 NFS 客户端或服务器
    • FTP 和 inetd 禁用
    • 允许 SSH
    • 未添加任何包(稍后会添加这些包)。
    • 添加了一位用户
  6. 安装并重新启动后,我注意到仅检测到 6 个 SATA 驱动器中的 4 个。我进入 BIOS 并在集成外设下将 OnChip SATA 类型更改为 AHCI,将 OnChip SATA 端口 4/5 类型更改为“SATA” 保存设置并重新启动。

  7. 此时 FreeBSD 检测到所有六个驱动器为: ad4 ad6 ad8 ad10 ad12 ad14

  8. 使用 csup 从 cvs 获取最新信息: csup -g -L 2 stable-supfile 我已经编辑了文件以使用主机: cvsup11.us.FreeBSD.org 保留所有其他信息。

  9. 重新构建并安装最新的内核和世界,如下所述:http : //www.freebsd.org/doc/en/books/handbook/makeworld.html 定制我的内核(参见 ZFSNAS)。我禁用了大量设备,因为我从未打算使用 SCSI、USB、PCMCIA、串行、并行等。将以下内容添加到 /etc/make.conf: CPUTYPE=athlon64 CFLAGS= -O2 -fno-strict-aliasing -pipe make -j8 buildworld

NAS 设置:

  1. 为我们的存储创建 ZFS 池: zpool create storage raidz2 ad4 ad6 ad8 ad10 ad12 ad14

  2. 在新创建的存储上创建主文件系统:

    zfs create storage/home
    cp -rp /home/* storage/home
    rm -rf /home /usr/home
    zfs set mountpoint=/home storage/home
    
    Run Code Online (Sandbox Code Playgroud)
  3. 编辑 /etc.rc/conf 并添加以下内容:

    zfs_enable="YES"
    
    Run Code Online (Sandbox Code Playgroud)

    这会在启动时挂载 ZFS 文件系统。

  4. 创建 root、samba 和 perforce 目录

    zfs create storage/root
    cp -rp /root/* storage/root
    rm -rf /root 
    zfs set mountpoint=/root storage/root
    zfs create storage/fileshare
    zfs create storage/perforce
    
    Run Code Online (Sandbox Code Playgroud)

    除非您的池中需要更多文件系统,否则您几乎已经完成了 ZFS 部分。有关更多详细信息,请参阅以下内容: http: //www.freebsd.org/doc/en/books/handbook/filesystems-zfs.html http://opensolaris.org/os/community/zfs/docs/zfsadmin.pdf

安装的端口:

/usr/ports/shells/bash
    make install
/usr/ports/editors/vim
    make install
/usr/ports/net/samba33
    make
    make install
    // Use all defaults un-check cups.
/usr/ports/devel/perforce
    make
    make install PERFORCE_PORT=XXXX PERFORCE_USER=p4user PERFORCE_GROUP=p4
    rm -rf /usr/local/perforce
    cd /storage/perforce/
    mkdir root
    mkdir log
    chown p4user:p4user *
    cd /storage
    chown p4user:p4user perforce 

Edited /usr/local/etc/perforce.conf as follows:
    #
    # Perforce FreeBSD configuration file
    #
    #
    # $FreeBSD: ports/devel/perforce/files/perforce.conf.in,v 1.3 2005/01/18 15:43:36 lth Exp $

    #
    # Perforce ROOT
    #
    PERFORCE_ROOT="/storage/perforce/root"

    #
    # Perforce user (it is recommended to run p4d as a non-root user)
    #
    PERFORCE_USER="p4user"

    #
    # p4d/p4p port (default: 1666)
    #
    PERFORCE_PORT="XXXX"

    #
    # p4p cache directory
    #
    PERFORCE_PROXY_CACHE="/usr/local/perforce/cache"

    #
    # p4p target server (default: perforce:1666)
    #
    PERFORCE_PROXY_TARGET="perforce:1666"

    #
    # p4d options (see man p4d)
    #
    PERFORCE_OPTIONS="-d -p $PERFORCE_PORT -v server=1 -L /storage/perforce/logs/p4d.log"

    #
    # Uncomment this line to have the server started automatically
    #
    PERFORCE_START=yes
Run Code Online (Sandbox Code Playgroud)

用户添加:

user1
user2
Run Code Online (Sandbox Code Playgroud)

创建的组:

sambashare
    Added user1 and user2 as members

chgrp sambashare /storage/fileshare
chmod 775 /storage/fileshare
chmod g+s /storage/fileshare
Run Code Online (Sandbox Code Playgroud)

桑巴配置:

Samba configuration file:
#################
    [global]
       workgroup = USERLAN
       server string = ZFS NAS
       security = user
       hosts allow = 192.168.1. 127.
       log file = /usr/local/samba/var/log.%m
       max log size = 50
       passdb backend = tdbsam
       dns proxy = no

    [user1share]
       comment = user1 share
       path = /storage/fileshare
       valid users = user1 user2
       public = no
       writable = yes
       printable = no
       create mask = 0765
#################

pdbedit -a -u user1 
    # followed prompts
pdbedit -a -u user2 
    # followed prompts
Run Code Online (Sandbox Code Playgroud)


Mar*_* M. 5

  • 是否可以从 ZFS 启动?(我愿意吗?)

我认为您没有理由想要这样做,我认为 OpenSolaris 中的 Snapshot 支持仅足够成熟,因此您可以切换回旧版本并启动它(但这实际上只是胡乱猜测)。

  • 添加驱动器有多容易?

在扩展条带池中添加?只需向池中添加一个驱动器,就可以了。考虑下你的下一个问题的含义。

  • 它如何处理不同大小的驱动器?

您可以将其用作条带并告诉 ZFS 保留文件的 n 个副本。因此,您可以使用您拥有的完整存储可用性,并且仍然可以获得不错的冗余

  • 您可以动态添加新驱动器(或至少只需重新启动)?

替换存储池中的设备我想这是推荐的解决方案,了解它在 FreeBSD 上的工作情况的最简单方法可能是尝试一下。

  • 现成的东西会更好地为我服务吗?

您是否考虑过FreeNAS(路线图) 0.70 似乎即将发布并将支持 ZFS。

您将省去所有框架的麻烦,并获得一个相对不错的免费使用 GUI。