Hardware

共 46 篇文章。

如何:远程刷 Seagate 硬盘固件

• Hardware

🚨 警告

刷写硬盘固件时的不当操作可能会导致硬盘无法使用。本人不承担由于使用本文中介绍的内容所导致的任何后果的责任。

📜 历史文件已不具备现实意义

本文章提到的硬件已过时。

上回 说到 谷奥 的一块硬盘坏了,但是忘记说实际上两块硬盘的固件都有已知问题(ST1000DM003-9YN162 固件版本 CC4D,目前的最新版本是 CC4H)。虽然在 ticket 里提到了这件事,但是 remote hand 没做升级,想想之后决定还是自己把它远程刷掉好了。

由于刷写不当会导致硬盘无法使用(实际上还是有办法恢复的,但是比较麻烦而且没法在远程做),因此为了以防万一,在执行任何操作之前应备份硬盘上全部数据。由于使用的是 graid 的镜像模式,因此事实上我们有一份完整备份,故跳过这一步。

接下来要从 Seagate 网站下载固件。考虑到刷新固件操作的危险性,不知道怎么找这个固件的人可以看到这为止了。

阅读全文… ( 本文约 974 字,阅读大致需要 2 分钟 )

Seagate Barracuda LP固件升级笔记

• Hardware

其实 FreeBSD 本身的 camcontrol(8) 内建了用来刷硬盘/SSD固件的 ‘fwdownload’ 功能,不过因为正好也要稍微调整一下网络的配置,考虑了一下还是去机房本地做好了。

之前 Doug 的观点是刷固件有风险,所以没问题尽量别刷。不过,新版 smartmontools 没事就 nag 一下这事实在是很烦,加上网上找到的说明相当吓人:

The drives are clicking because they are recalibrating due to vibration, the reason they are only exhibiting this issue during idle is because the drive will only recalibrate when idle.

Doing a firmware update to CC35 should resolve this issue.

If it does not you should attempt to mount the drives in a different configuration, we have see using rubber washers can magnify the vibration.

所以还是升级一下好了。CC35 版本固件可以从 这里 下载。

阅读全文… ( 本文约 581 字,阅读大致需要 2 分钟 )

Lenovo T530

• Hardware

去年 公司给换了一台 Asus 笔记本,不过因为这个笔记本本质上是个台式机,不便于携带,因此我又买了一台 MacBook Pro 来自用。今年一月份到匹兹堡出差,发现还是需要一台能随身携带的笔记本,所以公司又订了一台 Lenovo T530。

阅读全文… ( 本文约 634 字,阅读大致需要 2 分钟 )

LSI SAS HBA固件

• Hardware

最近我厂对 LSI 6Gb/s SAS HBA 的驱动 (mps(4)) 进行了改进,令其可以在 FreeBSD 环境中进行固件刷写操作。目前最新的固件版本是 14,这个版本修正了目前已知的全部问题。

以前一直没有太注意,这类 HBA 卡上可以用两种固件。一种是 IT (initiator target) 固件,这类固件只提供HBA功能;另一种是 IR (integrated RAID) 固件,这类固件提供集成 RAID 功能。对于我们的应用来说,显然希望用 IT 固件,因为它的代码量要少得多,而由于减少了包含校验的冗余,卡本身的 RAID 功能在 ZFS 环境多数情况下都是有害的。

阅读全文… ( 本文约 376 字,阅读大致需要 1 分钟 )

Asus笔记本安装 FreeBSD 笔记

• Hardware

祸不单行。继 老婆 笔记本坏掉之后,我的也在周一突然坏掉了。因为已经过保,找来 Dell 的维修手册做了初步诊断之后认为是主板问题,简单尝试了下没有修好,所以找老板商量,暂时买了一台 Asus G75VW 来用。

阅读全文… ( 本文约 584 字,阅读大致需要 2 分钟 )

#lspe之Disks

• Hardware

今天去 Y! 参加了 #lspe 的一个交流会。

比较感兴趣的项目是之前了解过但仔细看过的 FlashCache,这是 Facebook 搞的一个 SSD 加速模块,原理不复杂,是在文件系统下面做上一层集关联(set-associative)高速缓存,提供了LRU和FIFO两种淘汰方法。这次 Mohan Srinivasan 讲解的时候提到了以前公开发表的讲稿上没有的一个内容—-按线程id/线程组id去做的黑白名单,并对MySQL进行了修改,令其在扫描表时不做cache。从使用的角度,这个不失为一个不错的折衷方法。

阅读全文… ( 本文约 621 字,阅读大致需要 2 分钟 )

配合 APC BE550G UPS 的 apcupsd 配置

• Hardware

APC BE550G 是一种廉价的UPS,支持以 USB 线通知被保护的系统或查询状态。

在 FreeBSD 上可以用 apcupsd 来配合 USB 通知使用。

去年大河发生过一次停电事故,所以买了一个 UPS 来配合自己的机器;今天大河又来了一次大约90分钟的停电,算是完成了对 UPS 的完整测试。

阅读全文… ( 本文约 657 字,阅读大致需要 2 分钟 )

基于 Supermicro X7SPA-H (Atom D510) 的路由器(3)

• Hardware

📜 历史文件已不具备现实意义

本文介绍的是已经停产的硬件,内容已过时。

之前家里用的那个 Linksys WRT310N 路由器就有相当严重的问题(不排除是DD-WRT的问题),如果连续若干天不重启的话,无线网络的连接有时就会失败。部署新的路由器之后,设置了一个cron任务令其每天早上5:30重启:

30 5 * * * /usr/bin/ssh root@10.253.87.254 reboot > /dev/null 2>&1

当然,执行cron的那个用户需要使用ssh key来登录WRT310N,并事先将key传到WRT310N上面。

由于 FreeBSD 默认会对链路状态的变化进行记录,因此只要查看系统日志就可以知道cron是否真的执行了。

在之前的部分我们讨论过关于功耗的问题。在实际使用过程中,我发现 powerd(8) 对于 CPU 占用的计算是有问题的:它计算的是所有CPU的占用率之和,而比较合理的依据则是占用率最高的CPU的占用率。不过,对 Atom 来说 powerd 能够产生的影响有限,因此如果真在使用Atom系统的话不一定真的需要这个patch。下面这个patch可以让 powerd 更有效地 throttle CPU 的频率:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Index: usr.sbin/powerd/powerd.c
===================================================================
--- usr.sbin/powerd/powerd.c    (revision 213306)
+++ usr.sbin/powerd/powerd.c    (working copy)
@@ -127,6 +127,7 @@
 {
        static long *cp_times = NULL, *cp_times_old = NULL;
        static int ncpus = 0;
+       int newload;
        size_t cp_times_len;
        int error, cpu, i, total;

@@ -151,7 +152,7 @@
                return (error);

        if (load) {
-               *load = 0;
+               *load = newload = 0;
                for (cpu = 0; cpu < ncpus; cpu++) {
                        total = 0;
                        for (i = 0; i < CPUSTATES; i++) {
@@ -160,8 +161,10 @@
                        }
                        if (total == 0)
                                continue;
-                       *load += 100 - (cp_times[cpu * CPUSTATES + CP_IDLE] -
+                       newload = 100 - (cp_times[cpu * CPUSTATES + CP_IDLE] -
                            cp_times_old[cpu * CPUSTATES + CP_IDLE]) * 100 / total;
+                       if (*load < newload)
+                               *load = newload;
                }
        }

对路由器这样的设备来说,当有软件 bug 的时候,我们往往希望系统自己恢复并报告问题,而不是等待用户去用调试器现场调试。想要达到这个目的,可以使用 watchdog 机制。在这款主板上有两个 watchdog,其中系统没有自带的那个 Winbond watchdog 的驱动如下:

阅读全文… ( 本文约 3111 字,阅读大致需要 7 分钟 )

基于 Supermicro X7SPA-H (Atom D510) 的路由器(2)

• Hardware

续前。

除了硬件上直接采用的降噪措施之外,一些软件方面的配置也可以提高其效果。

首先是BIOS中的配置。风扇转速最低可调整为"Energy Saving"(即使用30%的频率)。启用Active Power State之后,可节省大约2W左右的耗电(这个选项的默认值是Disabled)。

然后是FreeBSD本身的配置。我个人采用的配置包括:

  • 禁用硬盘的APM。WD的这款硬盘默认的APM值为128,这样它每隔大约10秒没有操作时就会将磁盘转速降低。这类操作对磁盘的寿命有一定影响(一般来说磁盘的机械部分支持10万到20万次这样的操作),因此可将其设为254;
  • 启用磁盘的AAM。这个配置的好处是让磁盘控制其磁头臂的加速度,其效果是减少噪音,并且有一定的节能效果。注意:实际测试显示这个设置产生的节能效果基本上可以忽略不计,并且会稍微降低一些性能。磁盘的AAM数值设置为128(默认为254);
  • 将经常写的日志放到 /tmp (使用tmpfs);
  • 将收集entropy(随机数种子)的频率由每11分钟一次降低到每天一次;
  • 启用 AHCI 磁盘驱动;将ahci通道的pm_level全部设置为5(设备在闲置125ms之后可申请通道链路进入SLUMBER模式)
  • 禁用APIC时钟。
  • 禁用AT RTC时钟。
  • 对于没有驱动的PCI设备,将其置入D3模式(停电)。

上述设置,除了ahci部分之外,可将系统闲置时的功耗降低到17W左右。

以下是实现中采用的loader.conf相关的部分:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

hint.apic.0.clock=0
hint.atrtc.0.clock=0
hw.pci.do_power_nodriver=3
hint.ahcich.0.pm_level=5
hint.ahcich.1.pm_level=5
hint.ahcich.2.pm_level=5
hint.ahcich.3.pm_level=5
hint.ahcich.4.pm_level=5
hint.ahcich.5.pm_level=5
阅读全文… ( 本文约 4499 字,阅读大致需要 9 分钟 )