使用 Trim-Slice 构建超低功耗文件服务器
在过去的几年里,我一直在家里使用一台定制的文件服务器。我已经升级了很多次,但我能记得起来的最早是在 2000 年 4 月。当我说“升级”时,我的意思是内部组件至少被完全更换过两次,还有其他一些部件。最近一次重大升级是在 2006 年(或者大约那个时候),当时我添加了一个软件 RAID5,带有三个 500GB 硬盘驱动器(后来扩展到六个)。它多年来一直愉快地运行着,但最近开始显露出它的老态。首先,两 TB 的空间已经不算多了。此外,它的能效也不如我所希望的那样高(根据我的测量,它持续消耗 1.8 到 2.0 安培,具体取决于负载)。最后,这个服务器的机箱占用的空间太大了(它是一个全塔式机箱)。
作为一个实验,并且最终为了摆脱那个庞大、低效且丑陋的塔式机箱,我决定使用新的 Trim-Slice 作为超低功耗、超小型替代文件服务器的基础。Trim-Slice 构建于 NVIDIA Tegra 2 平台之上,我购买的特定型号配备了 1GHz 双核 ARM Cortex A9 处理器、1GB 内存和一个 32GB SATA SSD。我有没有提到它真的很小?你知道,非常小——就像,我不敢相信这是一个完整的计算机那么小。尺寸为 130 毫米 x 95 毫米 x 15 毫米。为了比较,一个标准的 3.5 英寸硬盘驱动器的尺寸约为 146 毫米 x 102 毫米 x 25 毫米。

图 1. Trim-Slice 和包装盒中的所有物品

图 2. 尺寸比较:Trim-Slice 旁边是 Nokia N900 和 Ben NanoNote
在外部,它有一个 RS232 串口、SD 和 microSD 卡槽(均兼容 SDHC)、四个 USB 端口、HDMI 和 DVI-D 视频输出端口、802.11n 和一个千兆以太网端口。在内部,它预装了 Ubuntu 在 SSD 上(我收到的那台安装的是 10.10 "Maverick",但现在有一个更新到 11.04 "Natty",我已经应用了,我预计现在新订购的设备上会发货这个版本)。
内置的完整 Ubuntu Linux 是这个解决方案超越 Drobo FS、ReadyNAS 等替代方案的关键,至少在我看来是这样。价格也在同一个范围内。我订购的型号,包括从以色列运来的运费,总共是 335 美元。
对我来说,主要的缺点是没有地方连接内部硬盘驱动器。我必须使用外部 USB 驱动器来代替。我不喜欢通过 USB 运行软件 RAID 的想法,所以我进一步决定简单地使用多个大型外部 USB 驱动器(每个驱动器至少有一个相应的备份驱动器)。
首先,我的目标是替换旧的塔式服务器,这只需要 Trim-Slice 和两个 2TB 外部 USB 硬盘驱动器。是的,单个硬盘驱动器,尤其是 USB 驱动器,不如 RAID5 阵列那样可靠或快速,但为了节省功耗、空间和噪音,我愿意做出妥协。USB 对于我的需求来说已经足够快了,而且,有了两个驱动器,我还有一个备份。
文件服务器的剖析文件服务器的目的是通过网络提供文件服务。有很多方法可以做到这一点,但我在这里只关注最常见的方法。
首先,有经典的“文件服务器”软件:NFS 和 Samba。这些系统不关心您的数据是什么。它们看到的只是文件,并且没有哪个文件与下一个文件有任何不同(除了大小和权限)。
新秀是内容感知型文件服务器,如 UPnP 和 DAAP。这种类型的文件服务器软件确实关心内容类型,并且它会连同文件本身一起提供有关您的文件的元数据。它会拒绝提供它不识别或不支持的文件。但是,它可以做一些 NFS 和 Samba 做不到的技巧,例如为无法读取原始数据的客户端动态更改数据。因此,它们比经典文件服务器软件更挑剔,无论是在设置还是运行方面,但它们确实有优势。
UPnP 和 DAAP 专门为提供音频、视频和图像文件而设计。DAAP 内置于许多流行的音频点唱机应用程序中,或作为插件提供,例如 Rythmbox、Amarok 和 Banshee,但也有独立的服务器应用程序可用。UPnP 媒体服务器支持内置于各种消费设备中,例如 PlayStation 3、Xbox 360 以及各种手持和机顶媒体播放器。
NFSNFS 是经典的 Network File System(网络文件系统),它已经在 Linux 和 UNIX 上使用了几十年。连接到我的电视的 Popcorn Hour 媒体播放器支持 NFS,并且我没有任何 Windows 计算机,所以 NFS 实际上是我在我的网络上唯一需要(或想要)的经典文件服务协议。NFS 的安全性非常有限,因此对于所有人来说都不是理想的选择,但它很轻巧且易于配置。在我看来,如果您有一个支持 NFS 和 SMB 的设备,请选择 NFS。
在 Ubuntu 上,我使用的 NFS 服务器称为 nfs-kernel-server,您可以使用以下命令安装它
sudo apt-get install nfs-kernel-server
要创建 nfs 共享,请编辑 /etc/exports 文件,并添加您要导出的目录。这是一个示例
/mnt/disk01 popcorn(ro,sync,root_squash,no_subtree_check)
上面的行将 /mnt/disk01 目录导出到我的 Popcorn Hour,带有以下标志
-
ro
— 只读:换句话说,不允许任何可能更改文件系统的内容。Popcorn Hour 具有删除项目的功能,但我不希望让我的孩子使用遥控器随意或意外地删除东西。 -
sync
— 仅在更改已提交到稳定存储后才回复请求。 -
root_squash
— 将来自 uid/gid 0 的请求映射到匿名 uid/gid。这使事情稍微安全一些。 -
no_subtree_check
— 来自手册页:“此选项禁用子树检查,这具有轻微的安全隐患,但可以在某些情况下提高可靠性。” 有关更多信息,请参阅手册页 (man exports
)。
将该行放入到位后,我运行 sudo exportfs -ra
命令以刷新导出。然后在 Popcorn Hour 上,我可以挂载导出的目录,然后就可以开始了。您可以在 /etc/exports 文件中使用其他几个选项。有关详细信息,请参阅 exports 手册页。
上面的示例条目无法在任何其他主机上挂载,但为了允许其他主机这样做,我可以将 popcorn
更改为我要与之共享的网络的 IP 地址和网络掩码(例如,192.168.10.0/24,适用于每个 IP 地址以 192.168.10 开头的主机),或者我可以将其他主机定义添加到行的末尾。
更新并刷新 exports 文件后,我可以使用类似这样的命令挂载导出
sudo mount -t nfs trimslice:/mnt/trimslice/disk01
↪/mnt/trimslice/disk01
或者,我可以将如下条目添加到我的 /etc/fstab 文件中
trimslice:/mnt/trimslice/disk01 /mnt/trimslice/disk01
↪nfs defaults 0 0
并且 NFS 共享将始终在启动时挂载。
Samba SMB/CIFSSamba,又名 SMB/CIFS,是您如何与运行 Windows 的计算机共享文件的方式。如果我有一两台 Windows 机器,使用 Samba 是理所当然的。我没有,但我将继续在这里描述这个过程。首先,Samba 安装在 Trim-Slice 上,使用以下命令
sudo apt-get install samba
安装后,编辑 /etc/samba/smb.conf 文件以设置您的共享(将它们添加到文件末尾)。与上面描述的 NFS 共享等效的只读共享是
[disk01]
comment = trimslice disk01
path = /mnt/disk01
browsable = yes
guest ok = yes
read only = yes
将上述内容添加到 smb.conf 文件的末尾,共享将会在网络上弹出。使用 Samba,在编辑 smb.conf 文件后,无需重启服务或运行命令;任何更改都会在文件保存后立即自动应用。
最好取消注释 smb.conf 文件中的 security = user
行以增加一些安全性(并且如果您确实想要安全性,您应该将上述示例中的 guest ok
设置为 no
)。并且,如果您有适当的 Windows 网络,您应该将 smb.conf 文件中的 workgroup
名称更改为您的 Windows 工作组的实际名称。
与 NFS 一样,您可以在 smb.conf 文件中输入更多设置,以根据您的需要调整事物。默认文件充满了示例,Samba 文档甚至更详细地介绍了这些内容。
DAAP如果您感兴趣,DAAP 代表 Digital Audio Access Protocol(数字音频访问协议)。Linux 的一个较旧但可用的独立 DAAP 服务器是 mt-daapd,也称为 Firefly Media Server。不幸的是,它没有在积极开发中。一些分支正在进行中(尚未在 Ubuntu 存储库中),因此情况可能会在未来有所改善。要安装它,请执行以下操作
sudo apt-get install mt-daapd
安装 mt-daapd 后,在 /etc/mt-daapd.conf 文件中设置管理员帐户的密码。从技术上讲,密码已经设置好了,但更改密码是一个好习惯。您可以在文件中调整其他设置,但 GUI 更容易。

图 3. mt-daapd,又名 Firefly Media Server
更改密码后,使用以下命令重启 mt-daapd
sudo /etc/init.d/mt-daapd restart
然后,转到 Web 界面进行配置:http://trimslice:3689(在 URL 中将“trimslice”替换为正确的 IP 地址或名称)。
配置页面简单明了。您可以设置名称,更改管理员密码,并设置收听音乐的密码(如果您不想与网络上的每个人分享您收藏的经典神秘博士音乐)。您还可以设置哪个或哪些文件夹包含您的音乐(可以指定多个文件夹)。最后,您可以配置 mt-daapd 多久重新扫描您的音乐文件夹。
一旦更改符合您的喜好,按下“保存”按钮会将设置保存到 /etc/mt-daapd.conf 文件。但是,GUI 就在那里,所以您不妨使用它。
此时一切应该都很好。不幸的是,mt-daapd,在 Trim-Slice 使用的存储库中打包的版本,不支持 FLAC 文件。如果您的收藏主要是 MP3 文件,那将不是问题。如果这是一个问题,您的选择是自行编译、忍受限制或寻找替代方案。
UPnP为了向我的 PS3 提供视频文件,我使用 MediaTomb UPnP 媒体服务器。或者至少,如果我没有 Popcorn Hour,我会这样做。MediaTomb 就像 mt-daapd 一样,是一个很好的软件,并且对于它所做的事情来说运行良好,但是像 PS3 这样的设备可能会非常挑剔它们将支持的文件类型。动态转码(mt-daapd 和 MediaTomb 都支持)可以消除其中一些问题,尤其是音频文件(例如,通过在传输 FLAC 文件时将其转码为 WAV,以便 iTunes 可以播放它)。但是,转码对于视频文件来说并不实用。它可以完成,但 CPU 要求至少可以说很高,尤其是当您开始谈论 720p 和更大的视频文件时。

图 4. Media Tomb 文件浏览器
撇开限制不谈,安装和配置 MediaTomb 类似于 mt-daapd。首先,输入以下命令
sudo apt-get install mediatomb-daemon
安装完成后,编辑 /etc/mediatomb/config.xml 文件以启用图形用户界面 (GUI) 并设置默认用户和密码。为此,请将以下行中的 enabled="no"
更改为 enabled="yes"
(全部两个),并将密码设置为更安全的密码
<ui enabled="no" show-tooltips="yes">
<accounts enabled="no" session-timeout="30">
<account user="mediatomb" password="mediatomb"/>
以上行应靠近文件顶部。保存文件,然后使用以下命令重启服务器
sudo /etc/init.d/mediatomb stop
sudo /etc/init.d/mediatomb start
重启后,连接到 http://trimslice:49152/。输入用户名和密码,您将进入 GUI。要添加文件夹,请单击“文件系统”链接,然后浏览到您希望 MediaTomb 索引的文件夹。在左侧窗格中选择正确的文件夹后,单击加号或带圆圈的加号图标,以使 MediaTomb 扫描文件夹的内容。带圆圈的加号图标将文件夹添加为自动扫描文件夹,这意味着它将定期重新扫描文件夹以查找新文件。
对于 PS3 支持,需要在 config.xml 文件中更改几行;如果您搜索“PS3”,它们会被注释掉并且很容易找到。
备份有了这个新的文件服务器,我失去了 RAID 的保护,因此备份更加重要。当然,RAID 并不能消除对备份的需求;它只是使主文件系统更可靠。因为我之前的设置已经需要备份,所以我已经建立了一个备份系统。
“系统”本身是一个自定义的 rsync 备份 shell 脚本。备份驱动器包含几个目录:一个名为 current,然后是 14 个其他目录,命名为 01、02、03 等,最多到 14。脚本的基本流程是
rm -rf '14'
mv '13' '14'
mv '12' '13'
...
mv '01' '02'
cp -al 'current' '01'
rsync drive-to-back-up to 'current'
上面复制命令的 -al
部分很重要。它告诉命令以存档模式运行,该模式保留属性并递归复制目录,并创建硬链接而不是实际复制文件。当 rsync 遇到更改的文件时,它会在更新文件之前取消链接该文件,因此 rsync 和 cp 命令的组合为我提供了 14 天的备份(假设脚本每天运行一次)。
这些备份所需的额外空间很小,因此我可以为备份使用与主备份驱动器相同大小的驱动器。一旦备份驱动器开始接近其限制,主驱动器也可能接近其限制,并且届时将需要购买额外的一对驱动器。
我已经使用这个脚本的变体多年了,如果我今天不得不从头开始,我可能会使用它或其他东西。Linux 上有很多优秀的备份程序可用。重点是进行备份,尽可能多地进行备份。
结论Trim-Slice 作为文件服务器运行得非常好。内置的串口让我可以在完全没有显示器的情况下操作它,并且到目前为止,硬件对于我家不太大的文件服务需求来说已经足够了。
借助双 2TB 外部 USB 磁盘驱动器(以及更多即将到来的驱动器),Trim-Slice 比我预期的还要节能。我的消费级“Kill-a-Watt”功率计(我承认它可能不是很准确)显示平均功耗为 0.28 安培,无论是否完全准确,都比旧服务器拉取的 1.8 到 2.0 安培好得多。Trim-Slice 本身的功耗惊人地只有 0.08 安培。
功耗只是一个好处。我也喜欢更小的尺寸。噪音也好得多。旧机箱需要几个风扇,但 Trim-Slice 是被动散热的。外部驱动器外壳中有风扇,但它们不经常启动,即使启动了,我也根本不会注意到它们。Trim-Slice 摸起来有点烫,但我想这就是当你将外壳做成散热器时会发生的事情。
关于这种新设置能持续多久,目前尚无定论。我认为 USB 驱动器的可靠性较低,虽然 Trim-Slice 的制造质量看起来很高,但它是一个新产品,没有历史记录。为了缓解这种情况,我将非常小心地确保重要内容被复制到所有未来的驱动器中。尽管我担心,但我必须承认,多年来我确实更换了 RAID5 中的一些驱动器,而且我并不认为可靠性的差异会大到引起任何重大问题。
资源Trim-Slice: http://trimslice.com
Trim-Slice 用户手册: http://trimslice.com/download/documentation/trim-slice-user-guide.pdf
Linux NFS-HOWTO: http://nfs.sourceforge.net/nfs-howto
Samba: http://www.samba.org
MediaTomb: http://mediatomb.cc
Firefly Media Server: http://en.wikipedia.org/wiki/Firefly_Media_Server
The Popcorn Hour: http://www.popcornhour.com