1. 为什么选择TrueNAS搭建监控存储方案
最近帮朋友折腾了一套监控系统,用闲置硬件搭配TrueNAS给海康摄像头做存储后端,实测下来效果相当不错。这种方案特别适合手头有退役电脑又想省钱的场景,比如小区物业、小型办公室或者家庭监控。相比动辄上万的专用存储设备,自己搭建的成本可能连零头都不到。
TrueNAS的核心优势在于它的ZFS文件系统。我实测过连续写入监控视频流时,ZFS的写缓存机制能让机械硬盘的吞吐量提升30%以上。而且数据校验功能可以防止视频文件损坏——这点对监控录像特别重要,关键时刻调不出录像可就尴尬了。有次小区发生纠纷,就是靠这套系统保存的完整录像解决了问题。
硬件选择上有个坑要特别注意:很多老电脑的百兆网卡根本扛不住高清摄像头的码流。我最初用了一台2012年的老主机,结果摄像头频繁报存储错误。后来换了张PCIe千兆网卡,问题立刻解决。建议至少配置:
- 四核CPU(如i5-4代以上)
- 8GB内存(ZFS很吃内存)
- 千兆网卡(必须)
- 监控级硬盘(如西数紫盘)
2. TrueNAS系统安装实战
安装TrueNAS前建议先准备个16GB以上的U盘,我用闪迪CZ73做安装盘就翻车了——安装过程频繁报错。后来换了金士顿DTSE9才顺利通过。这里分享个避坑技巧:先用rufus工具以DD模式写入镜像,比常规ISO模式稳定得多。
系统安装完成后,第一件事就是改管理口IP。很多教程说用默认的DHCP,但在监控网络里我强烈建议设静态IP。有次小区停电恢复后,TrueNAS的IP被DHCP重新分配,导致所有摄像头断联。具体操作:
# 通过控制台修改网络配置 vi /etc/network/interfaces # 添加静态IP配置 iface em0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1存储池创建时有个关键点:如果只用单块硬盘,务必选"Stripe"模式而不是"Single disk"。后者不会启用ZFS特性,我吃过这个亏——硬盘坏道导致三个月录像全损。虽然都是单盘,但Stripe模式至少能保证数据校验。
3. NFS服务深度配置指南
海康摄像头对NFS的兼容性其实有点挑,需要特别注意版本配置。在TrueNAS的NFS服务设置里:
- 勾选"允许非root用户挂载"(必选)
- NFSv4必须禁用(摄像头只认v3)
- 设置maproot为root:wheel(否则权限报错)
共享路径的权限设置是另一个易错点。我建议这样配置:
chmod -R 777 /mnt/tank/surveillance chown -R nobody:nogroup /mnt/tank/surveillance实测发现海康摄像头写入时会用nobody身份,如果不设这个权限,录像文件能创建但大小为0字节。这个坑我排查了整整两天。
高级技巧:在"auxiliary parameters"里添加:
alldirs=yes # 允许自动创建日期目录 ro=no # 必须可写这样摄像头就能按日期自动生成文件夹,回放时特别方便管理。
4. 海康摄像头对接全流程
摄像头网络配置有个隐藏技巧:先断开外网再配置。有次摄像头自动升级后,NFS功能突然失效,后来发现是新固件更改了挂载参数。具体操作流程:
- 登录摄像头Web界面(默认IP 192.168.1.64)
- 进入"配置→网络→高级配置"关闭自动升级
- 存储管理里添加网络硬盘时:
- 服务器IP填TrueNAS地址
- 路径格式必须是:/mnt/pool_name/share_name
- 挂载参数填:nolock,soft,timeo=10,retrans=1
测试连接时如果报错,可以尝试在TrueNAS上抓包诊断:
tcpdump -i em0 port 2049 -vv常见错误是端口映射问题,这时需要在路由器上固定2049和111端口。
格式化网络硬盘时要有耐心,我遇到过4TB硬盘格式化花了2小时的情况。期间千万不要重启,否则可能损坏文件系统。格式化完成后,建议立即做个存储测试:手动触发摄像头报警,检查TrueNAS上是否生成对应视频文件。
5. 性能优化与故障排查
长期运行后可能会遇到录像卡顿问题,这时候要看三个指标:
- 网络吞吐量(ifconfig看错包率)
- 磁盘IO延迟(zpool iostat 1)
- ZFS ARC命中率(arcstat.py)
我的调优经验是:
- 增加ZFS日志设备(哪怕用U盘也行)
- 调整录像码率到4096Kbps以下
- 设置zfs set primarycache=metadata tank/surveillance
有个典型案例:某超市系统每到晚上就丢录像,最后发现是保洁用高压水枪冲洗地面时,网线接头进水导致网络闪断。解决方法是在摄像头配置里把"存储重试间隔"从默认5秒改成30秒。
对于多摄像头场景,建议每个摄像头单独建dataset。这样既能隔离故障,又能方便设置配额。比如:
zfs create tank/surveillance/cam1 zfs set quota=500G tank/surveillance/cam1最后提醒下,监控系统最怕突然断电。我现在的方案是给TrueNAS主机接了个UPS,然后在系统里配置了自动关机。有次市电故障,这套机制保住了正在写入的8个摄像头录像。配置方法:
pkg install nut vi /usr/local/etc/nut/upsmon.conf # 添加: MONITOR ups@localhost 1 monuser secret master