之前我曾经写过一篇《家用服务器之网络篇:1Gbps已经不够用了!》,里面提到了使用网络连接聚合(LAG,Link Aggregation Group)把四个 1Gbps 的连接合并成一个 4Gbps 的连接。

但是,最近在做网络调试的时候发现,两台都配有 4Gbps 网络连接聚合的服务器,它们之间的通信速度居然只有约 1Gbps!就算使用 802.3ad LACP 作为聚合方式,最高也只能跑到 1Gbps。后来查了资料,发现网络连接聚合的目的

  1. 并不是加大点到点通信的带宽,
  2. 只是可以增加点到多点通信的能力,
  3. 顺便可以提供备用链路

这与我需要的“增大文件传输带宽”目的想去甚远,于是又寄希望于多通道 SMB(SMB Multichannel)。

阅读全文 »

小米小方可以说是市面上最廉价的家庭安防摄像头。虽然官方固件只支持云端录像,但是仍然有大神做出了 RTSP 固件,让小方可以加入本地安防录像系统。第一代使用 ARM 处理器的小方有 fang-hacks,第二代使用 T20 芯片的小方 1S 有 Dafang-Hacks,但是使用 T20L 芯片的新版小方 1S 却打着“不支持”标签。

其实 T20L 只是 T20 的低配版本,通过调整 Dafang-Hacks,也可以给 T20L 版的小方 1S 刷上 RTSP 固件。

阅读全文 »

1Gbps 真的不够用了吗?或许吧。但是考虑到现在的路由器动不动就 AC1900、AC2600、AC3200,只接一根 gigabit 网线肯定是无法提供那么大带宽的。这时候就需要靠网络连接聚合(LAG,Link Aggregation Group)来提升速度了。原理很简单,一根网线 1Gbps,两跟网线就是 2Gbps,三根网线就是 3Gbps……

服务器当然也可以这样搞。于是最近热衷于淘垃圾的我,又打开 eBay,在垃圾堆里找了一块四口 gigabit 网卡。

阅读全文 »

因为嫌之前用的 Asus Z97-C 上面有太多用不到的 PCI 接口(不是 PCIe),而且仅有的一条 PCIe x16 又没办法分成两个 x8 使用,用来做外部扩展的 Dell H310 只能跑在 x4 模式下面,性能损失较大。于是就去 eBay 买了块很便宜的拆机主板 Asus Z97M/G30AK。

首先这款主板是 mATX 尺寸,机箱里就省出三个 PCIe 插槽的位置可以放 HP SAS Expander 卡。其次这款主板上面的四个扩展槽全部都是是 PCIe,而且可以把 x16 分成两个 x8 使用。完美符合我的需求。

但是,有个问题,这主板的 BIOS 没有 NVMe 支持,也没有内置 SLIC(很怀疑之前机器上怎么装的 Windows)。于是,只能通过修改 BIOS,至少加入 NVMe 支持。

阅读全文 »

经过几年的积攒,服务器的硬盘位终于塞满了。于是再扩展硬盘位就变成了一个问题。

之前一直靠 USB 3.0 外置硬盘盒,但是每个硬盘位都需要至少 $20 扩展成本(买硬盘盒)。而且连接速度和稳定性也不够理想,在将外置硬盘加入存储池时也会遇到各种各样的问题。

直到发现 HP SAS Expander 这块扩展卡之后,这个问题终于能得到比较可靠的解决方法了。(关于扩展卡,详见我之前的文章《家用服务器之存储篇:大规模存储背后的简单实现》)

因为自己拼装一个硬盘架需要各种零件,各个订单的到货时间也都不一样,这将会是一个持续得比较久的工程,所以本文将尝试采用更新记录的方式,边做边更新,看看需要花费多长时间,进行多少尝试,才能完成这么一个硬盘架。

阅读全文 »

上一篇《家用服务器之存储篇:选择SATA/SAS控制卡》里面推荐了 Dell PERC H310 这款 SAS/SATA 控制卡。但是一块 Dell H310 只能接 8 块硬盘,两块 Dell H310 加上主板上的 SATA 接口一共能接 20 块硬盘。那么如果多于 20 块硬盘呢?如果以后还要扩展外置存储呢?

接下来我就要再介绍一个实用的 SAS Expander 扩展卡。

阅读全文 »

之前家里的服务器一直用着破烂 AMD 推土机架构的 FX-6100,早就看着不爽了,于是这次趁着全家电脑升级,将服务器也升级到四代酷睿。同时也针对服务器最重要的存储部分做了一次彻底的升级。

其实,在此之前,家里服务器陆陆续续用过不少存储方案。本文将记录各种我使用过的存储方案,并一一分析其中的优缺点。

阅读全文 »

Update 2019/05/26: 由于服务器已换装 Windows 10 做系统,本文将不再更新,缺失的屏幕截图也不会补上。

服务器上的硬盘越来越多,数据也存放得越来越乱。不仅出现了数据跨盘,在硬盘出现问题的时候也容易丢数据。自从发现了 Windows Server 的 Storage Spaces 功能之后,便琢磨将硬盘做成阵列,由系统控制,然后在上面搭建虚拟磁盘,或许是一个很好的解决办法。

无奈 Windows Server 2012 的 Storage Spaces 功能太有限,于是就更新到了 Windows Hyper-V Server 2016。至于原因嘛,

  1. 最小化系统,轻便。
  2. 原生支持文件共享(SMB/CIFS),其他机器可以直接访问数据。
  3. 可以用 Hyper-V 搭载 Linux/Android 等等虚拟机。
  4. (最重要的)免费!

阅读全文 »

之前试用了一下 ArduCam Multiple Camera Adapter,基本上实现了一个 Raspberry Pi Zero 拖四个摄像头。但是缺点也是显而易见的:

  1. 贵!这个多摄像头转接板在 RobotShop CA 上面卖 $64.99+tax。
  2. 慢!每个摄像头拍一张照片大概要 5 秒,四个摄像头只能顺序拍摄,不能同时拍摄

于是,想出一个念头,能不能用 Pi Zero Cluster 来代替这个转接板呢?

阅读全文 »

Windows Server 2012 服务器出现这个问题有一段时间了,具体来讲就是一个应用程序打开了服务端口,绑定地址 0.0.0.0 (所有网络接口),防火墙入站设置正确,端口可以通过 localhost 或者 127.0.0.1 访问,但是无法通过局域网 IP 访问。

然后把端口改到 50000 以上又可以访问了。

今天跟这个问题较上劲了,一点一点改端口,然后发现 47000 以下基本上都无法访问,47001 就没问题了。顺着这个线索找到了故障的根本原因:DirectAccess/WinNat 默认占用 6001-47000 端口,用来做 IPv6-to-IPv4 转换

解决起来也很简单,重新分配一下 WinNat 占用的端口就好了。

Set-NetNatTransitionConfiguration -IPv4AddressPortPool @("192.168.1.100, 10000-47000")  

或者干脆卸载 DirectAccess(远程访问角色)。


多说几句,自从使用了 Raspberry Pi(后来改用 Orange Pi)来做家里的 DHCP/DNS/VPN 服务器,家里网络比之前灵活多了。Windows Server 2012 安安心心做文件服务器,各取其所长,各司其职,网络问题也少了很多。

虽然 root 掉了 OnHub,但是目前只能 telnet 进去。进去之后发现 OnHub 真是贫瘠,里面可以说是一穷二白,连个 GCC 都没有。

在网上找了个 ChromebrewGitHub),但是 OnHub 本身没有 xz,也没办法解压那些软件包。

于是问题变成了怎么样安装 xz,毕竟 OnHub 上连 GCC 都没有。

于是顺着 Chromebrew 找到了 chrome-cross,这个专门交叉编译 Chrome OS 软件包的项目。于是,拿来主义,fork 之后加上了 xz。

再之后就顺利多了。Chromebrew 用了 OnHub 上没有的 wget,解决办法就是 fork 之后用 curl 代替 wget。

把这些七七八八的都修改好之后,终于可以往 OnHub 里面安装软件包了。

export LD_LIBRARY_PATH=/usr/local/lib
crew install buildessential
crew install nano

传统的家庭网络

家庭上网,一般都是通过 ISP 的猫(modem)和一个路由器,这种传统已经维持了十几年,只不过是从十几年前的有线路由器演变成了后来可以提供 WiFi 的无线路由器。现在有些 ISP 会在自己的猫里面内置 WiFi,从而节省一台设备。但是 ISP 的猫性能参差不齐,所以像我这种比较在乎性能的人,一般都是将猫设置成桥接模式,然后使用自己的路由器。

但是 IoT(物联网)时代,联网设备增多,而且分散在家里各个角落,这对网络布设提出了新的要求。

  • 可以同时管理大量设备
  • 很大的无线信号覆盖范围
  • 足够的网络吞吐量

一般来讲,放置无线路由器的最佳地点是在房子的正中央。但是考虑到 ISP 的入户线路一般都在家里的一侧,这也限制了无线路由器的位置,家里很容易出现无线信号死角。比如说我家里,猫和路由器(Netgear R7000)就放在了房子的一个角上,房子对角线位置就是一个无线网络死角。这时候信号扩展产品就应运而生了。

WiFi 信号扩展器和接入点(AP)

要扩展 WiFi 信号,方法无外乎两种。要么用 WiFi 信号扩展器延展覆盖范围,要么干脆再加一个接入点,专门服务死角区。但是两个方法都有问题。WiFi 信号扩展器会影响无线网络性能,如果家里有需要高带宽的设备(如高清摄像头),比较好的办法是再加一个接入点。

所以,之前我买了一个 Google OnHub 拿来做接入点使用。但是在系统更新到 9000 版本之后,OnHub 的信号突然变弱了。我猜想可能是因为 Google 推出 Home 无线套装,为了让各个节点之间不互相干扰,人为降低了主路由器的传输功率。当然这只是猜测。不管怎么样,Google OnHub 的覆盖范围变小了。于是我就又尝试了几个接入点,都不尽人意。而且作为主路由器的 Netgear R7000 也出现短板。

家里面各式各样的设备林林总总加起来几十台,为了管理方便,我把设备分类,按类别给设备分配好了 IP 地址。但是 Netgear 路由器的最多才能预留 64 个 IP 地址(IP Reservation for DHCP),实际要分配 IP 有 77 个之多,现在主流三大厂商(Linksys、Netgear、D-Link)的设备都无法管理这么多 IP 分配。

我尝试将上古时期的 Netgear WNDR3700 刷上 DD-WRT 来绕开 64 个地址的限制,但是第三方固件就是第三方固件,运行不稳定,而且经常网络卡壳。我觉得有可能是硬件太老,拖不动这么庞大的网络,于是我又开始找商用路由器。

将设备放在正确的位置

商用路由器毕竟还是贵。我突然想到,Google OnHub 到底能预留多少个 IP 呢?

于是我将 Google OnHub 和 Netgear R7000 调了个位置,由 OnHub 当主路由器,R7000 作为接入点。果然,R7000 的功率相当强,覆盖整个房子没有任何问题,就连地下室角落里的摄像头都能流畅传送视频数据。而 OnHub 虽然在操作上比较麻烦,但是也顺利地加入了 70 多个预留地址。这样省了买商用路由器和商用接入点。

Google Onhub 的问题:

  • 不能关掉无线网络
  • 要预留 IP 地址,必须要设备联入网络才行,不能手工输入 mac 地址
  • 端口转发只能一个端口一个端口设置,不能设置端口范围转发
  • 不能设置子网网段,必须用 192.168.86.x
  • 不能设置 OnHub 的 IP 地址,必须用 192.168.86.1
  • 遇到过一次 DNS 停止工作(设置的是“使用 ISP 的 DNS 设置”)
  • 端口转发不靠谱,设置完之后不会立即生效

网络规模究竟能达到多大?

这个问题不好说。尤其是 IoT 时代,如果每个插座、每个开关都接入网络,并且都要分配 IP 的话,网络节点规模和数据规模就不是现在这些设备能处理的了。无线设备多了不仅会互相干扰,还会互相抢占传送时段,拖慢整个网络。有线设备增加则需要更精确的流量控制,使网络资源在各类设备之间达到平衡。

总之,十几年前的“一个路由器搞定一个家庭网络”的时代基本上已经结束了。如果要更好地优化家庭网络,不仅要增加接入点扩展网络覆盖,而且需要换一个更强劲的路由器来管理网络才行。

当一样东西变“智能”了之后,最大的变化就是售价变贵了。

举个例子,当我在选择“智能”窗帘的时候,带有 Z-wave 的窗帘全套下来大概要 CAD $500,而跟谁都连不通的 Lutron 报价快上 CAD $1000 了。于是,我当时选择了红外遥控的 BEME eRod,心想着自己用 CC2530 做一个 Zigbee-to-IR 桥接器不就好了。但是后来发生的事情就脱离了我的控制:找不到靠谱的 CC2530 IR 例程,而且深度开发工具 IAR 居然要收费。

然后我就想到了 Harmony,因为 SmartThings 支持 Harmony 集成,如果可以通过 Harmony 控制,也能达到预期效果。于是,我买了最便宜的(已经停产的)Harmony Link。结果发现如果要跟 SmartThings 集成,最低也要 Harmony Hub。好像扯远了,总之,Harmony Link 这个家族老前辈是不能用来智能家居的。

Harmony 的一大优点就是详尽的设备数据库。添加设备过程中可以直接从数据库中获取 BEME eRod 的红外指令,无需另外教红外指令。另外,我在客厅部署的 Philips Hue 灯泡也可以由 Harmony 直接控制。

这样一来,我只需要建立一个活动,把窗帘和灯泡都包括进去,再在合适的时间触发/关闭这个活动就好了。本来还想着用 SmartThings 来根据日出/日落时间触发,后来在建立活动的时候发现 Harmony 本身就有按时间触发功能,省了很多事,至少不需要去 SmartThings 的“云”上面走一圈了。

为了游乐间内照明需要,多加了一组灯,同时为了方便控制,便多加了一个开关。为了能让智能家居系统控制灯光,两个开关均选用 GoControl WD500Z-1 (Linear和2gig是同一个产品的另外两个品牌分支),Z-wave 协议的可调光开关。

本想着可以暂时将两个开关组合成一个三路开关,这是最简单的设置,以后再根据 Logitech Harmony 的场景进行配置。但是,这个三路开关已经搞得我焦头烂额。

说一下迄今为止我做过的尝试:

  1. 将两个 WD500Z 加入到 SmartThings 的 Z-wave 网络,通过 SmartApp(比如 Smart Lighting)实现联动。但是问题是延迟太大,第二个开关需要 6-10 秒才能点亮,因为开关本身就有两秒延迟(“渐亮”之后才会给 Hub 更新状态)再加上云端处理延迟。甚至我为此自己写了一个 SmartApp,利用 dim 100% 代替 switch on,虽然能快两秒(没有“渐亮”过程),但是延迟依然很大。

  2. 将两个 WD500Z 加入到 Staples Connect 的 Z-wave 网络,通过 automatic activity 实现联动。但是加入到 Staples Connect 之后发现,不能使用 WD500Z 作为事件触发条件。

  3. 使用 Aeon Labs Minimote 将两个 WD500Z 利用 Z-wave association 关联起来。但是实际操作的时候发现,无法关联两个开关,只能关联一个开关和一个配件(传感器或者类似 WT00Z 这类的附属开关)。

所以最后还是回到 SmartThings 解决方案了,虽然有延迟,但是至少可以实现联动。