实现带有Nvidia GPU+Rootless Podman+Docker+Systemd+自动驱动注入支持的systemd nspawn容器

在AI计算集群等场景中,系统级容器的稳定部署、GPU资源高效透传及多容器运行时兼容是核心需求,传统容器方案要么无法良好支持systemd服务管理,要么GPU透传配置复杂、需在容器内重复安装驱动,且难以兼顾Rootless Podman与Docker的二级容器运行需求。本文针对这一现状,详细阐述一套集成Nvidia GPU透传、自动驱动注入、systemd-nspawn容器管理及多二级容器运行时的完整方案,该方案已在某高校AI计算集群中稳定运行数月,可有效降低集群容器化部署的复杂度,提升资源利用率。

针对传统容器部署存在GPU透传配置繁琐、需在容器内额外安装驱动导致环境冗余、systemd支持不足、二级容器运行时兼容性差及Rootless模式适配困难等痛点,本方案核心优势在于无需在容器内安装GPU驱动,可动态扫描并挂载NVIDIA库和工具,完美支持GPU透传与CDI驱动注入,兼容Docker与Rootless Podman两种二级容器运行时,同时通过脚本实现systemd-nspawn容器的自动监控与管理,简化集群部署与运维成本。

功能特性:

  • 多级容器的 NVIDIA GPU 透传支持,支持 DinD/PinD 模式
  • ✅ 动态扫描 NVIDIA 库和工具,不需要在容器内安装 GPU 驱动,容器驱动自动跟随宿主机更新
  • ✅ 真正的系统级容器,完美支持 systemd 服务管理,同时无Docker一级容器方案的存储冗余、可靠性差等诸多弊端。
  • ✅ 支持 Docker 和 Podman 二级容器运行时,容器内可以再运行容器,支持 CDI 方式的 NVIDIA GPU 驱动注入
  • ✅ 多节点集群支持,自动配置跨节点路由,支持宿主集群NFS。
  • ✅ 支持 Rootless Podman 容器运行时,安全性风险低。
  • ✅ 自动监控和管理 systemd-nspawn 容器。

点击阅读全文 →

利用Windows卷影副本(Volume Shadow)找回被覆盖和删除的数据

Windows默认启用的系统恢复机制会定期创建卷影副本,创建的时机通常为安装或卸载软件以及系统更新。卷影副本 (Volume Shadow) 实际上就是我们在 Linux 上经常提到的 “快照(Snapshot)”,它利用写时复制 (CoW) 机制为我们提供了文件系统在某个时间点的一个状态的视图。通过利用这个视图,我们可以找回近期不慎删除或被覆盖的数据,也可以用于某些电子取证场景。实际上,系统恢复就是利用快照机制还原文件到先前某个状态实现的。

注意: 由于卷影副本存在一个严重的bug, 该方法并不可靠!找回的文件数据可能不完整,或需要手动拼接。该方法仅供紧急情况或取证场景使用,切勿以此代替备份软件。

前提条件: 系统恢复未被禁用、文件系统为NTFS、存在可用的系统恢复还原点

利用软链接将卷影副本链接到常规磁盘分区下面,就可以访问这些过去时间点的文件系统视图了。

点击阅读全文 →

(2024更新)修复黑群晖 DSM7.0 + Btrfs 存储空间/磁盘损毁/堪用 的问题

意外断电重启后,发现群晖提示硬盘损毁了,但是实际上硬盘还是正常的,S.M.A.R.T. 状态也良好,但是无法写入数据,系统状态报告为“严重”,群晖的程序也拒绝工作。

我们来先治标再治本。

治标:修复存储空间故障方法

  1. 通过 SSH 直接登录 root 账号。如果不方便直接登录 root,则执行:

    cd /
    sudo -i
    

    对于虚拟机黑群晖如果SSH挂了也没事,开个管道模式的串口连接(例如 \\.\pipe\dsm),然后用Putty或者Xshell 以管理员身份运行 连上管道即可。

  2. 检查有问题的存储池,此时可以看到 sdc3 后面的 [E] 表示他现在是错误状态:

cat /proc/mdstat

点击阅读全文 →

Ubuntu 上通过以太网分享网络连接(NAT)

Ubuntu 自带网络分享功能,但该功能很不稳定,往往断开连接后再连就无法使用了。
现在我们使用 DNSMASQ+IPTables 手动配置NAT.

禁用 systemd-resolved

Ubuntu 提供的 systemd-resolved 抢占53端口,首先禁用它。

systemctl stop systemd-resolved
systemctl disable systemd-resolved

删除不当设置

如果你之前配置过网络分享或已经用有线连接过电脑了,则需要这一步
运行 nm-connection-editor
删除所有有关你要分享的网卡的设置

安装并配置DNSMASQ

安装

apt install dnsmasq
service dnsmasq stop
nano /etc/dnsmasq.conf

编辑 /etc/dnsmasq.conf,加入下列内容:

dns-forward-max=15000
#eno1为你的要分享的网卡名
interface=eno1
dhcp-range=192.168.33.2,192.168.33.150,255.255.255.0,12h

配置域名解析

nano /etc/resolv.conf

填写你的DNS服务器,例如:

nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 114.114.114.114

启用内核IPV4转发

/etc/sysctl.conf

加入:

net.ipv4.ip_forward=1

运行:

sysctl -p

配置转发,为网卡分配初始IP

eno1为你的要分享的网卡名
enp2s0为有网的(被分享的)网卡名

ifconfig eno1 192.168.33.2
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
iptables -A FORWARD -i eno1 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT

上述内容重启后无效,可加入 /etc/rc.local 以开机自动应用。

启动DNSMASQ

systemctl enable dnsmasq
systemctl start dnsmasq
systemctl status dnsmasq

完事!