前言

在平时工作中有些实验超出了我目前笔记本的资源,做起实验来会相当的难受。

在权衡使用公有云资源和自建资源的利弊之后决定自己组装一台工作站。

硬件介绍

在日常的使用场景中大部分都是使用的虚拟机,消耗的cpu、内存资源比较多,系统部分比较稳定在部署完成之后基本没有太多的写入。

看了当前主流amd锐龙9平台和intel的11代平台价格后果断选择老旧的准系统平台(穷)。

这次选择的是Dell Precision T3600准系统,支持初代E5系列处理器,4条ECC内存,最大的内存容量为64G。

以下是最终的配置清单:

类别型号价格备注
处理器E5-2690¥165一颗
内存DDR3 REGECC 16G¥1254条
准系统T3600¥5001台
U盘金士顿 64Gfree3.0的U盘
显卡K2000free白嫖的

共计:¥1165

这里使用u盘当系统盘考虑到日常的写入操作并不多,存储的后端是挂载树莓派上的ssd。 日常使用在zfs的加持下速度也能够接受 :)

系统部署

这里使用的系统组合如下:

类别名称备注
系统GentooUSE Gentoo BTW
文件系统ZFSZFS在大内存加持下表现非常不错
initopenrc足够简单
XXorg比较成熟的显示方案
WMdwm比较简单日常使用的场景没有问题
输入法fcitx-rime使用体验一直都很不错

虽然这个工作站是支持UEFI启动的,但是实际测试下来发现UEFI启动经常会卡黑屏legacy启动倒是没有这个问题。

最终还是使用 legacy+MBR的方案。

使用Ubuntu Desktop 20.04 livecd 启动,制作可以参考我之前的文章

分区方案

分区挂在点文件系统大小备注
/dev/sda1/bootext4200MiB引导分区
/dev/sda2nonezfs57GiBZFS Pool
rock/os/gentoo/zfs57GiBzfs dataset
rock/os/gentoo/home/homezfs57GiBzfs dataset

初始化分区:

1
mkfs.ext2 /dev/sda1

创建带有加密的zpool:

1
zpool create -f -o ashift=12 -o cachefile=/etc/zfs/zpool.cache -O compression=lz4 -O xattr=sa -O relatime=on -O acltype=posixacl -O dedup=off -O encryption=on -O keyformat=passphrase  -m none -R /mnt/gentoo workstation /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_60A44C3D7ECDBF1089740049-0:0-part2

查看状态:

1
zpool list

创建dataset

1
2
3
zfs create -o mountpoint=none -o canmount=off nana/os
zfs create -o mountpoint=/ nana/os/gentoo
zfs create -o mountpoint=/home nana/os/gentoo/home

从之前做的备份恢复系统,这部分可以参考我之前的在Gentoo上优雅的吃ZFS

性能测试

使用geekbench进行测试

测试结果

问题排查

Gentoo On ZFS可能出现的问题以及排查

  1. 第一次引导的时候可能无法引导系统,需要进入shell中手动挂载zpool
  2. initramfs没有ZFS的工具导致无法解锁zpool,重新生成带有zfs支持的initramfs
  3. VFS 没有支持 比如说像是nvme的设备内核没有相对应的nvme build in
  4. 启动之后类似于cache之类的设备因为盘符变化而导致无法正常工作 可以在创建的时候使用 /dev/disk/by-id/ 下的分区id来进行创建

grub救援

1
2
3
4
5
6
7
8
grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic dozfs root=ZFS=rock/os/gentoo
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot

修复

进入livecd

  1. 导入zpool
1
2
3
4
zpool import -f -a -l
2.  设置dataset的挂载点
zfs set mountpoint=/mnt/gentoo workstation/os/gentoo
zfs set mountpoint=/mnt/gentoo/home workstation/os/gentoo/home
  1. 挂载dataset
1
zfs mount -la
  1. 挂载必要的文件系统
1
2
3
4
5
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
  1. chroot
1
2
3
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

修复完成之后记得将zfs dataset的mountpath重新设置一下。

总结

这台工作站满足了我对于性能、价格以及日用场景方面的需求,当然为了达到这些我也是做了一定程度的妥协。

首先这台工作站使用435W电源时配置ECC内存开机会报需要更换更高瓦数的电源,而购置一个更高瓦数的电源也要在原来的成本上再加200左右。

芯片组存在问题,这台工作站的芯片组是intel试水SAS的产物,机器不支持SAS硬盘(不支持SAS硬盘这点还存在疑问,看官网的文档是支持的)。 SATA2 - SATA5接口驱动怪异,需要配置Intel PCH SCU Romley之后才能够使用其他的SATA接口,如果没有配置之能够使用白色的SATA接口。

总体而言这台工作站满足了我的基本诉求,并且在未来相当长的一段时间能够给我带来更多实践支撑。