我和许多其他 MacBook Pro 用户一样,面临着内存不足的问题。 更准确的来说,我日常使用的rMBP配备的SSD容量只有256GB,自然不够用很长一段时间。
最重要的是,当我开始在飞行期间录制视频时,情况只会变得更糟。 这样的飞行后拍摄的素材量达到了 50+ GB,而我那可怜的 256GB SSD 很快就被填满了,迫使我购买了一个外部 1TB 硬盘。 然而,一年后,它无法再处理我生成的数据量,更不用说缺乏冗余和备份使其不适合托管重要信息。
因此,有一次我决定构建一个大型 NAS,希望这个系统能够持续至少几年而不需要再次升级。
我写这篇文章主要是为了提醒我到底做了什么以及我是如何做的,以防我需要再次这样做。 如果您决定这样做,我希望它对您也有用。
也许更容易购买?
所以,我们知道我们想要得到什么,问题仍然是:如何得到?
我首先考虑了商业解决方案,特别是 Synology,它应该提供市场上最好的消费级 NAS 系统。 然而,这项服务的成本却相当高。 最便宜的 4 盘位系统售价超过 300 美元,并且不包括硬盘驱动器。 此外,这样的套件本身的内部填充并不是特别令人印象深刻,这让人质疑它的真实性能。
后来我想:为什么不自己搭建一个NAS服务器呢?
寻找合适的服务器
如果您要组装这样的服务器,那么首先您需要找到合适的硬件。 使用过的服务器应该非常适合此构建,因为我们不需要太多的性能来执行存储任务。 在必要的东西中,我们应该注意大量的 RAM、多个 SATA 连接器和良好的网卡。 由于我的服务器将在我的永久居住地工作,因此噪音水平也很重要。
我开始在 eBay 上搜索。 虽然我在那里发现了很多价格低于 410 美元的二手 Dell PowerEdge R210/R100,但由于有在服务器机房工作的经验,我知道这些 1U 设备噪音太大,不适合家庭使用。 一般来说,塔式服务器通常噪音较小,但不幸的是,eBay 上的塔式服务器很少,而且要么价格昂贵,要么性能不足。
下一个要去的地方是 Craiglist,我发现有人以 40 美元的价格出售二手 HP ProLiant N75L! 我很熟悉这些服务器,即使使用它们通常也要花费 300 美元左右,所以我给卖家发了电子邮件,希望广告仍然有效。 得知这种情况后,我毫不犹豫地前往圣马特奥购买了这台服务器,乍一看确实让我很满意。 它的磨损很小,除了一点灰尘之外,其他一切都很好。
购买后立即看到的服务器照片
以下是我购买的套件的规格:
- 中央处理器:AMD Turion(tm) II Neo N40L 双核处理器(64 位)
- 内存:8 GB 非 ECC RAM(由前任所有者安装)
- Flash:4 GB USB 驱动器
- SATA 连接器:4+1
- 网卡:1 Gbps 板载 NIC
不用说,尽管已经有好几年了,该服务器的规格仍然优于市场上大多数 NAS 选项,尤其是在 RAM 方面。 稍后,我什至升级到 16 GB ECC,增加了缓冲区大小并增强了数据保护。
选择硬盘
现在我们已经有了一个优秀的工作系统,剩下的就是为其选择硬盘了。 显然,我花了 75 美元只得到了服务器本身,没有硬盘,这并不让我感到惊讶。
经过一番研究后,我发现 WD Red HDD 最适合运行 NAS 系统 24/7。 为了购买它们,我转向亚马逊,在那里我购买了 4 份,每份 3 TB。 基本上,您可以连接任何您喜欢的硬盘,但要确保它们具有相同的容量和速度。 从长远来看,这将帮助您避免可能出现的 RAID 性能问题。
系统设置
我认为许多人会使用该系统来构建 NAS
在 USB 上安装 CentOS 非常简单 - 只需指定 USB 作为启动源,启动后安装向导将引导您完成所有阶段。
RAID构建
成功安装 CentOS 后,我还在 Linux 上安装了 ZFS,如下所示
此过程完成后,我加载了 ZFS 内核模块:
$ sudo modprobe zfs
并使用命令创建 RAIDZ1 阵列 zpool
:
$ sudo zpool create data raidz1 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609145 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609146 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609147 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609148
$ sudo zpool add data log ata-SanDisk_Ultra_II_240GB_174204A06001-part5
$ sudo zpool add data cache ata-SanDisk_Ultra_II_240GB_174204A06001-part6
请注意,这里我使用的是硬盘驱动器的 ID,而不是它们的显示名称(sdx
)以减少由于字母更改而导致启动后无法安装的可能性。
我还添加了在单独的 SSD 上运行的 ZIL 和 L2ARC 缓存,将该 SSD 分为两个分区:5GB 用于 ZIL,其余用于 L2ARC。
至于RAIDZ1,它可以承受1个磁盘故障。 许多人认为不应使用此池选项,因为第二个磁盘可能在 RAID 重建过程中发生故障,从而导致数据丢失。 我忽略了这个建议,因为我定期在远程设备上备份重要数据,即使整个阵列发生故障也只会影响数据的可用性,而不会影响其安全性。 如果您没有能力进行备份,那么最好使用 RAIDZ2 或 RAID10 等解决方案。
您可以通过运行以下命令来验证池创建是否成功:
$ sudo zpool status
и
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 510G 7.16T 140K /mnt/data
默认情况下,ZFS 将新创建的池直接挂载到 /
,这通常是不希望的。 您可以通过运行以下命令来更改此设置:
zfs set mountpoint=/mnt/data data
从这里您可以选择创建一个或多个数据集来存储数据。 我创建了两个,一个用于时间机器备份,一个用于共享文件存储。 我将 Time Machine 数据集的大小限制为 512 GB 的配额,以防止其无限增长。
优化
zfs set compression=on data
此命令启用 ZFS 压缩支持。 压缩使用最少的 CPU 功率,但可以显着提高 I/O 吞吐量,因此始终建议使用。
zfs set relatime=on data
通过此命令,我们可以减少更新次数 atime
以减少访问文件时产生的 IOPS。
默认情况下,Linux 上的 ZFS 将 50% 的物理内存用于 ARC。 就我而言,当文件总数很小时,可以安全地增加到 90%,因为服务器上不会运行其他应用程序。
$ cat /etc/modprobe.d/zfs.conf
options zfs zfs_arc_max=14378074112
然后在帮助下
$ python arc_summary.py
...
ARC Size: 100.05% 11.55 GiB
Target Size: (Adaptive) 100.00% 11.54 GiB
Min Size (Hard Limit): 0.27% 32.00 MiB
Max Size (High Water): 369:1 11.54 GiB
...
设置重复任务
我用了
安装 Netatalk
配置设置
$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf
;
; Netatalk 3.x configuration file
;
[Global]
; Global server settings
mimic model = TimeCapsule6,106
; [Homes]
; basedir regex = /home
; [My AFP Volume]
; path = /path/to/volume
; [My Time Machine Volume]
; path = /path/to/backup
; time machine = yes
[Datong's Files]
path = /mnt/data/datong
valid users = datong
[Datong's Time Machine Backups]
path = /mnt/data/datong_time_machine_backups
time machine = yes
valid users = datong
请注意, vol dbnest
对我来说这是一个重大改进,因为默认情况下 Netatalk 将 CNID 数据库写入文件系统的根目录,这根本不是可取的,因为我的主文件系统在 USB 上运行,因此速度相对较慢。 正在开启 vol dbnest
导致将数据库保存在卷根中,在本例中属于 ZFS 池,并且生产力已经提高了一个数量级。
在防火墙中启用端口
$ sudo firewall-cmd --permanent --zone=public --add-service=mdns
$ sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp
sudo 防火墙-cmd --permanent --zone=public --add-port=afpovertcp/tcp
如果一切配置正确,您的机器应该显示在 Finder 中,并且 Time Machine 也应该可以工作。
其他设置
智能监控
建议监视磁盘的状态以防止磁盘故障。
$ sudo yum install smartmontools
$ sudo systemctl start smartd
UPS 守护进程
监控 APC UPS 的电量,并在电量严重不足时关闭系统。
$ sudo yum install epel-release
$ sudo yum install apcupsd
$ sudo systemctl enable apcupsd
硬件升级
设置系统一周后,我开始越来越关心服务器的非ECC内存。 此外,对于 ZFS,用于缓冲的额外内存将非常有用。 因此,我回到亚马逊,以每条 2 美元的价格购买了 3 条金士顿 DDR8 80GB ECC 内存,并更换了前任所有者安装的台式机内存。 系统第一次启动没有任何问题,并且我确保 ECC 支持已激活:
$ dmesg | grep ECC
[ 10.492367] EDAC amd64: DRAM ECC enabled.
导致
我对结果非常满意。 现在,我可以通过复制文件来不断保持服务器的 1Gbps LAN 连接繁忙,并且 Time Machine 可以完美运行。 所以,总的来说,我对这个设置很满意。
总费用:
- 1 * HP ProLiant N40L = 75 美元
- 2 * 8 GB ECC 内存 = 174 美元
- 4 * WD Red 3 TB HDD = 440 美元
在总 = $ 689
现在我可以说这个价格是值得的。
你们自己制作 NAS 服务器吗?
来源: habr.com