Device

HP ProLiant MicroServer Gen8 上手玩

曾经,一台共享空间的 PHP 「虚拟主机」在大部分人眼里就是很高级的「服务器」了,后来随着虚拟化技术的发展,OpenVZ, Xen, KVM 虚拟机越来越普及,Linode 和 DigitalOcean 更是将 $10/mo 的廉价 VPS 推广开来,VPS 可以做很多 PHP 共享主机做不到的事情。近两年,随着越来越多中小企业的发展,「微型服务器」的概念也慢慢出现了。HP ProLiant MicroServer Gen8 就是其中的一员。最近我也入手了一台,当家庭服务器使用。

c03760124

一、购买

Gen8 是 2013 年的产品了,现在的售价已经比刚出来时便宜不少了。爱折腾的可以去海淘一个便宜的版本,我为了省事就直接在□东上购买了。□东上提供了三个型号,分别是:

  • Intel G1610 CPU + 2 GB RAM
  • Intel G2020 CPU + 2 GB RAM
  • Intel E3-1220Lv2 CPU + 4 GB RAM

主要的区别就是在 CPU 了,三款 CPU 分别是赛扬(Celeron)、奔腾(Pentium)和至强(Xeon)系列的产品,价格也由低到高。然而这内存实在是令人郁闷,两条插槽明明可以可以最高 16 GB(甚至单条 16 GB 的话可以最高 32 GB,兼容性未知),但最高配置也就 4 GB 是什么鬼……考虑了一下自己主要是用来做 NAS 使用,但是同时又有虚拟化的需求,因此决定购买赛扬型号的,然后自己加内存。

最终我的购买清单是:

  • HP ProLiant Gen8, Intel G1610 CPU, 2 GB RAM
  • Kingston DDR3 1600 ECC RAM, 8 GB
  • Samsung 850 EVO SSD, 120 GB
  • WD Red NAS HDD, 2 TB
  • 六类网线,3 米 * 3

Gen8 一共四个 SATA 盘位外加一个光驱位,因此有心折腾的话最多可以扩展成五块硬盘。我按照我目前的需求就一块 SSD 一块 HDD 搞定了。网线我买了三根,是因为 Gen8 有三个 RJ-45 接口,两个是主网卡上的,另一个是 iLO 的管理接口。在 iLO 中也可以设置让 iLO 和主网卡共享网络接口。

二、开箱及组装

以上内容合计约 3700 人民币,下单后当天下午就送到了。以下多图杀猫,点击可看大图。

在装硬盘的时候我踩坑了。由于之前对 Gen8 的 SATA 背板不了解,想当然地买了块普通的 2.5 英寸转 3.5 英寸硬盘支架,想要把 SSD 装到 1 号槽、HDD 装到 2 号槽的时候发现 2.5 英寸的 SSD 套个普通的 3.5 英寸支架并不能插进硬盘槽里……于是最后的解决方案是把 1 号槽的背板拆下来,拉到顶上,把 SSD 塞在那里,于是最后把 SSD 放顶上了。好在那儿本来就是光驱的位置,所以并不影响盖上盖子。

另一种方案是把 SSD 接到闲置的光驱线上,这样下面四个盘位都可以插满大容量 HDD。这种方案需要自己购买 SATA 转接线。

在装好硬盘之后,需要在 BIOS 里配置 B120i RAID 控制器。说是 RAID 控制器,其实是个伪 RAID,加之我并没有 RAID 需求,我直接禁用掉了,这样操作系统看到的就是个普通的 SATA 控制器,能直接访问到下面挂载的硬盘。

三、搭建 ESXi 虚拟化环境

Gen8 作为一个微型服务器,定位于中小企业和家庭,配置远不如它那些安身于 IDC 里的同侪们,但是用作网络存储却是非常合适。四盘位使用 3 TB 硬盘可提供 12 TB 的存储空间;如果使用那些 6 TB 的硬盘的话,更可扩展至 24 TB 存储空间。我入手 Gen8 也是想作为网络存储的,但是同时又想一机多用,跑几个虚拟机玩玩。因此需要一套虚拟化方案。

虚拟化方案选择

纳入我考虑范围的有 VMware ESXiXenServerlibvirt + QEMU 这三种方案。综合我自己的需求、自身的兴趣(后两者都已经玩过了,第一个还没玩过),以及 Twitter 的投票,我选择了 VMware ESXi 作为虚拟化方案。

ESXi 的前身是 ESX,是 VMware 出品的优秀的 bare metal 虚拟化方案,在 VMware 网站上可以免费注册得到一份授权,可无限期使用。与 VirtualBox、QEMU、Hyper-V 等方案不同,ESXi 是 Type-1 Hypervisor,它直接运行于裸机上,不需要先安装一个操作系统,因此性能开销小,本身占地也很小,很适合安装到 TF 卡或 U 盘等小型存储器中。正巧,Gen8 的机箱内主板上有一个 USB 和一个 TF 卡接口,可以把 ESXi 安装进去。由于 ESXi 启动完成之后就在内存中运行了,不用担心 U 盘和 TF 卡的读写性能问题。

安装并连接到 ESXi

在 VMware 网站上可以下载到 ESXi 6 的安装镜像,但是 HP 为 Gen8 专门制作了一个定制版的 ESXi 镜像,自带了 Gen8 的驱动程序,建议使用 HP 版本包括我在内已经有两位用户发现 HP 定制版 ESXi 与 RDM 有兼容性问题,会导致 ESXi 虚拟机卡死。使用原版 ESXi 镜像无兼容性问题。安装镜像约 380 MiB,局域网内网络挂载安装也不会太慢,直接使用 iLO 的虚拟光驱挂载功能即可。注意,默认的 iLO 版本并不支持虚拟光驱功能,需要去 HP 那里申请一个 60 天 iLO Advanced 试用版授权。或者你可以本地起个一个 HTTP 服务器,然后使用 iLO 免费版里的从 URL 加载镜像的功能安装。

我不知道原版 ESXi 安装过程是什么样的,但是 HP 为 Gen8 定制的 ESXi 安装镜像在整个安装过程中除了问了我安装到哪里,其他什么也没问。我自然是选择安装到 U 盘了(记得提前插好)。安装完成后可以看到上灰下黄的屏幕上显示着 ESXi 通过 DHCP 自动获取的 IP 地址,用浏览器访问即可看到欢迎页面,然后……你几乎什么也不能做,不过你可以顺着欢迎页面上的链接去下载个 vSphere Client。

这是令我比较郁闷的部分。通过这几天的使用,我发现 ESXi 是个好东西,但是它提供的连接方式却不怎么样。目前你有四种方式去管理它上面的虚拟主机:

  • 使用 vSphere Client —— 这是一个 Windows-only 的客户端;
  • 使用 vSphere Web Client —— 你需要部署 vCenter,对于只跑一个 ESXi 实例的用户来说太不值得了;
  • 使用 vSphere CLI —— 也依赖 vCenter;
  • 安装 ESXi Web UI —— 似乎是个 2016 年新出的试验产品,功能还不完善,bug 也多。

作为一个 Arch Linux 用户,我自然想免客户端直接从浏览器里管理虚拟机了,但是安装并使用了 ESXi Web UI 之后我发现它实在是初级了一些,于是最后还是屈服于 VirtualBox + Windows + vSphere Client 了。

连接到 ESXi 之后需要先创建数据存储(Datastore)。前面说过,我的 Gen8 主板上插了个 16 GB 的 U 盘(ESXi 就装在里面),硬盘位插了一块 SSD 和一块 HDD,我直接把整块 SSD 都添加到 ESXi 里作为 Datastore 了。ESXi 会将其分区并格式化成 VMFS 作为虚拟机存储。剩下的 HDD 则通过 RDM 分配给虚拟机使用。

创建磁盘映射(RDM)

vSphere Client 的 GUI 还是不错的,功能强大、操作简单,创建虚拟机的过程不再详述。下面讲讲 RDM。

前面说过,NAS 将是 Gen8 的重要用途,因此大容量硬盘是少不了的,但是我的 NAS 是跑在虚拟机里的,考虑到数据迁移和恢复的便利性,最好能让虚拟机直接访问到物理磁盘,而不是再隔一层文件系统。让虚拟机直接访问到物理机的磁盘有两种思路:Passthrough 和 RDM (Raw Disk Mapping)。前者需要 CPU 支持 VT-d,并且按照 @Orz_C 的实验,似乎只能把整个 SATA 控制器(连同下面的四个盘位)一起直通进去,不能单独传递下面挂载的磁盘。很遗憾,我的赛扬 CPU 虽然支持 VT-x 却不支持 VT-d,并且我的 SATA 控制器下面挂的并不都是想传递给虚拟机的硬盘,因此此路不通。

那就用 RDM 吧。RDM 其实是 VMDK(VMware 开发的开放虚拟磁盘格式)的功能,原理是创建一个(几乎不占空间)的特殊 .vmdk 文件映射到一块物理磁盘,当虚拟机向这块 VMDK 写入时,实际写入的是后面的物理磁盘。在 VirtualBox 里也可以用这种方法让虚拟机直接使用物理磁盘。ESXi 支持在 GUI 中创建到 LUN 的 RDM,却必须要借助命令行才能创建到本地 SATA 磁盘的 RDM。

在 ESXi 的设置中打开 SSH 访问,用 SSH 登录之后看到 /dev/disks/ 底下有 Gen8 上所有的磁盘:

[root@ezsetupsystem3ca82a9fd134:~] ls -lh /dev/disks/
total 4160150040
-rw------- 1 root root 14.4G Mar 13 16:29 mpx.vmhba32:C0:T0:L0
-rw------- 1 root root 4.0M Mar 13 16:29 mpx.vmhba32:C0:T0:L0:1
-rw------- 1 root root 250.0M Mar 13 16:29 mpx.vmhba32:C0:T0:L0:5
-rw------- 1 root root 250.0M Mar 13 16:29 mpx.vmhba32:C0:T0:L0:6
-rw------- 1 root root 110.0M Mar 13 16:29 mpx.vmhba32:C0:T0:L0:7
-rw------- 1 root root 286.0M Mar 13 16:29 mpx.vmhba32:C0:T0:L0:8
-rw------- 1 root root 2.5G Mar 13 16:29 mpx.vmhba32:C0:T0:L0:9
-rw------- 1 root root 111.8G Mar 13 16:29 t10.ATA_____Samsung_SSD_850_EVO_120GB_______________S21XXXX_____
-rw------- 1 root root 111.8G Mar 13 16:29 t10.ATA_____Samsung_SSD_850_EVO_120GB_______________S21XXXX_____:1
-rw------- 1 root root 1.8T Mar 13 16:29 t10.ATA_____WDC_WD20XXXX_________________________WD2DXXXX
-rw------- 1 root root 1.8T Mar 13 16:29 t10.ATA_____WDC_WD20XXXX_________________________WD2DXXXX:1
lrwxrwxrwx 1 root root 20 Mar 13 16:29 vml.0000000000766d68626133323a303a30 -> mpx.vmhba32:C0:T0:L0
lrwxrwxrwx 1 root root 22 Mar 13 16:29 vml.0000000000766d68626133323a303a30:1 -> mpx.vmhba32:C0:T0:L0:1
lrwxrwxrwx 1 root root 22 Mar 13 16:29 vml.0000000000766d68626133323a303a30:5 -> mpx.vmhba32:C0:T0:L0:5
lrwxrwxrwx 1 root root 22 Mar 13 16:29 vml.0000000000766d68626133323a303a30:6 -> mpx.vmhba32:C0:T0:L0:6
lrwxrwxrwx 1 root root 22 Mar 13 16:29 vml.0000000000766d68626133323a303a30:7 -> mpx.vmhba32:C0:T0:L0:7
lrwxrwxrwx 1 root root 22 Mar 13 16:29 vml.0000000000766d68626133323a303a30:8 -> mpx.vmhba32:C0:T0:L0:8
lrwxrwxrwx 1 root root 22 Mar 13 16:29 vml.0000000000766d68626133323a303a30:9 -> mpx.vmhba32:C0:T0:L0:9
lrwxrwxrwx 1 root root 74 Mar 13 16:29 vml.0100000000202020202057442d574343344d30465a36374831574443205744 -> t10.ATA_____WDC_WD20XXXX_________________________WD2DXXXX
lrwxrwxrwx 1 root root 76 Mar 13 16:29 vml.0100000000202020202057442d574343344d30465a36374831574443205744:1 -> t10.ATA_____WDC_WD20XXXX_________________________WD2DXXXX:1
lrwxrwxrwx 1 root root 72 Mar 13 16:29 vml.0100000000533231564e58414831373636383944202020202053616d73756e -> t10.ATA_____Samsung_SSD_850_EVO_120GB_______________S21XXXX_____
lrwxrwxrwx 1 root root 74 Mar 13 16:29 vml.0100000000533231564e58414831373636383944202020202053616d73756e:1 -> t10.ATA_____Samsung_SSD_850_EVO_120GB_______________S21XXXX_____:1

那些 mpx 开头的是那只 16 GB 的 U 盘及其分区,四个 t10 开头的代表 SSD 和 HDD,剩下的那些是指向前面那些的符号链接。

这里我选择 WDC 的那个块设备(即我的 WD 硬盘),创建 RDM:

vmkfstools -r /dev/disks/XXXX /vmfs/volumes/EVO/WDYYYY.vmdk

第一个参数是代表物理磁盘的块设备(注意不带冒号,即整块硬盘,而不是其中的分区),第二个参数是创建的 .vmdk 文件的路径,我这里保存到上一节创建的名为 EVO 的 Datastore(即我的 SSD)根目录下名为 WDYYYY.vmdk 的文件(我是拿硬盘序列号作为文件名的)。

另外,-r 参数创建的是 Virtual Compabilitiy Mode RDM,即 ESXi 会截获除 READ / WRITE 之外所有 SATA 指令;如果换成 -z 参数,则是创建 Physical Compability Mode RDM,即 ESXi 除了 LUN REPORT 指令,其他全部原样传递给物理磁盘。没啥特殊需求用 -r 即可。两种模式只有在 hdparm 等涉及到磁盘本身参数的命令才会有区别,数据层面没有区别。

将这样创建得到的特殊 .vmdk 文件分配给虚拟机,便可在虚拟机中访问到外层 ESXi 的硬盘。

四、搭建 NFS 和 Samba

接下来需要将硬盘中的文件分享给其他主机。如果你的网络里只有 Linux 主机的话,那么搭个 NFS 就足够了。初版 NFS 于 1984 年由 Sun 研发,几十年来久经考验,十分适合局域网内文件共享。

在 Linux 发行版中,NFS 服务通常由 nfs-utils 包提供,安装后修改 /etc/exports 文件,将硬盘挂载点共享出去即可。比如这是我的配置:

/media/disk1/public 192.168.2.0/24(ro,sync,no_subtree_check,no_root_squash)
/media/disk1/incoming 192.168.2.0/24(rw,sync,no_subtree_check)

共享了 public 和 incoming 两个目录,前者允许局域网内读写操作,后者则是只读。修改此文件用后可以用 exportfs -rav 命令重载。注意,no_root_squash 使得拥有 NFS 客户机 root 权限的人也可以 root 身份对 NFS 服务器的共享目录进行操作(与 MooseFS 的默认行为一致),如果不需要这一特性可以关闭。

在我的 Linux 笔记本上,可将 NFS 挂载项写个 /etc/fstab 实现开机自动挂载(voila 是文件共享服务器的主机名):

# NFS @ voila
voila:/media/disk1 /nfs/voila nfs4 rsize=8192,wsize=8192,timeo=14,_netdev 0 0

因为我还需要向 Windows 用户分享文件,因此我还装了一个 Samba。Samba 的配置比 NFS 复杂多了,以下是我用的最简配置:

# /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Voila Samba Server
hosts allow = 192.168.2. 127.
log file = /var/log/samba/%m.log
max log size = 50
security = user
map to guest = Bad User

[public]
comment = Public Read-only
path = /media/disk1/public
public = yes
browseable = yes
read only = yes

[incoming]
comment = Public Read-write
path = /media/disk1/incoming
public = yes
only guest = yes
browseable = yes
read only = no
writable = yes

启动 Samba 服务后,列在 hosts allow 里的主机即可无密码访问 Samba 共享。Windows 用户可以将 Samba 目录映射为网络驱动器,方便日后访问。

五、家庭服务器的其他用途

本节列举一些我能想到家庭服务器的其他用途,可能是我已经实现的、正在实现的、想要实现的,以及暂时不想实现的。排名不分先后,仅供参考:

六、致谢

以下推友作为 Gen8 的先驱玩家,在本文作者折腾 Gen8 的过程中给予了诸多帮助和指导,特此感谢(排名由 sort 提供):

Fitbit Force 上手玩

Fitbit Force 是 Fitbit Inc. 推出的第六款运动追踪器,同时也是第二款手环造型的运动追踪器。考虑到自己长期端坐于计算机屏幕前而缺乏运动,我觉得入一个运动追踪器以激励自己多运动是有必要的。本文即为 Fitbit Force 使用一天之后的体验,供未来可能的购买者参考。

一、Fitbit Flex vs. Fitbit Force

fitbit-force

Fitbit Force (Slate)

手环型运动追踪器(以下也称「智能手环」)的选择还是挺多的,最近见得比较多的则是 Jawbone UP 和 Fitbit 两类。在选购之前,我先在 Twitter 上问了一下用过智能手环的壕大大们智能手环有啥缺点,得到的回复有不少是抱怨 Jawbone UP 容易坏,于是剩下的选择就只剩下 Fitbit Flex 和 Fitbit Force 了。

Fitbit Flex 和 Fitbit Force 长得差不多,功能也相差不大,官网价格差 $30(前者 $99 后者 $129),后者可以理解为前者的升级版。但是我从来是没有闲心去搞海淘/转运的,所以必然是淘宝解决了。从搜索结果来看,Flex 普遍卖 ¥600 而 Force 则基本在 ¥1000 以上且呈上升趋势。价格看起来很水,那功能呢?我仔细读了一下官网的说明(FlexForce),总结如下:

  • Flex 对外显示只有五个 LED 光点,平时显示离你的运动目标还有多远,充电时显示电量充了多少;Force 则是有一块 OLED 屏幕,可以显示数字、字母、图形等。
  • Force 比 Flex 多了一个高度感应器(基于气压),配合以运动感应器可以计算爬了多少楼层(官网解释是连续的运动同时高度上升 10 英尺则计为爬了一楼)。
  • Force 在配合以 iOS 7 可以实现来电振动提醒并滚动显示来电号码的功能。
  • Flex 的电池能用 5 天,Force 的电池能用 7-10 天。

这样看来 Force 比 Flex 贵的那 $30 还是很值的,但是有一点令我非常郁闷:Force 的防水性能不如 Flex。

Q: Can I wear my Force swimming?
A: Your Force is rain, splash, and sweat-proof but should be removed before swimming or showering.

可能是因为结构的关系,Force 只是生活防水,汗和雨对它无伤,但是淋浴和游泳的时候应该取下,而它的前辈 Flex 倒是可以游泳时穿戴。

综上考虑,虽然 Force 的淘宝价格没有 Flex 那么实在,但是考虑它比 Flex 优点多于缺点,还是推荐大家多 $30 买 Fitbit Force 吧。

二、外观与设计

我在这儿谈设计可能会遭至专业设计师的耻笑,但作为一个外行来说,我觉得 Flex 和 Force 都是挺好看的。

fitbit-flex-multiple-colors

多种颜色的 Fitbit Flex

上图为 Fitbit Flex,下图为 Fitbit Force。

fitbit-force-slate-and-black

黑色和蓝灰色的 Fitbit Force

正如前文所说,Flex 的五个 LED 亮点虽然更酷炫一些,但是输出的信息量太少,而 Force 则能显示更多的实时信息,并且还能当手表用……不过,无论是 Flex 还是 Force,在平时它们都是什么都不显示的……

三、开箱图

缩略图似乎比较模糊,建议点开看大图。图片我已经缩小过,不用担心大图杀猫。

四、它准么?

曾经我以为这类智能手环是有测量生物体生理指标等功能的,得知它没有电极之类的,只有非接触式传感器的时候还有点失望,但是经过测试我发现,虽然它是非接触式的,但是真的很智能,测量佩带者的运动状况还是很准的。

我测试了如下情况:

  • 坐在椅子上打字及小幅挥动手臂;
  • 平地行走,双手自然摆动;
  • 家用踏步机上踏步,双手自然摆动;
  • 家用踏步机上踏步,双手紧贴身体两侧;
  • 爬楼梯。

经测试,Fitbit Force 的确非常智能,在平时不会把手臂的挥动记入运动内容,但是如果是在踏步机等器械上,即使双手紧贴身体两侧而不摆动,也会根据上下起伏而准确记录步伐。爬楼梯的检测数据误差也在可接受的范围内。

如果觉得 Fitbit Force 的记录误差较大的话,可以在设置中调节佩带手臂的设置,主用手的敏感度较低,非主用手的敏感度较高。

五、睡眠记录与唤醒

曾经我以为智能手环能检测生理指标,因此能像某些眼罩一样在人类睡眠周期的合适时间唤醒佩带者,现在看来我想多了。目前 Fitbit Force 能做的仅仅是记录你的睡眠时间和你睡眠的质量。前者是要手工按键告诉它你睡了/醒了,后者则是通过检测你在睡眠时是否安稳(如翻身次数)。

至于宣传所称的 Silent Alarm,自然与睡眠周期啥的没有关系,只能设置一个固定的时间,在不打扰你的伴侣的情况下通过振动手环的方式把你唤醒。我试了下,如果戴得不是太松的话,强度应该是能把人唤醒的。我试了一下,虽然我睡得非常沉,但是这种来自手腕上的振动是足够能把我唤醒的。

六、应用程序与分享

智能手环的人机互动界面十分有限,所以要通过外接一个 UI 来进行扩展。Fitbit Force 是通过蓝牙 4.0 无线同步的,选择有:

  • 通过附赠的蓝牙适配器与 PC 或 Mac 连接,通过 Fitbit Connect 应用程序进行管理;
  • 直接与支持蓝牙 4.0 的 Android 或 iOS 设备连接,通过相应的应用程序进行管理;
  • 与其他设备连接后,也可通过网页进行管理。

感谢蓝牙 4.0 的低功耗,使得长时间连接也不用担心电池消耗过快。

至于分享功能,也就是「晒」,可以在 Fitbit 网页上进行设置,可「晒」至 Facebook, Twitter 等社交媒体,频率则可以选择每天一晒或者每周一晒。如果你 Follow 的人里有较多 Fitbit 用户的话,每晚的某一时刻就能看到一大波 Fitbit 状态了。我体验过这一囧境,因此选择了每周一晒……

更新:近期有部分用户反映 Fitbit Force 使他们的皮肤产生了过敏症状,经第三方独立实验室调查,有 1.7% 的用户会对 Fitbit Force 使用的材料中的镍和一些胶水成分过敏,在长时间佩带的情况下会导致皮肤表面出现红肿等症状。为此 Fitbit 公司已暂停 Fitbit Force 的销售,并为已购买的用户提供退款服务。我已经戴了大半个月,没有出现任何过敏症状。如有易过敏体质的用户可谨慎选购。

本文原载于 https://wzyboy.im/post/1028.html , 转载请注明出处。

GNU/Linux 启用 Intel Rapid Start

Intel Rapid Start 是 Intel 公司研发的一种帮助笔记本电脑节省电源和快速恢复的技术,与传统的睡眠(Sleep)和休眠(Hibernate)有一定的区别,相较而言,与混合睡眠(Hybrid Sleep)倒是有一些相似的地方。Intel 说,这技术首先要主板支持,其次要有 SSD,最后要有 Windows。但其实 SSD 和 Windows 都不是必须的。昨天,我就在 HDD + Linux 的组合里成功地使用了 Intel Rapid Start。

一、Intel Rapid Start 原理

其实 Intel Rapid Start 的原理很简单,就是让计算机在传统的睡眠(Sleep)的基础上有机会进入更深层的睡眠(Deep Sleep),用户可以通过 BIOS 设置一个超时,比如一分钟、十分钟、半个小时等(也可以设置「立即」),当计算机进入睡眠状态之后,计时开始,如果用户在计时到达之前唤醒了计算机,那就啥也没发生,如果预定时间达到,则计算机会被浅唤醒(wake up briefly),将内存中的数据写入硬盘(官方文档指 SSD)中的一个特定分区,然后彻底断电。在这之后,用户只能通过按电源键的方式开机,主板固件会把特定分区中的内容读回内存,然后计算机就可以继续使用了。

总结一下,Intel Rapid Start 技术(IRST)的前半段与普通的睡眠是一样的,而后半段则与休眠(Hibernate)类似,但是休眠是由操作系统完成的,而 IRST 则是由主板固件(BIOS 或 UEFI)去完成这一操作,也就是说,在加电自检(POST)之后,直接就是从硬盘中读取内容的过程了,根本没有引导器(Boot loader)和操作系统的加载过程,因此比操作系统级别的休眠要快不少,再加上 SSD 的应用,就更加快了,这就是 Intel 所宣称的「六秒恢复」。按照我的理解,就是恢复速度和睡眠一样快,但是耗电和休眠一样低(零耗电)

Intel 的官方文档提到该技术需要 SSD + Windows,可是我没看出其中的必要性:SSD 是为了加速,如果用 HDD 代替的话除了慢点也没啥问题,而 Windows 呢?令人兴奋的是,2013年6月的时候,Linux 开发者 Matthew Garrett 就提交了一个内核补丁,实现了 Linux 内核对此的支持。该补丁已在 Linux 3.11 中得到了应用,而截至我写这篇文章时,最新的 Linux 内核版本已经是 3.12.6 了,显然可以使用。

二、调整分区

我的计算机是 ThinkPad X240s,该型号内部有一个 SATA 和两个 NGFF 接口,后者是 Intel 推的新接口,可以用来接蓝牙、3G 等模块,也可以用来接 NGFF 接口的 SSD。最理想的配置应该是 SATA 接口用来接 HDD 而 NGFF 用来接 SSD,这样的版本是已经配置好 Intel Rapid Start 的。我的这个版本 SATA 接口上接了一块 500GB 7200 转的机械硬盘,一个 NGFF 接了 WiFi + 蓝牙,另一个 NGFF 是空的。也就是说,没有 SSD,自然默认也没得用 Intel Rapid Start。但除了淘宝一块小而贵的 NGFF SSD 之外没有别的方法了吗?当然不是。仔细阅读 Intel Rapid Start 的用户手册就会发现,它提到主板固件是通过分区标识符来找寻 IRST 分区的,对于 GPT,是 D3BFE2DE-3DAF-11DF-BA-40-E3A556D89593,对于 MBR 则是 0x84

调整前我的分区结构是这样的:

NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 465,8G  0 disk  
├─sda1           8:1    0     2M  0 part  
├─sda2           8:2    0   200M  0 part  /boot
├─sda3           8:3    0    50G  0 part  
│ └─crypt-sda3 254:0    0    50G  0 crypt /
└──sda4          8:4    0 415,6G  0 part  
  └─crypt-sda4 254:1    0 415,6G  0 crypt /home

整块硬盘 465 GiB 使用 GPT 分为四个区,开头 2 MiB 用来存放 GRUB,之后 200 MiB 是 /boot,然后是 50 GiB 和 /,最后剩下的 415.6 GiB 用作 /home。其中 sda3 和 sda4 都是 LUKS 容器。我的目的是要把 sda4 调整为 400 GiB,然后把剩下的 15.6 GiB 划为 sda5,作为 IRST 分区。

由于 sda4 是 GPT + LUKS + ext4 三层嵌套结构,所以需要一层一层地缩小它们,然后再一层一层地撑大它们到合适的位置。

# 把 /home 卸载
umount /home
# 调整文件系统前必须要先检查文件系统
e2fsck -f /dev/mapper/crypt-sda4
# 缩小文件系统至 398 GiB
resize2fs -p /dev/mapper/crypt-sda4 398G
# 缩小 LUKS 容器至 399 GiB
# 换算成 512 KiB 的区块是 399 * 1024 * 1024 * 2 = 836763648
cryptsetup resize crypt-sda4 836763648
# 将 sda4 分区调整为 400 GiB
# 并用剩余的空间建立 sda5
# 建立的时候分区标识符输入 8400
gdisk /dev/sda
# 重启计算机使内核使用新的分区表
reboot
# 再次卸载 /home
umount /home
# 放大 LUKS 容器撑满 sda4
cryptsetup resize crypt-sda4
# 检查文件系统
e2fsck -f /dev/mapper/crypt-sda4
# 放大文件系统至撑满 LUKS 容器
resize2fs -p /dev/mapper/crypt-sda4
# 挂载测试
mount /dev/mapper/crypt-sda4 /home

调整完成后,就是这样的效果了:

NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 465,8G  0 disk  
├─sda1           8:1    0     2M  0 part  
├─sda2           8:2    0   200M  0 part  /boot
├─sda3           8:3    0    50G  0 part  
│ └─crypt-sda3 254:0    0    50G  0 crypt /
├─sda4           8:4    0   400G  0 part  
│ └─crypt-sda4 254:1    0   400G  0 crypt /home
└─sda5           8:5    0  15,6G  0 part

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  BIOS boot partition
   2            6144          415743   200.0 MiB   8300  Linux filesystem
   3          415744       105273343   50.0 GiB    8300  LUKS partition
   4       105273344       944134143   400.0 GiB   8300  LUKS partition
   5       944134144       976773134   15.6 GiB    8400  Intel Rapid Start

三、设置主板固件(BIOS/UEFI)

这一步视不同的制造商自有不同,但主旨就是找到 BIOS/UEFI 中有关 Intel Rapid Start 的设置,将之开启。在完成以上步骤之前,这一选项是不可开启的状态,会提示没有找到合适的存储设备,但是在完成了上述步骤之后,固件就会根据 GUID 找到 IRST 分区,从而允许开启这一功能。至于多久后启用,就是个人爱好了,我选择的是「立即」,也就是相当于用 IRST 代替了睡眠(Sleep)功能。

四、测试

为了测试效果明显,可以先用 dd_rescue 把 sda5 清空一下:dd_rescue /dev/zero /dev/sda5。可以用诸如 head -c 1G /dev/sda5 之类的命令检验一下。

准备完成之后开始测试:echo -n mem > /sys/power/state 将系统挂起至内存(S3,睡眠)→系统顺利睡眠→系统被短暂唤醒并将内存中的内容写入 IRST 分区,此时如果仔细听可以听到机械硬盘写入的声音→写入完成,系统断电停机。

断电停机之后,用户只能通过按电源键把计算机唤醒。按下电源键后可观察到 BIOS/UEFI 上显示类似 Resuming from deep sleep ... 字样,说明这一恢复过程是由固件完成的,与操作系统无关。恢复完成后,直接回复到进入睡眠之前的样子。此时使用 head /dev/sda5 可观察到大量输出,说明 sda5 的确被写入了。

至此 IRST 部署成功。

五、扩展阅读

本文原载于 https://wzyboy.im/post/1022.html ,以 CC BY-NC-SA 3.0 释出,转载请注明出处。

Kindle Paperwhite 体验及简体中文支持

自三天前 Kindle Paperwhite 上手之后,我一直处在各种惊喜和愉悦之中。下面说说主要体验吧。由于我的上一只 Kindle 是 Kindle Keyboard 3G,所以主要是拿 Kindle Paperwhite 和它相比较。

一、Kindle Keyboard vs. Kindle Paperwhite

Kindle Keyboard 是 Amazon Kindle E-reader 的第三代产品之一,而 Kindle Paperwhite 是第五代产品之一,所以 Kindle Paperwhite 无论从性能上还是功能上都要比 Kindle Keyboard 强劲。关于各代 Kindle 的对比,可以看 Amazon.com 上的介绍

外形

这个我只说一句话:拿到 Kindle Paperwhite 之前觉得 Kindle Keyboard 真好看,拿到之后就不这么想了。哦,再来一句:触摸屏真好用……

屏幕 PPI

我在《Kindle 中文阅读终极优化指南》中曾提出过一个观点:Kindle 屏幕的 PPI 较电脑屏幕要高出不少,且由于电子墨水的天生特性,所以阅读效果可与印刷品媲美。Kindle Keyboard 那 167 PPI 的屏幕已经让人惊叹了,而 Kindle Paperwhite 的 PPI 是 221,这屏幕效果,真的不用多说了。打开同一本书凑近了仔细看,前者还是有小小的锯齿的,后者则完全无法看到了。

屏幕照明

按说 Kindle E-reader 是电子墨水屏,不需要背光,在自然光下就可以看得非常清楚。我用了一年的 Kindle Keyboard,感觉也的确如此,哪怕是在强烈的太阳光下,也不会觉得刺眼,非常舒服,如纸质书一样。有人问:那没光的时候怎么看?答:纸质书怎么看它就怎么看……Amazon 官方也有卖带灯的皮套,但是价格不菲,所以我只买了个不带灯的,所以偶尔想在宿舍熄灯后看一下书的话,就只能借助手电筒了,为此还被舍友批评了……

Kindle Paperwhite 则采用了全新的方式解决这一问题:覆盖式照明。这个名词是我捏造出来的,它的原理如下图:

光线是从侧面发射,照到光导膜(材料可能跟光纤差不多),然后向下照射在电子墨水上,再从电子墨水上漫反射进入人眼。这样的好处非常明显,那就是不刺眼。传统的液晶屏的光是从屏幕底部的 CCFL 或 LED 发射然后直射进入人眼的, Kindle Paperwhite 这样的照明则是从上往下,再从下往上的,整个过程和传统纸质书一样,所以效果的确非常好。我试了下,在熄灯后的宿舍里,伸手不见五指,开着 Kindle Paperwhite,看书毫不刺眼,也不会影响到别的舍友。当然,照明的亮度也是可调的,在不同光照的环境下都可以调到一个合适的、舒服的值。

性能

Kindle Paperwhite 的性能比 Kindle Keyboard 应该要强一些。打开文件的速度比原来提升不少,特别是大型 PDF。在 Kindle Keyboard 上,打开一个稍大的、不分章节的纯文本 PDF,会卡住一分钟左右,才会打开,翻页还算流畅,跳转的话又会卡住,体验不是特别好。虽然可以通过安装第三方 PDF 阅读器如 kindlepdfviewer 来改善,但是……Kindle Paperwhite 原生就可以秒开大型 PDF 了!的确振奋人心。

电池方面,Kindle Paperwhite 用的是锂离子聚合物电池。小巧的 iPod shuffle 能连续播放 15 个小时的原因就在于能量密度非常高的锂离子聚合物电池,Kindle Paperwhite 也用的是这样的电池,所以,在背光开启到 10、WiFi 关闭的状态,Kindle Paperwhite 能正常使用八个星期。根据我的实际体验,白天的情况下,背光一般是开零的,在伸手不见五指的环境下,一般开 3 也就够了。

二、Kindle Paperwhite 简体中文支持

字体

上一篇文章中,我已经说了,Kindle Paperwhite 原生的中文支持非常不错,不再是「勉勉强强」了。Kindle Keyboard 虽然前段时间也有一个 3.4 的固件更新说是对字体有调整,但是我试了下,把 Kindle Keyboard 恢复到出厂状态之后,啥也不装,那中文字体……依然是有粗有细的,装了 jailbreak 和 fonts hack 才解决。看来 3.4 版本依然没有对 CJK 有什么良好的支持。而 Kindle Paperwhite 就不一样了,未越狱状态,啥都没改过,那中文支持就是「好棒的好棒的」。有下图为证:(这只是截图,实际观感比截图更加优秀)

这是什么概念?打开中文文档的时候,字体选项不再是什么 Caecilla, Helvetica 了,而是「宋体」和「黑体」!我曾经花了很多精力折腾 Kindle Keyboard 让它能显示完美的中文字体,当时的目的是这样:

  1. 完美显示中文(告别□□□□!)
  2. 使用优质的衬线中文字体来代替无衬线中文字体(让 E-Ink 像印刷品一样!)
  3. 实现中文字体的普通、粗体斜体粗斜体的不同样式
  4. 目录界面和状态栏中的中文也要使用自定义字体并显示出样式

Kindle Keyboard 的 CJK 支持只有一个弱到爆的 CJK.ttf。但是 Kindle Paperwhite 呢?看一下中英混排效果吧:

真的感动了。在 Kindle Keyboard 上要折腾很久才能达到了「完美」效果,在 Kindle Paperwhite 上,未越狱就完美支持了!

另外,购买 Kindle Paperwhite 的用户还可以获赠 Amazon 送的许多本字典,中文的有商务印书馆的《新华词典》和外研社的《现代英汉词典》,质量很好哦。

再有一个意外发现是,打开竖排的 PDF 的时候,选择文字也是竖排的了!之前只能横着选,各种诡异……

界面及输入法

虽然中文字体支持已经完美了,但是如果想圈圈点点写点感悟的话,还是需要中文输入法的。经 @lao_xie 提醒,我才知道,昨天 Amazon 放出了 Kindle Paperwhite 的 5.3 版本固件更新。新的固件主要有以下新特性:

  • 改进了 Palatino, Baskerville 和 Futura 这三个拉丁字体,也改进了一下日语和中文的字体,调整了字距和行距。
  • 可在主界面关闭「推荐内容」。
  • 更平滑的「从试读到购买」体验。读完书的试读部分之后购买全书,可以自动从已经阅读完的部分开始继续阅读并且会自动移除试读版。
  • 阅读时可直接从菜单进入「设置」。
  • 简体中文支持。现在 Kindle Paperwhite 有简体中文界面及输入法了。
  • 改进了漫画阅读体验。
  • 漫画的页面刷新设置和普通的书独立。

啊,没错,最耀眼的一条就是「简体中文支持」了!直接上三张图说明问题吧:

简体中文的设置界面

简体中文的拼音输入法

新增一种「楷体」

个人觉得,Kindle Paperwhite 对 CJK 的支持极大地提升了, Amazon.co.jp 固然贡献了不少( 5.2 固件就有日本語输入法了,简体中文是到 5.3 才有的),Amazon.cn 也是功不可没的。联想一下,Amazon.cn 上早就出现了 Kindle 的中文帮助页面,便觉得 Kindle 有可能有中国大陆上市了。当然,不要叫「金读」这么糟糕的「官方译名」就好了……

更新:2013年6月起,Kindle Paperwhite 终于可在中国大陆的 Amazon.cn 购买,售价 ¥849。

本文地址 https://wzyboy.im/post/983.html ,转载请注明出处,谢谢合作。

Kindle Paperwhite 上手玩

我在 2012-09-12 的时候,预订了一只 Amazon Kindle Paperwhite。但是由于 Amazon 官方缺货,等了将近一个月,直到近两个月后, 2012-11-04 的时候,才顺丰到我手里,欣喜已极。

在把玩了一段时间后,我真心觉得,Kindle Paperwhite 非常值得拥有,用 Amazon 的话说,这是他们做过的「最好的电子书阅读器」。

关于中文

Kindle Paperwhite 的 CJK 支持真心赞。Kindle Keyboard FW 3.3 的时候,原生的中文字体有且只有一种无衬线字体(黑体),且很丑陋。但是在 Kindle Paperwhite 里,打开中文书籍的时候,已经自带黑体和宋体两种字体家族了,且质量不差,看来 Fonts hack 是没有太大必要的了。

废话不多说了,直接上图。大量图。