0%

年前买了一个大疆的 DJI Mini 4K 无人机玩, 玩了一两周之后发现对于我这种不经常出去玩的人这东西有点浪费. 于是春节回成都之后果断出了.

出掉无人机之后手里有笔闲钱, 那几天刷咸鱼的时候老给我推送 R730 的帖子, 重新点燃了我置办一台服务器的想法.

于是在一个阳光明媚的周末, 在成都一个前辈的手上淘了一个, 去拉了回来.

配置

  • 型号: Dell PowerEdge R730xd
  • CPU: Intel E5-2680v4 * 2
  • 内存: DDR4 ECC 16G * 8
  • 硬盘: Nvme 2T * 2 + u.2 1T * 1 + SAS 4T * 2 + SATA 1T * 1
  • 阵列: H730 mini 1G
  • 整机: 3.5硬盘架 * 12 + 2.5硬盘架 * 2
  • 电源: Dell 绿标 750W * 2

买的时候没有带硬盘, 因为我本来有一些 Nvme 和 一块存数据的机械盘, 后来就只在网上买了两块 DELL 的 SAS 二手机械盘用来做实验用.

至于那块 u.2 基本就是交的学费了.

踩坑

硬盘问题

硬盘位不支持 u.2 硬盘

这台 R730xd12+2 版本的, 硬盘架本身支持 3.5/2.5 SAS/SATA, 但由于当天太激动, 不小心买了个 u.2 的硬盘回来, 结果后来仔细一琢磨才发现 SASSATA 是一类, m.2 Nvmeu.2 是另一类.

SASu.2 接口只是长得很像, 但是 u.2 是走 Nvme 协议的!!!

u.2 硬盘因为接口和 SAS 有兼容性支持, 所以倒是能插进硬盘位, 但是无法使用(需要转接卡, 后面介绍).

这里罗列了一些不同协议/接口的区别:

接口 速率 垂直市场 建议
IDE - - 基本过时, 不必考虑.
SCSI - - 基本过时, 不必考虑.
SATA 3.0 6Gbps 家用 家用和服务器都能跑, 无特殊需要可以冲, 价格也可以. 但注意, R730 对普通 SATA SSD 兼容不好, 会改变散热策略导致风扇转速下不去.
m.2 SATA 6Gbps 家用 其实就是SATA固态的小体积化产品, 有了 m.2 Nvme 之后, 这种接口逐渐过时. 只是顺带罗列一下, R730 没有这种接口.
SAS/SFF-8643 12Gbps 商用 二手3.5机械盘便宜, 速率高, 有服务器并且用来存数据建议优选; 2.5机械或2.5固态不是土豪就就别选了, 贼贵.
m.2 Nvme/NGFF 32Gbps 家用 目前国内的 Nvme 也很便宜了, 速率也超快, 买来做系统盘很合适, 但是在 R730 需要 PCIe 转接卡.
u.2/SFF-8639 32Gbps 商用 这个也是 PCIe 速率的, R730 不能直接支持, 也需要 PCIe 转接卡, 价格的话比 Nvme 贵.

风扇问题

未认证 PCIe 设备温控失效

这点就不得不提戴尔"专业"的白名单机制了: 戴尔的机器(有的家用设备也是如此)一直都有一个白名单列表, 在白名单列表的设备是经过戴尔认证的设备, 如果接入设备不在这个列表里面, 轻则影响系统, 重则直接无法使用.

市面大多数家用 PCIe 都会引起温控反应.

表现就是插上这些 PCIe 设备(也包括经过 PCIe 转接的设备), 机器的风扇转速就蹭蹭上来了, 大约保持在 50% 左右, 并且会保持这个转速下不去, 很吵人.

这个问题广大网友和戴尔的官方支持倒是给了解决方案, 使用 ipmi 关闭 未认证 PCIE 温控策略:

# 查询系统默认针对第三方PCIE设备的风扇配置
ipmitool -I lanplus -H <iDrac_IP_Address> -U <Username> -P <Password> raw 0x30 0xce 0x01 0x16 0x05 0x00 0x00 0x00
# 打开第三方PCIe卡的响应
ipmitool -I lanplus -H <iDrac_IP_Address> -U <Username> -P <Password> raw 0x30 0xce 0x00 0x16 0x05 0x00 0x00 0x00 0x05 0x00 0x00 0x00 0x00
# 关闭第三方PCIe卡的响应
ipmitool -I lanplus -H <iDrac_IP_Address> -U <Username> -P <Password> raw 0x30 0xce 0x00 0x16 0x05 0x00 0x00 0x00 0x05 0x00 0x01 0x00 0x00

来源: 戴尔-支持库:如何在 PowerEdge 13G 服务器上禁用第三方 PCIe 卡默认冷却响应。

插入普通 SATA SSD 温控失效

这也是戴尔的白名单机制导致的, 他认为这个SSD不是他测试过的, 为了避免发热影响系统, 所以强行拉高基础散热转速.

而这里这个 “普通” SSD 按照我目前的理解, 几乎国产的一线二线 SSD 都不在兼容列表里面, 还包括我之前买的一块 “金士顿” 的固态盘.

表现就是插上这些 SSD 之后, 风扇转速大约保持在 35% 左右, 并且会保持这个转速下不去, 比起 PCIE 的转速来说好一些, 但也有点吵人.

目前除了不使用 SATS SSD 之外, 暂时没有找到优雅的解决方案.

网上有很多人关闭了自动温控, 倒是能规避这个问题, 但是我觉得不优雅, 没有采用.

强制手动温控可以通过 iDrac 设置, 也可以使用 ipmi 设置:

# 关闭风扇自动控制
ipmitool -I lanplus -H <iDrac_IP_Address> -U <Username> -P <Password> raw 0x30 0x30 0x01 0x00
# 开启风扇自动控制
ipmitool -I lanplus -H <iDrac_IP_Address> -U <Username> -P <Password> raw 0x30 0x30 0x00 0x00
# `0x0a` 为10的十六进制值, 意为手动设置风扇转速为10%.
ipmitool -I lanplus -H <iDrac_IP_Address> -U <Username> -P <Password> raw 0x30 0x30 0x02 0xff 0x0a

调教

使用 m.2 Nvme 固态硬盘

由于普通 SATA SSD 目前无法安静使用, 所以我把系统啥的都转移到 m.2 Nvme 硬盘里面了.

于是在淘宝买了一张 牛逼的 转接卡, 他可以同时插入 4 个 m.2 Nvme 硬盘, 但前提是需要系统支持 PCIe 拆分, 刚好 R730 就支持.

PCIE转Nvme.png
淘宝链接: https://item.taobao.com/item.htm?id=648207009697

这是一张全高的 PCIe 转接卡, 毕竟硬盘尺寸已经超过半高的高度了.

使用 u.2 硬盘

本来我计划把那个 u.2 的硬盘退了的, 但后来发现这种盘寿命很持久, 加之二手的价格一般, 就决定用起来.

后来还发现另一个不太重要的意外收获: 本来 R730 是不支持 Nvme 启动的, 但我这块 u.2Intel 的企业盘, 内置引导, 可以让 R730 从这块硬盘启动系统.

但这已经不重要了, 因为我刷了 BIOS, 让普通 Nvme 也支持引导系统了.

要想使用 u.2 硬盘得整一个 PCIe 转接卡:
PCIE转U.2.png
淘宝链接: https://item.taobao.com/item.htm?id=610257462610

这也是一张全高的 PCIe 转接卡, 毕竟硬盘尺寸已经超过半高的高度了.

支持 Nvme 引导

这台 R730 由于年代久远, 和我之前玩过的 HP EliteDesk 800G 一样, 都需要刷 BIOS 来支持 Nvme 引导.

不同的是以前 HP EliteDesk 800G 我是拆 Flash 下来使用编程器刷的, 而这台 R730Flash 芯片我一时没找到, 另外这玩意不好拆, 担心搞坏了, 研究了几天之后发现资料不多.

最后果断找小黄鱼, 找高手帮我远程刷了一下…

刚好这老哥不小心把资料留到我手里了, 我也搞清楚是这么回事了…

简单提一下就是编辑 BIOS 导入完整的 EFI 驱动, 然后去 DOS 环境刷写 BIOS, 各位有需要也可以找我啊~~~

这是现在支持 Nvme 的启动选项:
Nvme引导.png

绑定 iDRAC 网络到普通网口

默认情况下, 从网络访问 iDRAC 需要连接 iDRAC 的专用网口, 在我这家用场景很不方便.

稍微琢磨了一下发现是可以把 iDRAC 绑定到普通网口的, 这样我就只需要插一根网线到机器上面, 能同时兼顾业务和运维了.

iDRAC 控制台里面按照一下路径设置既可:
iDRAC绑定NIC.png

通过 BIOS 也能配置:

  1. 重启, 进入 系统设置
  2. 进入 iDRAC设置
  3. 进入 网络 设置
  4. 设置 NIC选择, 选中为需要绑定的业务网口(默认为"专用")
  5. 保存并重启应用

但是需要注意, iDRAC 会使用独立的 MAC, IP分配上不要让 iDRAC 的 IP 和 NIC 本身的IP冲突了.

配置 iDRAC/IPMI 直通操作系统

默认情况, 在机器内的操作系统不能访问自身的 iDRAC/IPMI 接口的, 有需要的话可以配置开启一下:
iDRAC直通操作系统.png

通过 BIOS 也能配置:

  1. 重启, 进入 系统设置
  2. 进入 iDRAC设置
  3. 进入 通信权限 设置
  4. 设置 直通配置, 选中为 LOM
  5. 保存并重新引导生效

配置 PCIe 拆分

上面提到我那个支持多个 m.2 Nvme 固态转接卡需要拆分 PCIE 支持, 原理就是把一个 x16 的接口拆成 x4 * 4 接口, 分区驱动每个硬盘.

R730 上面的 PCIe 虽然插槽都是 x16 的尺寸, 但是有些插槽实际是 x8 的接口, 并且这些插槽关联着不同的 CPU, 如果是单路跑的话, 需要注意对应关系.

配置 PCIe 拆分只能在 BIOS 里面设置, 路径为:

  1. 重启, 进入 系统设置
  2. 进入 系统BIOS 设置
  3. 进入 集成的设备 设置
  4. 进入 Slot Bifurcation 设置(在页面最底下)
  5. 按需要配置插槽拆分规则
  6. 保存并重新引导生效

PCIe拆分.png

另外, PCIe插槽、提升卡以及 CPU 之间的对应关系我也都整理了一下:
PCIE插槽详情.jpg

配置 RAID 单磁盘直通

如上所述, 我这台机器有一张 H730 mini 阵列卡, 之前我一直担心一个问题: 这个卡能不能支持硬盘们部分 RAID 部分直通.

现在我知道答案了: 完全可以.

比如我的机械盘配置: SAS 4T * 2 + SATA 1T * 1, 其中两块 SAS 盘就是我用来组 RAID 做实验用的, 另外一块 SATA 盘就是我之前的数据盘, 现在用来直通给内部虚拟机跑共享的.

需要注意的是, 机械盘为默认都是被 RAID 阵列卡管理的, 插上之后并不能直接使用, 会有一个初始化动作, 看需要是加入阵列还是配置为 非RAID(直通) 模式.

RAID 网上的资料很多, 我就不记录了.

重点是对某块盘单独直通, 网上的资料不是特别多, 简单记录一下(建议进入 BIOS 设置, 通过 iDRAC 设置经常遇到任务挂起无法生效的情况. 以下为通过 BIOS 设置步骤):

  1. 重启, 进入 系统设置
  2. 进入 设备设定 设置
  3. 进入 Integrated RAID Controller 设置
  4. 进入 物理磁盘管理 设置(在页面最底下)
  5. 选择需要操作的磁盘
  6. 继续在"操作"选项中选中切换为非RAID
  7. 保存并重新引导生效

切换磁盘为直通-BIOS.png

  1. 截图里面因为已经设置成 非RAID 模式了, 所以只有 切换为支持RAID 选项.
  2. 另外如果不知道硬盘物理对应关系, 可以使用 闪烁 操作, 让硬盘的LED灯闪烁方便区分.

切换磁盘为直通-iDRAC.png

使用

性能

性能当然杠杠的, 毕竟核心那么多, 缓存也比家用 CPU大.

不过单核确实一般般, 用来跑大游戏可能不怎么行.

具体感受就是: 全量编译 Android 15 源码, 一个半小时搞定, 你就说快不快吧.

想想之前我用 i7-7700 要跑8个小时呢.

功耗

当然功耗也不小, 以前当服务器用的的 Q270 主板和 i7-7700 处理器搭配主机, 待机不过 40W, 满负载也就 120W.

现在就不一样了, 双路 E5-2680v4 待机也要 120W, 满负载开风扇的情况下, 基本就是 300W-400W 的样子了.

单路的话, 开最强节能, 并且配件不多的情况, 待机我试过可以到 80W 左右.

还是有点心疼呢…以至于我本来打算的卖掉之前用的主机, 还是决定先留着…

噪音

这个因为我是放到阳台, 中间有双层玻璃隔了一下, 试过开 20% 转速基本听不到.

我个人表示完全可以接受.

放张图记录一下:
工作间.jpg

资料

最近项目组很多新项目都使用到了 Git LFS, 解决了 Git 大文件提交容易导致仓库尺寸爆炸的问题.

Git LFS: 简单来说就是用来存储源码仓大文件的, 会把大文件放在"别的地方"存储, 保持源码仓的 Size.

有必要学习一下基础用法.

阅读全文 »

在之前的博客中介绍了一个差分包工具 zstd(虽然说人家的专业是压缩软件,谁让它的差分能力那么出众呢)。

使用 Ztsd 代替 bsdiff/bspatch 差分还原文件

这货很能打,用起来也很爽。但是有个痛点就是制作差分包的时候有文件大小限制:不支持大于 2G 的文件。

但是在使用中经常遇到这种情况,为了彻底不再忍受 bsdiff 那蜗牛般的速度,遂决定通过修改 ztsd 源代码来支持对 2G 文件的支持。

阅读全文 »

最近想写点桌面小工具,语言已经确定了用 Go,于是把市面上常见的几个 UI 库简单对比了一下。

除了对比,也会记录一下我对它们的主观评价,便于下次使用的时候参考。

评价的目标是用于个人使用,会考虑性能、资源消耗、依赖以及上手难度等维度。性能数据只做浅度分析,场景是跑一个 Demo 用例,分析磁盘、内存、CPU的消耗情况。

阅读全文 »

Windows 上编译 GUNC/C++ 代码,需要用到 MinGW-w64 的编译环境。

MinGW-w64 的全称是 Minimalist GNU for Windows 64-bit,其主要目标是提供一个最小化的、可以运行 GNU 工具链的 Windows 环境。它包括了许多常见的 GNU 工具和库,如 GCC(GNU Compiler Collection,GNU 编译器集合)GDB(GNU Debugger,GNU 调试器) 等,以及一个 Windows 兼容的 POSIX API 实现。这些工具允许开发者在 Windows 上编写、编译和调试 C/C++ 等编程语言的代码,同时也能运行许多在 Unix 系统上编写的脚本和工具。

MinGW-w64MinGW 的升级版,MinGW 是一个 GNU 编译器链,它提供了 CC++ 编译器,以及一些其他工具,如 makegdb 等。MinGW-w64MinGW 的一个分支,它提供了与 MinGW 相同的功能,但同时支持 64 位32 位 的编译。

阅读全文 »

最近有个需求:有一个系统应用,在某个业务时执行了一些 shell 命令,操作系统中的网络接口。随着版本迭代需求演进,要把这些 shell 命令迁移到 framework 中执行。

想当然的认为没什么难度,但属实是踩了一坑。

阅读全文 »

Go 的模块默认从 GOPROXY 环境变量获取。这个变量默认指向 https://proxy.golang.org/

很遗憾正常情况国内是无法访问的。

好在国内和国外有一些镜像站,可以配置之后使用。

阅读全文 »

Git for WindowsGit 官方的 Windows 版本,它是基于 MSYS2-Mingw-w64 的,所以 Git for Windows 也是一个微型的 MSYS2

但是 Git for Windows 安装后却没有 MSYS2 的包管理器 pacman,可以考虑手动安装。

网上大部分博客的描述都已经过时,有的需要去外网下载依赖。折腾之后记录一种简易的安装方式。

阅读全文 »