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

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

最后更新:2019/06/28 - 工程仍在继续

阅读全文 »

上一篇《家用服务器之存储篇:选择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. (最重要的)免费!

安装

首先去微软的 Evaluation Center 下载 Windows Hyper-V Server 2016。(其实现在已经有 2019 版,但是因为 Windows 1809 更新出现问题暂时下架了)

这里要注意,虽然语言选择里面有中文,但是还是推荐安装英文版。因为 Hyper-V Server 没有图形界面只有 PowerShell,很多设置都要通过命令行更改,安装中文版的话,例如防火墙规则什么的都是中文版,跟网上找到的各种教程有出入,设置起来比较麻烦。

安装很快,重启进入系统之后,先设置密码,然后果然只有一个命令行和一个服务器设置工具(也是命令行)。

这里首先要确认远程管理和远程桌面都打开,远程桌面可以选择比较低的加密等级(反正局域网环境)。

开启远程管理工具访问权限

远程管理工具包括 服务器管理器(RSAT)、远程防火墙、远程计算机管理和远程磁盘管理。

服务器管理器(RSAT)

首先在服务器端开启 RSAT。在命令行窗口执行命令 PowerShell。然后执行以下命令。

Enable-PSRemoting
Enable-WSManCredSSP -Role server

然后再客户端开启远程 RSAT。

Enable-PSRemoting
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "<ServerName>"
Enable-WSManCredSSP -Role client -DelegateComputer "<ServerName>"
Enable-WindowsOptionalFeature -Online -FeatureName:Microsoft-Hyper-V -All
cmdkey /add:<ServerName> /user:Administrator /pass

Enable-Remoting-Client.png

如果服务器和客户端不在域里面而是使用工作组的话,需要在客户端打开 DCOM 匿名访问。首先打开 DCOM 设置。

dcomcnfg.exe

然后找到“组件服务” > “计算机” > “我的电脑”,右键单击“我的电脑”,选择“属性”。

dcomcnfg-1.png

在打开的对话框里选择“COM 安全”选项卡,在“访问权限”下面点击“编辑限制...”按钮。

dcomcnfg-2.png

将“ANONYMOUS LOGON”下面的“远程访问”设置成“允许”。

dcomcnfg-3.png

开启更多的远程管理

在服务器的 PowerShell 窗口里执行。(参考来源

netsh advfirewall set currentprofile settings remotemanagement enable
netsh advfirewall firewall set rule group=”Remote Administration” new enable=yes
netsh advfirewall firewall set rule group=”File and Printer Sharing” new enable=yes
netsh advfirewall firewall set rule group=”Remote Service Management” new enable=yes
netsh advfirewall firewall set rule group=”Performance Logs and Alerts” new enable=yes
Netsh advfirewall firewall set rule group=”Remote Event Log Management” new enable=yes
Netsh advfirewall firewall set rule group=”Remote Scheduled Tasks Management” new enable=yes
netsh advfirewall firewall set rule group=”Remote Volume Management” new enable=yes
netsh advfirewall firewall set rule group=”Remote Desktop” new enable=yes
netsh advfirewall firewall set rule group=”Windows Firewall Remote Management” new enable =yes
netsh advfirewall firewall set rule group=”Windows Management Instrumentation (WMI)” new enable =yes
net start vds

安装驱动

一般来讲,装完系统之后还需要装一大堆驱动程序,比如主板、声卡、显卡、PCI-SATA 数据卡等等。

这里推荐在其他的电脑上下载驱动,解包,然后通过 U 盘把驱动程序复制到 Hyper-V Server 上。

如果需要在 Hyper-V Server 上下载驱动,需要用以下 PowerShell 指令。

Invoke-WebRequest <URL> -OutFile <FileName>

如果出现无法建立 SSL/TLS 连接,需要先设置安全协议

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

解包需要用到以下 PowerShell 指令。(更多压缩包方面的指令请参见这里

Expand-Archive -LiteralPath <Zip-File> -DestinationPath <Path>

然后使用 PnPUtil 安装驱动程序。

pnputil -i -a <Driver-INF-File>

安装 GUI 工具

设置存储池和虚拟磁盘

备份数据

因为硬盘加入存储池的时候会清除其中的数据,所以数据备份还是必要的。

如果在备份数据的时候遇到文件权限问题,可以用以下命令解决。

takeown /f "C:\" /r
icacls "C:\" /grant Administrators:F /t

建立存储池

首先将硬盘重新初始化。

在服务器管理工具中,重新扫描存储,然后这块刚刚重新初始化的硬盘就会出现在“原始池(Primordial)”里面了。

在把所有硬盘都重新初始化之后,就可以创建存储池了。

存储池建好之后,新建虚拟磁盘。我比较喜欢 parity 布局,就算是有一块硬盘工作不正常了,也可以根据 parity 尽量将数据恢复出来。精简类型则更有弹性,可以创建名义上比可用空间更多的磁盘。只要先创建一个足够大的虚拟,日后只要不停地加新硬盘,然后把新硬盘添到存储池里,不需要对虚拟磁盘做任何改动。但是虚拟磁盘的名义空间越大,其分配表所需要的空间也就越大。

提高存储池性能

如果虚拟磁盘选择了 parity 布局的话,复制文件的时候会发现速度不稳定,先是速度特别快,然后降为 0,如此往复。要修复这个问题,需要将存储池设为“已有备用电源保护”

Get-StoragePool
Set-StoragePool -FriendlyName <StoragePool> -IsPowerProtected $true

向存储池添加新硬盘

首先,新硬盘也要像之前那样先进行初始化操作。然后通过 RSAT 添加到已存在的存储池中。

添加完之后,虽然可用空间已经增加,但是写入的时候还会出现空间不足的提示。所以这里需要多加一个“重新平衡数据(rebalancing)”的操作。

Optimize-StoragePool -FriendlyName "<PoolName>"

从储存池中删除硬盘

首先,要先将硬盘标记为“Retired”,防止写入新数据。

Get-PhysicalDisk
Set-PhysicalDisk -FriendlyName <hdd_name> -Usage Retired

然后,让系统将硬盘上的数据移走。这里要每个虚拟磁盘都执行一遍。

Get-VirtualDisk
Repair-VirtualDisk -FriendlyName <vhd_name>

然后在RSAT里面确认硬盘中的数据已经全部移除(已用空间接近于0)。之后从存储池里删除磁盘。

Remove-PhysicalDisk -FriendlyName <hdd_name>

设置共享

建立非管理员用户

如果需要区分各个使用环境的权限(比如限制视频盒子只有读取权限),就需要建立非管理员用户

$Password = Read-Host -AsSecureString
New-LocalUser "<UserName>" -Password $Password -FullName "<FullName>" -Description "<Description>"

如果提示密码不符合复杂性要求,可以用以下命令关闭密码复杂性检查

secedit /export /cfg c:\secpol.cfg
(gc C:\secpol.cfg).replace("PasswordComplexity = 1", "PasswordComplexity = 0") | Out-File C:\secpol.cfg
secedit /configure /db c:\windows\security\local.sdb /cfg c:\secpol.cfg /areas SECURITYPOLICY
rm -force c:\secpol.cfg -confirm:$false

建立共享

最简单的新建共享的方法就是通过服务器管理器(RSAT)

设置权限

默认的权限是所有人只读,如果需要允许管理员更改内容,需要单独加入规则。

之前试用了一下 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 解决方案了,虽然有延迟,但是至少可以实现联动。

拜 HENkaku 所赐,又把 PS Vita 拿出来耍了耍。

其实,想玩的游戏之前都买过了玩过了,这次 HENkaku 的意义,也就只是可以玩港版游戏(因为有官方中文翻译)和不想再重新购买的游戏(比如已经在 PS4 上买了《刺客信条编年史》三部曲)。

再多扯一点日本游戏。目前日本游戏已经日落西山,游戏理念落后、引擎不给力、点歪科技树可以说是日本游戏衰落的三大原罪。还好有砍瓜切菜的无双类游戏,虽然看起来傻,但是玩上手之后的爽快感的确让人欲罢不能。

《闪乱神乐》系列的卖点无非就是:妹子、巨乳、无双、换装。这次 EV 更是把“忍转身”的动画做到极致,加上多种多样的“摇摇终结技”,绅士感十足。伴随着一声声“夕诺碧·甜心”,神秘的卷轴,色气的过场,让角色和玩家的肾上腺素飙升。

阅读全文 »

WordPress 什么都好,就是太耗资源。我一个 AWS EC2 中型实例居然带不动,MySQL 总是因为资源使用过多被杀掉。网上给出的解决方法是开通 AWS RDS 数据库服务。但是这个网站本身就是个人记录性质,我根本不想再多花钱专门开个数据库服务。

于是,这两天一直在找轻量级的 Blog 系统。这次学乖了,一定要找确定持续开发的、耗用资源比较低的,而且方便迁移的。

轻量级的 Typecho 很对我胃口,先拿过来用着,只是之前整理过的代码、链接、附件什么的又要重新整理一遍了……

自从CES2015上看到Sony的超短距投影仪之后,我一直觉得超短距投影仪才是客厅大屏幕的最终选择。正好前几天看到Amazon上在卖Optoma的超短距投影仪,价格很亲民,就下单买了一台。

等了两个月,投影仪终于到货了。

这款号称能在55厘米距离投射100寸屏幕,亮度标称4000流明的投影仪,优点不用多说,既解决了HDMI走线问题,也适合在采光很好的客厅使用。

实际使用的时候,投影仪大概放置在距离墙50厘米至60厘米之间的地方。

这个距离的投射面积大概是95寸多。

实际使用中,在白天采光条件下一如既往地看不清,但是拉上窗帘之后图像还不错。

其实大多数看电视的时候都是在晚上。在对面有两个40W LED工作室灯照明的情况下,图像依旧可见,但暗色场景就看不清了。

不过,从另一个角度说,小孩子也不会害怕黑色场景了……

综合来看,Optoma这台投影仪基本上能满足客厅需要。