就在刚刚,NAS崩溃了,重启后ping不通。且路由器内无法看到J3160的连接。
回溯一下我都做了什么。
宝塔使用PM2管理器插件-->卸载PM2管理器插件-->使用APT安装npm和nodejs,试图npm install -g a
-->执行apt autoremove
紧接着Windows 10 RDP远程崩溃提示发生错误,接着就连不上ping不通。
抢修和数据备份
接通HDMI,HDMI无信号,机箱电源灯正常,板载千兆网口指示灯不亮,可闻机械硬盘运作噪音。
按下电源键,设备输出HDMI信号,屏幕快速刷新内核界面后无信号输出。-->判断内核可能已启动,系统所在杂牌SSD硬盘数据暂无异常。
再次按下电源键。正常引导至Grub启动界面,主板暂无无异常。内核启动时可见多个Failed报错,但系统正常加载到Debian登录窗口,可正常使用帐号密码登入。
查看发现NAS无网络连接,且原先自动配置的有线连接消失。-->可能由于执行apt autoremove删除了原先的网络连接管理工具并删除了其配置项目导致连接丢失。但重新配置后发现无法正常连接。
重启NAS,有线网络依旧未能连接,遂手动配置使用主板上M.2 PCIE接口的24Ghz无线网卡完成WIFI连接。
未避免出现更多问题,决定先行备份数据再进一步研究。
简要的备份数据后
我选择了直接重装系统,因为第一次装机时缺乏经验对很多东西进行了尝试,让系统软件包较为混乱,重新安装系统可以彻底解决一些遗留问题。吸收上次的经验,使用apt代理充分利用手头的代理资源让这次重装速度快了很多。
为什么之前出现有线网络无法使用的问题?
我仔细想了想可能和第一次安装时没有手动安装网卡的非自由固件有关系,后续多次更换桌面环境又使用apt autoremove彻底删除了初次安装时留下的设备配置文件,所以这次我在安装系统后查询了Debian 官方Wiki找到了相关内容6.4. 加载缺失的固件。以下内容摘自Debian Wiki:
一旦登录进了已安装的系统,遵循以下步骤可能可以自动检测缺失的固件,并启用它们:
安装 isenkram-cli 软件包。
以“root”用户运行 isenkram-autoinstall-firmware
命令。
通常,重启是保证各个内核模块已经正确初始化的最简单的方法;这在使用 nomodeset 参数作为临时措施以启动系统的情况下尤为重要。
[注意] 注意 安装固件软件包很可能需要启用软件仓库的 non-free 区。截至 Debian GNU/Linux 11.0,运行
isenkram-autoinstall-firmware
命令会自动完成该工作,这是通过创建一个指向通用镜像的专门文件(/etc/apt/sources.list.d/isenkram-autoinstall-firmware.list)实现的。
至此,固件问题完美解决。
恢复
参见第一次装机写的文章简单装好了J3160小主机
1.挂载硬盘
2.配置DDNS
3.安装docker
下一步目标,逐步恢复NAS功能,不再使用宝塔面板,应用尽可能容器化
开始恢复各项服务 2022年8月23日
1.安装 Portainer 可视化管理Docker 参见portainer.io
2.安装 Nginx Proxy Manager (docker)
根据需要自行查阅官方文档,需要注意的是,似乎使用Host网络模式才能使用内网IP访问本机上没有绑定外部端口的docker,至少在本人使用Nginx docker镜像时存在此问题。(最开始我只按照官方安装示例给NPM绑定了80,81,443三个端口,但进行下列步骤时反代出现504错误),使用host网络模式可解决。
通过NginxProxyManager 反代访问未映射外部端口的Docker容器(节省实体机外部端口)
当前我的home.xfox.fun亦通过内部运行的一个nginx docker和Nginx Proxy 实现访问。
docker run --name home.xfox.fun -v /home/xfox/www/home.xfox.fun:/usr/share/nginx/html:ro -d nginx
此时,通过NPM面板或docker ps命令可得到此nginx容器被自动分配的内网IP:172.17.0.3,使用NPM新增反代站点并将源站IP设置为172.17.0.3,不必映射到公网端口。(你先别急,不把下面的内容看完有你急的时候)
考虑到docker自动分配的内网IP可能会在重启后改变(docker容器获取ip的原则:最先启动的容器获取ip段中最小的ip,之后启动的容器按照顺序获取ip),可采取两种方式解决。
1.为容器绑定一个网络别名
别名类似一个互联网域名,同一个网络中的其他容器可以通过这个别名来访问该容器
使用--network-alias指定容器网络别名
--network-alias home
2.运行容器时就绑定指定内网IP
使用--net指定容器使用的网络 --ip指定容器使用此网络的一个ip
--net somenetwork --ip 172.18.0.2
注意,未指定内网IP时,docker默认分配“bridge”网络的内网IP。如果希望避免容器被入侵后通过默认的bridge内网感染其他容器,你可以新建一个网络并指定新建网络的网段使用与其它容器不同的网段。
恢复与固化Cloudreve进程
我自己有备份Cloureve的程序和数据,官方安装教程够细了
安装aria2
本来想用docker,想了想涉及很多文件读写和端口还是算了吧。
以前也是多次配置aria2apt install aria2
即可,配置文件参考https://github.com/P3TERX/aria2.conf 写的很详细
值得注意的是,Debian11默认关闭了rc-local服务,需要手动开启该服务,可参考Enable rc.local in Debian Bullseye
nano /etc/rc.local
写入如下内容
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
设置可执行权限
chmod +x /etc/rc.local
重载systemd配置
systemctl daemon-reload
启动rc-local进程
systemctl start rc-local
检查rc-local状态
systemctl status rc-local
考虑到需要让aria2开机自启动,得向rc.local写一句:aria2c --conf-path=/home/xfox/.aria2/aria2.conf -D
2022年9月3日更新:某宝64G杂牌固态和白嫖风尘的500G机械硬盘
由于NAS上SATA口只有两个,暂时没把16MB Cache的古董机械装上去,装上去的是64G固态(M4-CT064M4SSD2),这个固态当作甜糖缓存盘跑回本电费和硬件,Cloudreve暂时也拿此盘凑合,后期再换大容量固态或者插PCIE转接卡接机械盘。(露出了贫穷的目光 >-> )