自从来到上海之后,失去了ipv6的连接,同时要携带电脑往返台里或长时间把电脑放在台里,再加之硬盘空间不足,因此便想搭建一台NAS以存储各类资源、满足使用PT站的需求。因此便从网上购买硬件,来搭建这样一台NAS。

因为笔者对NAS的要求不高,只要能放四块以上硬盘、能做种即可,因此采取的硬件配置为:

机箱蜗牛星际C款,4盘位,可热插拔
主板&CPU搭载(焊有)J1900工控主板,ITX规格,TDP仅有10W,被动散热
内存4G DDR3笔记本内存
SSD(系统盘)64G金储星,mSATA接口
HDD(仓库盘)西数紫盘4T,WD42PURX,之后慢慢增添
电源300W电源,随机箱附送

因为只是作为NAS使用,因此尽量节约功耗,一切从丐(当然除了硬盘)。也正因如此,组装过程就不多说了,插插内存SSD、连连线、拧拧螺丝就完事了,只有连接电源按钮时要注意对照说明书接线。故而硬件部分不在本篇笔记内详细介绍了。装OpenMediaVault(OMV)的过程也比较简单,只要注意连接网络,按照提示走就不会有什么大问题。因此下面就重点说一下整个搭建过程中遇到的几个问题。

一. 网络连接问题

在OMV系统安装成功后,尝试在路由器的管理界面查找NAS的ip地址并绑定,以便于今后的访问。但是,在路由器管理界面并没有找到NAS的ip地址。排查发现,NAS的网线接口无论是指示网线是否连接的绿灯还是指示有无数据传输的黄灯都没有亮。通过更换网线和路由器接口,故障仍然存在。因此怀疑要么是主板上的网口出现问题,要么是网卡驱动掉了。如果是后者还好说,前者的话就涉及售后之类的,非常麻烦。因此,首先要查看网卡硬件是否还在。非常幸运的是,在重启NAS的过程中(俗话说得好,重启解决90%的问题),发现刚启动机器后,两个灯都会亮,但是在进入系统后,两个灯熄灭;而在关机过程中,系统退出后,两个灯又亮了。这提示笔者,不是硬件出了问题。应该是系统设置的原因,导致网卡驱动掉了。

在重启机器的过程中,启动系统时笔者注意到出现了这样两行报错:

[    0.169595] ACPI BIOS Error (bug): Could not resolve symbol [\_SB._OSC.CSW1], AE_NOT_FOUND(20210930/psparse-529)
[    0.169595] ACPI Error: Aborting method \_SB._OSC due to previous error (AE_NOT_FOUND)(20210930/psparse-529)

因此,笔者怀疑是不是正是这个错误引起了掉网卡驱动。但是,查阅发现,ACPI错误一般和较低的BIOS版本有关,需要更新BIOS版本才能解决。同时,一般情况下这个错误不会影响正常使用。再加之网络上除了更新BIOS外没有给出更多的解决方案,而在现有条件下笔者难以更新BIOS版本,因此只能暂时放弃,查找其他解决方案。

但是,没有报错信息,就只能盲人骑瞎马了。笔者首先怀疑,是否是网络配置出现了问题。因此,首先查看网卡配置。在Debian系统中,网卡配置放在了 /etc/network/interfaces 文件中。因此进入这个文件查阅。除去注释的内容,这个文件只有两行信息:

auto lo
iface lo inet dhcp

具体的说,就是名称叫lo(记住这个名字)的网卡,随系统启动而启动( auto lo ),ip信息使用DHCP的方式获取( iface lo inet dhcp)——我超,没问题啊?

那么,现在又一次陷入了僵局。接下来怎么办呢?注意到,网卡驱动故障是在开机时发生的,也就是说,开机时提示的信息或许会包含网卡故障的报错信息。但为了查看这些转瞬即逝的信息,笔者总不能一遍又一遍的重启吧?所幸linux提供了一个命令 dmesg 以查看开机信息。为了只包含网络相关的信息,我们输入:

dmesg | grep eth

此时输出:

[    0.172459] ACPI Error: Aborting method \SB.OSC due to previous error (AE_NOT_FOUND) (20210930/psparse-529)
[    5.364792] igb 0000:03:00:0: added PHC on eth0
[    5.369679] igb 0000:03:00.0: eth0: (PCIe:2.5Gb/s:Width x1) 00:e2:69:13:0a:d6
[    5.369679] igb 0000:03:00.0: eth0: PBA No: FFFFFF-0FF
[    5.953975] igb 0000:03:00.0 enp3s0: renamed from eth0

那么首先来看,ACPI故障对于网络也不是没有影响的。第二行、第三行、第四行……看上去都没问题。到了第五行,嗯?rename?什么rename?也就是说,进入系统后,现在的网卡叫enp3s0,而不是什么lo。因此,可以确定,是网卡配置出现了问题。因此,将错误的网卡配置修正为(这里是最终版本,也就是绑定了静态ip之后的):

auto lo
iface lo inet static
address 192.168.31.2

这样,NAS就能正常连接网络了。

二. 安装OMV-extras

为了使用docker安装transmission,我们需要首先使用OMV-extras安装docker和portainer(当然直接装也可以,但这样省事,能一键完成(然后就为了省这个事又花费了许多时间))。那么,就要首先安装OMV-extras。根据官方提供的命令,使用命令行即可一键安装:

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

但是,因为高大的墙,在国内很难连上github的服务器。我也不例外。因此,在多次尝试之后,这个方法最终还是被抛弃了。那怎么办呢?能不能先把安装包下载到本地,再上传到NAS上?但是,既然NAS都连不上github,电脑也不行吧?

此时,我突然想起,清华大学的开源软件镜像站tuna(赞美清华大学!)提供OMV的镜像,因此,会不会也提供OMV-extras的镜像呢?因此,进入tuna(再次赞美清华大学!),果然找到了OMV-extras的镜像。复制链接并使用如下命令直接下载到NAS上(因为有ssh所以不用先下到电脑上):

wget -O - https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/openmediavault-plugin-developers/pool/main/o/openmediavault-omvextrasorg/openmediavault-omvextrasorg_6.1.1_all.deb

那么,就很容易的将OMV-extras下载到了NAS上。然后使用dpkg安装,就大功告成了。当然,为了以后的使用方便,再进入配置文件将OMV-extras的下载源设置为tuna(三次赞美清华大学!)。

所以,这一节比较简单,总结起来就是,赞美清华大学!清华大学天下第一!

三. 使用docker安装transmission

这一段也没什么特别大的问题,只有一些小坑需要注意一下。

首先,在OMV中可以通过OMV-extras一键安装docker和portainer并通过后者提供的GUI界面来管理前者。但是由于版本更新的问题,现在的GUI界面与网上通常的教程出现了较大的差异,因此通过GUI来新建一个container并正确配置transmission对像我这样的小白来说成为了一件较为困难的事情。因此这里使用命令行安装。采用以下命令:

docker run -d --name "transmission" -e USERNAME=username -e PASSWORD=passwd -p 9091:9091 -p 51413:51413 -p 51413:51413/udp -v /data/downloads:/Downloads -v /data/transmission/config:/config -v /data/watch:/watch --restart=always linuxsever/transmission:latest

这里, -d 指使transmission后台运行; --name 后的字段是这个container的名称,可以随意填写;USERNAME PASSWORD 后的字段是transmission的用户名和密码,请自己设置; -p 指定端口映射,冒号前的端口是主机的端口,分号后的是container的端口。其中,9091是用于进入transmission的web-UI的端口,可以换成其他的;51413是transmission默认使用的端口,也可以更换成自己使用的端口,但要记得安装好transmission后在设置中将默认端口更换; -v 指定卷的映射,可以理解成文件夹的映射。同样的,冒号前是主机上的文件夹,冒号后是container内的文件夹。需要注意的是,由于transmission的定义,虽然主机上的文件夹名称不必如上述代码所示,但container内必须有Download和Watch两个文件夹。这是因为,transmission会将下载的文件放在前一个文件夹中,而将种子放在后一个文件夹中。如果不这样做,那么有极大的可能性,找不到文件被transmission放在哪了。因此,安全起见,上述代码中container的文件夹就不要修改了。 --restart 字段指定,如果docker重启时,总是重启这个container。最后剩下的就是需要在container内安装的transmission了,这里使用linuxsever/transmission的最新版本。

安装完成后,如果transmission提示当前使用的端口不通(port is closed),就可以尝试更换端口、设置端口映射(不仅是container与主机之间,还有路由上的)等等方法;如果下载种子时提示permission denied,请注意设置下载文件夹的权限,看是否有其他用户写权限。(事实上,关于这点非常奇怪,在笔者的主机上,transmission对应于用户911,但想要对其修改权限时,总是提示这个用户不存在。因此笔者只能对该文件夹777.)

那么,这就是这一篇技术笔记。