跳转至

折腾记录

使用其它设备作为扩展屏幕

假如入你刚好有两台笔记本,或者笔记本和一个大屏的平板。有什么办法把其中一台计算机的屏幕作为另一台计算机使用呢?

调研后,常见的选择是 spacedesk,效果还可以。不过我使用过程中,即使两台笔记本有线连接到路由器,还是遇到了卡顿的情况。因此在考虑是否有其他选择,要是能够有 sunshine+moonlight 那么顺滑就好了,突然一个想法冒入脑海中——是否能用 sunshine 实现扩展屏幕呢?于是尝试起来。

在第一台笔记本上安装好 sunshine 作为服务端。笔记本 CPU 为 i5 1135g7,轻薄本。由于 intel 的编解码都挺强,外加两台笔记本都是千兆网线连接,所以不太担心性能问题。

第二台笔记本安装好 moonlight,连接。结果发现只串流了第一台笔记本的主屏幕,并且是镜像模式。和所想要的效果不一样。我想要的是新增一个屏幕。怀着这理论上应该是可以做到的想法,搜索了 github 的 issue。结果看到有人讨论能否串流多个显示器。确实,我笔记本连接的另一个 27英寸显示器都无法串流。应该有办法切换吧,我这么想着。

讨论中有人提到 sunshine 默认串流主屏幕,可以运行多个 sunshine instance,每个设置串流不同屏幕。这令我突然想到,岂不是可以在第一台笔记本上安装一个虚拟屏幕,第二台笔记本串流这个虚拟屏幕就可以达到扩展的效果了?

结果非常 Amazing 啊,居然真的就 work 了,效果非常丝滑。甚至我觉得比 spacedesk 的效果还要好,毕竟画面的码率都可以调整。

此文主要记录下这个 usecase,并简单记录配置方法。

体验纯 IPv6 网络

起因是给 wolf 的开发者提建议时,涉及到了通过 HE(Hurricane Electric) 提供的 6in4 服务接入 ipv6 网络 。既然给别人介绍了,感觉自己不能没有实操过,因此就尝试在自己的网络连入 HE。

I want to streaming over ipv6 network. However wolf only listen on ipv4 for now.

ABeltramo — 2024/10/06 23:42
Probably not, I don't have IPv6 in my LAN/WAN so not sure how to implement it.. Might be worth opening up an issue in Github!

TheRainstorm — 2024/10/06 23:49
Doesn't your ISP provide IPv6? Otherwise, enabling IPv6 should only require enabling it on the home router.

ABeltramo — 昨天00:59
Nope, no IPv6 over here..

TheRainstorm — 昨天14:56
If you want to try out IPv6, there's another way to get the full IPv6 experience, which is through a 6in4 tunnel. Some free services, like Hurricane Electric, allow you to connect to the IPv6 network. However, this requires you to have a public IPv4 address and a router that supports 6in4 functionality (if you're using open-source router firmware like OpenWRT, it is supported by default).

I can provide you with some useful links:
https://www.youtube.com/watch?v=LJPXz8eA3b8&t=64s
https://openwrt.org/docs/guide-user/network/ipv6/ipv6tunnel-luci

ABeltramo — 昨天15:02
Thanks, that's probably my best bet on trying IPv6. I have a WAN IPv4 IP and I use OPNSense in my custom router so it should be possible.
I'm working on a few other bits at the moment, not sure when I'll have the time to look properly into this

接着意识到到,既然我可以 6in4 到国外,岂不是可以直接访问国外 v6 网站?不过由于只有 v6 地址,因此只能访问纯 ipv6 网站。于是我就好奇,在 2024 年纯 ipv6 的体验是怎么样的,因此就有了这篇博客。

秀下最后大大的 No IPv4 address detected

image.png

并且 /48 的前缀,我可以划分 65536 个子网!

台式机升级-硬件篇

随着做种资源原来越多,原本 4T + 2T 的机械硬盘配置不够用了。即使已经做了很多缓解措施,比如将比较大的视频文件转成 av1 编码(4k h264可以达到30G -> 6G的效果),仍然是捉襟见肘。随着最近想要下载一些 VR 游戏资源,硬盘不够用了越来越明显,看来添加硬盘是必须做的了。

同时我也觉得现有的数据管理有点不安全。目前只对一些文档数据做了备份,然而一些虚拟机磁盘镜像,比如主力使用的 windows 虚拟机的磁盘镜像,由于数据量太大,只存了一份。这些都是单点故障点,一旦硬盘坏了,对我的影响是非常大的。

为了解决容量和安全性的问题,决定在台式机上添加一些机械硬盘组 raid10。

为什么是 raid10

有两个原因,一个是 raid 10 重建时更安全。不像 raid 5 重建时存在 URE 问题(指需要读取阵列全部的数据,数据量大,有很大概率遇到 URE 错误导致重建失败),raid 10 只需要读取一个 mirror 中另一块盘的数据,数据量很小。第二是 raid 10 远比其它 raid 灵活。raid 10 两块硬盘为 1 组,只需要保证两块硬盘容量相同即可。而其它 raid 均需要所有盘容量相同,这意味着我得一次性把所有的盘都买来,而一块 14T 的企业盘需要一千多,3-4 块一次购入显然成本太高。另外,raid 10 后续扩容也非常容易,插入即可扩容。而其它 raid 则需要重建整个阵列,非常费时。

这篇文章主要记录下硬件的升级点,以及人生第二次装机总结的一些经验

epilogue

经过 1 周的规划与实践,台式机终于升级完成。现在它真的成了一个 all in one 完全体了

  • AMD 5800x + 96 GB 内存,PVE 系统
  • 拥有 1G, 2.5G 双网卡,搭建了 openwrt 软路由
  • 拥有 zotac GTX 1063, 公版 GTX 1070 双显卡,分别直通给 linux 和 windows 两个虚拟机系统。
  • 插满 8 块机械硬盘,提供 6T + 8T (6 盘 zfs raid 10) 的存储空间

然而也有一些之前没有考虑到的:

  • 没想到换主板、机箱是一件非常费时费力的事情,从下午 3 点搞到了晚上 11 点。遇到问题有:清洗总共 9 把风扇太费时。插电开机没有一次点亮,差点以为主板翻车。进 BIOS 后系统还要修复引导,zfs 作为 root 分区不太熟悉等。
  • 功耗高了 70 w,从 130 w -> 200 w,从每日 3.3 度涨到 4.4 度。购买硬盘时没有考虑到硬盘的功耗,没想到硬盘功耗可以有 1 倍的差距(最低 4.4 w,最高 8.0 w)。当有 8 块硬盘时,总的差距就可以相差 20-30 w。
    • AMD PBO2 的降压功能非常重要,开与不开功耗相差可能 50 w

Update 2024/10/31

  • 突然觉得硬盘位不是越多越好了,其实 HC520 这种 12 T 的盘,单位容量价格是一样的(甚至更低)。那么组少数几块大容量的盘和组多块盘小容量的盘总价格是一样的
    • 组小容量盘
      • 优点:
        • 单次购入价格低。增加 4 T 空间,需要 400 元,能够承受
        • 盘更多,RAID 速度更快。单块机械盘可能只有 200-300MB。6 盘 RAID10 可以达到 600-700MB。
      • 缺点:
        • 部件越多,越容易坏,维护成本上升
    • 组大容量盘
      • 优点:
        • 维护更容易,比如 4 块 12T 盘,容量有 24T,却只需要 4 块盘。
        • 捡垃圾更好捡?毕竟服务器总有退役下来的盘
      • 缺点
        • 单笔花费巨大。组 raid10 起码 4 块盘,10 T 起步,开销达到 4 x 550 = 2200 级别,相当于买张新显卡了。学生党基本承受不起,工作了作为一次性投入倒是适合。
  • 所以感觉 8 盘位已经是家用最适合的数目了,扩展会遇到很多问题
  • SATA 数据接口不够:我的 X570 有 8 个 SATA 口,这也是家用主板基本上最高的数目了。虽然可以通过 PCIeX1 转 SATA,但是这存在一些问题: - PCIeX1 转接卡价格并不便宜,转 4 个 SATA 需要 80-100 元 - 很多 mATX 主板 PCIeX1 槽不多:PCIeX1 可能和第二个显卡槽共享通道,插了显卡就要降速(比如变成 x2 通道数)。另外 PCIe 还可能用于:接无线网卡、接万兆网卡。因此 PCIe 槽往往是不够用的
    • 机箱显卡限长问题:半岛铁盒F20 正面有 8 个硬盘仓,背面还有 2 个。对于显卡限长的问题,还可以通过移除前面的硬盘笼解决。而插满的情况下话就麻烦了。
    • SATA 供电接口数量:我的安钛克 650 W 电源,提供了 2 条 P6 转 4 个 SATA 的电源线。插 8 个盘正好,插 10 个则另需购入 SATA 1 分多 电源线,有点麻烦。(不过价格只要10 元,另外我的电源还有 P6 是 IDE 的电源线,也可以购买 IDE 转 SATA 电源线。因此电源接口方面,极限硬盘数为 12 个
    • 电源 12v 功率问题:机械硬盘启动时需要使用 12v,电流可以达到 2A,因此单盘有 24W,8 块盘就是 192 W,12 块 288 W,16 块 384 W,20 块 480 W,这还不包括 CPU 和显卡功率(虽然开机时显卡功率可能不高)。因此多块硬盘需要考虑电源 12v 功率(电源功率是分开的,有 3.3v, 5v, 12v)是否达标,硬盘是不能无限叠加的。
      • 使用 1 分多的线时还要考虑单条线承载的电流,因此也不能分太多(参考后面显卡 6 pin 供电只能承载 12A,感觉 1 分 4 是比较稳妥的,1 分 6 感觉就有点风险了
  • 所以我现在的策略是,维持 8 块盘不变,逐步把小盘换成大盘。
    • 目前结构 4+3+(2+3+3)x2,RAID 中 1 块 3T 有报错。由于盘还没坏,坏了可以立马用外面的 3 T 替换,因此不太担心,还可以苟一苟。
    • 等坏了之后,就空出了 1 个硬盘位。此时可以再购入 1 块 4 T 的,和原本单独的 4T 构成一个组,然后替换原来的 2T 的组,替换出来的 2 T 放在外面。
      • (4+3+3)x2 + 2 + 2
    • 希望下次坏就是 2 T 的了,这样又可以购入大盘
  • 上面的升级策略感觉还挺巧妙的,当我们想要升级 RAID10 组的容量时:
    • 如果使用朴素的升级策略
      • 一次性购入两块大盘,替换掉原来的一组 RAID,这样就会多出两块盘,需要有额外的空闲硬盘位。而二手出机械硬盘感觉还是挺麻烦的。
    • 而使用我的策略:
      • 维护若干非 RAID 盘位 (比如 采用 6 raid + 2 非 raid,或者 8 + 4 布局)
      • 非 RAID 盘位可以维护一个大盘,用于平时非关键数据存储。这样就能用一半的价格享受大容量存储
      • 当 RAID 盘位有盘损坏时,此时再购入一块大盘组成一组,替换 RAID 有损坏的组,小盘就放到外面继续工作。可以发现上述操作不需要额外的硬盘位,相当于原地升级。而且小盘由于工作时间更长,因此下次更有可能坏掉,而坏掉就又可以空出一个空闲盘位了。还想要升级的话,可以继续购入比 RAID10 组中最小盘大的盘,等待下次升级即可。

hexo 迁移到 mkdoc

我比较喜欢 hexo 的 tags 字云的效果,不过由于以下原因,我打算迁移到新的静态博客框架 mkdocs material theme

  • hexo nodejs 的依赖实在是太麻烦了
  • hexo 展示的信息量太少了(也可能是我使用的模板的问题)
    • 我感觉这一点上 mkdoc 效果就很好,在大显示器上能够显示更多信息,查阅博客的效率更高

TODO

参考方案

p.s. 由于我使用的 markdown 编辑器的原因,才发现标准 MD 中 list 前面需要有一个空行。也就是迄今写的博客均踩了这个坑。。。而 mkdocs 不支持这个非标准行为,以后慢慢更正吧

openwrt x86 升级

我的台式机 pve 充当软路由功能,包含一个 openwrt LXC 容器。该容器使用了很长时间,配置了 wiregurad,以及复杂的防火墙和路由规则。但是在一开始创建 lxc 容器时,rootfs 选择了 x86/generic 版本。该版本实质上是 32 位的系统

Generic is for 32-bit-only hardware (either old hardware or some Atom processors), should be i686 Linux architecture, will work on Pentium 4 and later. Use this only if your hardware can't run the 64-bit version.

虽然不知道会对性能等有多大影响,但是对于有点完美主义的人来说还是无法接受。因此研究如何将其升级到 64 位版本。

本来以为应该是一件很简单的事情,但是阅读 openwrt wiki 后,发现并没有想象中的简单。并且也学习到了一些关于镜像、分区、文件系统的知识。特此记录。

服务器上运行switch模拟器(linux 云游戏)

服务器有一些老计算卡如 P40,TitanV 都是有图形能力的,并且貌似性能还不错(比如 TitanV 有 3070 的性能)。还有一些老卡如 1080Ti 很少有人用,闲置太浪费了。

因此本着科学求实的精神,想探究下实验室这些卡的性能水平,为之后科研做铺垫。。。好吧,我编不下去了,就是想白嫖实验室显卡玩游戏。加上最近塞尔达王国之泪出了,之前捡垃圾时,见过用 P106 这种 100 块的 “1060” linux 下玩 switch 模拟器效果不错。而自己的显卡 rx550 根本带不动,流下了没钱买卡的泪水。

声明

  • 所有配置都是在 docker 等隔离的虚拟化环境中,不会对系统环境造成污染,影响其它人使用
  • 只在使用人数不多的机器上实验,不会在 A100 等主力机器上实验
  • 只在没人用时实验

效果

  • docker gow

Snipaste_2023-05-16_15-08-25.jpg

wolf 即插即用效果

image.png

image.png

捡垃圾-rk3399 DIY KVM

由于我的台式机承载了 NAS,做种,Jellyfin,博客,文件同步等功能,已然成为一台服务器,因此其可靠性非常重要。但是我还是经历过几次由于网络故障导致其无法访问的情形,此时则只能去实验室维护比较麻烦,因此需要一个 IPMI 的管理功能,使得网络出故障情况下也能远程访问。

而家用 PC 主板很少有支持 IPMI 功能的,支持的板子一般都要 2000 元以上。因此需要一个成本低廉的方案,在网上搜索一阵后发现确实有基于树莓派 DIY 的方案,并且有一个比较大的开源项目 PI-KVM。

然而由于树莓派 400-500 昂贵的价格,使得 DIY 的成本仍然很高。直到我看到使用普通 arm 板子的方案。甚至可以使用 40 元的电视盒子。因此价格完全可以保证在 200 元以内,我觉的是一个可以接受的方案。

最后成本

  • king3399 开发板:咸鱼 120
  • ms2130 USB 采集卡,支持 1080p 60 帧:淘宝 60

KVM-bios.jpg

记一次 linux 系统无法启动修复过程

背景

我想要把第二张显卡也直通给虚拟机,然后就自己编译了一个打了 acs overide patch 的内核。之后启动也没有问题。但是当我第一次运行虚拟机后,电脑就卡死了。然后我强制关机后,无法进入系统,而进入了 busybox initramfs 交互命令行。提示文件系统错误,让我 fsck 系统盘。我照做后就成功进入系统了。

  • 这里进入系统后一切正常,但是 lxc 的 storage 显示 unavailable,zpool import zfs_lxd.img 显示损坏。

然后我想再试试,结果启动虚拟机后又卡死了。我强制重启后,好像又进入 busybox 进行 fsck 了,但结果还是进不了系统,这次进入了紧急模式。

VLAN 实现单网口软路由

起因是发现在原本的两个路由器间架设 wireguard 隧道,其中一个路由器 (小米 4A 千兆版) 遇到了 CPU 瓶颈,导致带宽只能达到 100-200 左右。后面研究了市面上的各种路由器的 CPU 型号,包括矿渣路由器。购买了一个 100 元的可以刷 openwrt 的竞斗云 2.0,带宽可以达到 200-300M,但仍远低于理想的千兆。目前即便是 500 元以上的高端路由器,其配置仍然只有 4 核 Cortex A53@2.0GHz 的水平。

偶然看到用旧笔记本做软路由的视频,遂萌生了折腾软路由的想法。仔细研究其方案后发现为 pppoe 拨号上网的方式,不适用于 dhcp 上网的情况。后偶然发现所购买路由器支持 vlan 功能(其实后面发现所有 openwrt 路由器都支持),于是自己独立构思了后面的架构图。并尝试成功 (11/5),最终在红米 AX6S+ 软路由的情况下,达到了 500M 的带宽,此时 AX6S 的双核 Cortex A53@1.2GHz CPU 占用率也达到了 100%。

之后再接再励,将 AX6S 也配置了 vlan,并在旧笔记本实现软路由。最终带宽达到了 880Mbps,scp 文件达到 98MB/s 的速率。并且之后还成功配置了 Guest WIFI,将其和主网络隔离开来,更加保证了安全性。

通过本次项目,学会了:

  • linux 下,ip, netplan 创建 bridge 和 vlan
  • lxc 容器的使用
  • openwrt DSA 架构配置 vlan

Wireguard 组网

wireguard 是一种基于 UDP 的隧道协议,可以在不同设备间建立虚拟隧道,从而连接不同子网。本文总结了不同使用场景

尝试非官方 openwrt

说明

我的红米 ac2100 不知道怎么回事,使用自己编译的固件,无法开启 5G 无线。radio1 显示 not active,并且为 802.11n 协议。先后尝试编译 22.03-rc6, 21.02 稳定版都是如此。(官方稳定版是有的)(想到一些第三方的 openwrt 说针对国内进行了优化,因此想尝试下第三方的 openwrt

复古模拟器前端

image.png 屏幕截图(118).png

retroarch

RetroArch Starter Guide – Retro Game Corps

retroarch 是一个模拟器前端,不同的模拟器以 core 的形式嵌入 retro。retroarch 相对于单独的模拟器来说好处如下

  • 跨平台。retroarch 支持非常多的平台。由于 core 是动态链接库的形式嵌入 retroarch 的,相当于解决了不同 core 的跨平台问题。
  • 支持全局的按键映射。不用为每个模拟器设置手柄,快捷键等等配置。
  • shader and filters。可以实现一些特别的视觉效果,比如

Openwrt Mesh 和快速漫游配置

背景

家里原本有两个路由器,一个负责楼上,一个负责楼下。但是仍然有许多覆盖不到的地方,比如厨房。并且更影响体验的是楼上楼下的 WIFI 使用不同的 SSID,手机无法很好地自动切换。经常是楼上连接到楼下的网络导致信号很差。因此决定对家里的网络改造一番。

以前听过 mesh 这个技术,可以将很多台路由器通过无线连接起来,共同提供一个网络。于是去搜索了 openwrt 是否支持 mesh,发现是可以的。并且经过进一步的了解,纠正了自己之前对无线网络的一些错误认知。

  • 首先,mesh 解决的并不是如何让设备自动切换网络,而是如何进行无线组网,可以避免布线的困难。mesh 节点通过同一个信道的的无线相互连接,而通过另一个无线提供 WIFI。
  • 快速漫游(fast roaming) 协议,准确来说叫做 802.11r 协议,可以减少设备切换无线网络的耗时。

硬件设备上,我选择使用小米路由 3G 来搭建,主要是因为硬件配置上在 wifi5 的路由器中算是很不错的了,且某鱼上一个只需要 50 元。于是又买了两个,加上原本的,现在有 4 台 openwrt 路由器,一个红米 AC2100 作为主路由,3 个 R3G 作为 AP 节点。

为了方便配置还实现了一个自动配置脚本放在 github:TheRainstorm/my-openwrt-config (github.com)

openwrt DNS 详解

openwrt DNS 说明

参考:

  • openwrt DNS 和 DHCP 配置均位于/etc/config/dhcp
  • openwrt 使用 dnsmasq 和 odhcpd。它们功能如下:

    image-20220816220011245

  • 总结来说:
    • dnsmasq 将自己设置为 DHCP 客户端的 DNS
    • dnsmasq 使用缓存来提升性能。到达的 dns 请求如果没有命中则转发给上游 DNS

      Dnsmasq serves as a downstream caching DNS server advertising itself to DHCP clients. This allows better performance and management of DNS functionality on your local network. Every received DNS query not currently in cache is forwarded to the upstream DNS servers.

linux 系统迁移

linux 系统迁移

买了一条三星的 PM9A1 SSD,想要把原本的 linux 迁移到新的固态上。

系统信息

  • 原本的系统(windows 和 ubuntu 双系统)安装在固态上,包含 EFI 分区。
  • 系统引导方式:EFI/GPT(其它方式有 BIOS/MBR, BIOS/GPT)

    BIOS system

    On a BIOS/GPT system there is no MBR and therefore no place to store the loader. The GPT partition specification allows for an unformatted partition of the BIOS boot partition type (0xEF02). The size of this partition can be as small as 1 mebibyte. The Calamares installer uses a fixed size of 32 mebibyte. On a BIOS/MBR system a part of the bootloader is written to the Master Boot Record for the primary disk.

如何实现网络自由

如何实现网络自由:-)

这里说的网络自由,是指通过网络工具极大地便利生活的某些方面。这篇文章是我自己对折腾路由器刷机、openwrt、ipv6 的总结,并尽量说明了各种玩法的实际用途。其中有些操作确实给我带来了极大便利,比如其中使用 iSCSI 通过网络挂载其它设备的硬盘,这充分解放了我只有 500GB 的轻薄本。在上面安装游戏后,又可以实现在不同设备上无缝玩同一个游戏的体验。