Linux 系统 NAS 化的初步探究
tags: NASLinux 系统 NAS 化的初步探究
2025 年 10 月 23 日:
专业 NAS 系统虽然方便,但是总会存在一些不可控问题。这段时间我会利用空余时间研究备用机器,以纯 Linux 系统(Debian13)为例,能否便携地满足我使用 NAS 的全部需求。
2025 年 11 月 6 日:
11 月 5 日,飞牛系统因此缓存 SSD 损坏,一个硬盘数据无法挂载,经历抢救后无果,数据丢失。害怕了,所以我强迫自己在主力上使用了一个 Debian 纯手工 NAS 方案……现在跟大家分享一下。
2025 年 11 月 10 日:
由于管理起来过于麻烦,我换到了 Fedora Server 系统,相对来说软件包更新一些,自带的 cockpit 兼容性也比 debian 13 好一点点,不过总体来看大差不差,可能长远来看,还是 debian 运行起来更稳。
Debian 13:毛胚房,需要自己添加组件装修
Fedora Server:简装房,常用家具都有了,需要自己调整下摆放位置等等
成品 NAS 系统:精装房,啥都给你准备好了,但你只能在它规定的框架内玩耍
–
在这里记录一下自己的最终方案,算是给自己一个交代。
前提:
已经装好了 PVE 系统,并且 PVE 已经进行了 SRIOV 核显直通开启,并固定了内核版本,同时将其他软件升级到最新版。
系统管理
SR-IOV 驱动安装与内核固定
如果要在虚拟机里面跑转码、硬解等等服务,则只能使用 deb 系和 arch 系,这两种包管理器有 strongtz/i915-sriov-dkms 驱动的官方支持,安装很简单。但 dnf 系等系统是没有现成的包可以用的,也就是说用不了 SRIOV 核显直通功能。所以只有两条路:不使用核显;直通整个核显而非 SRIOV。我选了不通核显,因为相册和视频都单独开了 LXC 容器来使用,NAS 虚拟机也就没有核显需求了。
debian 系安装核显 SRIOV 驱动
nano /etc/default/grub
加入 i915.enable_guc=3
sudo update-grub
apt install -y dkms vainfo intel-media-va-driver wget firmware-linux linux-headers-$(uname -r)
前往 strongtz/i915-sriov-dkms 下载 deb 驱动包
sudo dpkg -i i915-sriov-dkms_*_amd64.deb
使用 apt-mark 命令锁定内核包,使用以下命令将当前内核版本锁定,防止其被升级:
sudo apt-mark hold linux-image-amd64 linux-headers-amd64
验证锁定状态,运行以下命令检查锁定是否成功:
apt-mark showhold
解除锁定(可选)如果需要解除锁定,可以运行:
sudo apt-mark unhold linux-image-amd64 linux-headers-amd64
纯终端管理方案
这种方案只需要做好 SSH 管理即可,但由于手机管理过于复杂,并且不能直观观看各种指标,最终放弃。
基本配置
# /etc/ssh/sshd_config
PermitRootLogin no
这个地方要禁止 root 账户登录
然后要在普通用户目录添加 .ssh 相关密钥文件,最好也禁用密码登录,从而保证安全性。
管理工具可以使用 mobaxterm,windows terminal 等等工具,连接后会自动获取系统信息。
配置太多了记不住,可以把各项配置文件放在 /etc/motd 中,然后每次登录会有提示,类似这样:
❯ cat /etc/motd
rsync: 将 B/ 同步为 A/ 一样的目录,有无 / 很重要
# 1. 干跑测试,不实际执行
rsync -av --delete --dry-run A/ B/
# 2. 确认无误后执行实际同步
rsync -av --delete A/ B/
配置文件路径:
┌─ 登录提示: /etc/motd
├─ SSH配置: /home/yanfansong/.ssh/
├─ SMB共享: /etc/samba/smb.conf
├─ MiniDLNA: /etc/minidlna.conf
├─ DDNS配置: /root/.ddns_go_config.yaml
└─ 容器编排: /appdata/应用数据/ podman自启动服务:~/.config/systemd/user/
├─ xunlei
└─ tmm
非容器服务:
┌─ ddns-go (动态DNS) /root/.ddns_go_config.yaml
├─ rsync (目录同步) crontab -l;/appdata/维护脚本/
├─ openlist (Web 存储访问)
├─ navidrome (音乐) 数据库:/{硬盘ID}/音乐/navidrome;音乐:/{硬盘ID}/音乐
└─ qBittorrent (BT 下载)
存储配置:
┌─ 本地磁盘: /{硬盘ID}
├─ 网络存储: /{协议}-{网盘名称}
└─ 备份路径: /{硬盘ID}/备份/
查看块设备
❯ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 55.9G 0 disk
├─sda1 8:1 0 976M 0 part /boot/efi
├─sda2 8:2 0 52.1G 0 part /
└─sda3 8:3 0 2.9G 0 part [SWAP]
❯ sudo blkid
/dev/sda2: UUID="d5c02b32-45b5-44cd-8fbf-1d33ed1f9e2c" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f130887b-2d35-4f39-8e55-e4df898a3fb6"
/dev/sda3: UUID="85e44207-a631-44c3-85d6-f045f9c02184" TYPE="swap" PARTUUID="93dcf731-6430-4c21-9700-1adbe858efec"
/dev/sda1: UUID="4857-1A5E" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="fc498b4a-1884-4666-b7e5-1df25c859a64"
查看 smart 信息
❯ sudo apt install -y smartmontools
...
❯ sudo smartctl -i /dev/sda # 基本信息
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.12.48+deb13-amd64] (local build)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Device Model: SURMA-60GB
Serial Number: 2104VD0R01871388
LU WWN Device Id: 0 000000 000000000
Firmware Version: 2104XKR
User Capacity: 60,022,480,896 bytes [60.0 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
TRIM Command: Available, deterministic
Device is: Not in smartctl database 7.3/5528
ATA Version is: ACS-3, ATA8-ACS T13/1699-D revision 6
SATA Version is: SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Thu Oct 23 16:49:09 2025 CST
SMART support is: Available - device has SMART capability.
SMART support is:
sudo smartctl -H /dev/sda # 整体健康 PASSED/FAILED
sudo smartctl -A /dev/sda | grep -E "(Temperature|Reallocated|Current_Pending)" # 温度、重映射、待映射
sudo smartctl -t short /dev/sda # 后台跑 2 分钟自检,完事后 `smartctl -l selftest` 看结果
数据比较复杂,可以询问 AI 硬盘是否健康。
硬盘挂载
使用纯 Linux 的话,建议使用 Ext4 格式,兼容性最好,在任何系统下数据都可以很方便地读取出来,但后期并不容易扩容(非 btrfs)。
由于没有“存储空间”的概念,一切都需要自己手动分区,手动管理所有的目录权限,这应该是纯 Linux 做 NAS 难度最大的一个点,如果你有跑 docker 的话,权限问题还会更加复杂,甚至无解。
推荐多用户文件组织方式,单用户的话不用加 UID 那一层:
- /DISK 权限 755
- /DISK/1000(用户 UID)1000:1000 755
- 用户文件
- /DISK/1001(同)
- 用户文件
- /DISK/1002(同)
- 用户文件
千万不要一股脑所有文件丢根目录然后 sudo chmod 777 -R,非常不利于管理
- 创建挂载文件夹
sudo mkdir -p /disk3T
- 拿 UUID
为防止盘符飘逸问题,必须使用可以唯一指定硬盘的 UUID 进行挂载,绝对不可使用 /dev/sdb1这种路径挂载。
sudo blkid /dev/sdb1 # 精准到分区
- 写入
/etc/fstab
UUID=263b43... /mnt/disk3T ext4 defaults,nofail 0 2
没报错就 OK;以后每次开机都会自动挂好。
硬盘整体速查
❯ lsblk -dno NAME,SIZE,MODEL,SERIAL && sudo smartctl -H /dev/sd? 2>/dev/null
sda 55.9G SURMA-60GB 2104VD0R01871388
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.12.48+deb13-amd64] (local build)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
图形界面管理方案
GM-SSH
新一代的服务器管理程序,我体验了一段时间,确实比宝塔、1panel 好用很多。
相对方便,缺点是需要获取 GMSSH 的密钥,关注下公众号就行了。
但是,毕竟 GMSSH 的初衷是网站服务器,很多功能也是为网站服务器优化的,核心功能也是在网站、数据库部署和数据安全上,对于 NAS 来说也许不是很实用,比较戳人的点是图形化文件管理和改配置,但这个用 vscode 也不是不行。
cockpit
本来打算使用纯终端方案,但是终端确实监控不方便,最终还是使用 cockpit 作为管理面板来使用
sudo apt install cockpit cockpit-pomdan cockpit-pcp
cockpit 还可以很方便地管理 docker 和虚拟机,但是没有 PVE 好用。
网络管理
网络层与数据链路层
终端工具 ip
网络层的 IP 地址配置、查看,链路层的速率、双工、自协商、驱动版本、固件版本、收发包/错包——ip 自带就能看。
❯ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:e0:20:12:82:01 brd ff:ff:ff:ff:ff:ff
altname enx00e020128201
inet 10.0.0.102/24 brd 10.0.0.255 scope global dynamic noprefixroute enp1s0
valid_lft 5226sec preferred_lft 4326sec
inet6 2409:8a60:2c10:a894:cd87:dd5:8c72:1f0c/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 206864sec preferred_lft 120464sec
inet6 fe80::d52c:30fb:6b0a:b266/64 scope link
valid_lft forever preferred_lft forever
要注意持久化问题(重启仍有效),ip 命令本身不保存,永久配置请写配置文件:
- Debian/Ubuntu:/etc/network/interfaces 或 netplan
- RHEL/CentOS:/etc/sysconfig/network-scripts/ifcfg-*
通用:NetworkManager / systemd-networkd
可用以下命令查看链路层信息:
❯ ip -s link show enp1s0
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:e0:20:12:82:01 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
383905486 502666 0 0 0 9947
TX: bytes packets errors dropped carrier collsns
213668840 521310 0 0 0 0
altname enx00e020128201
物理层
物理层可以使用 ethtool 查看
sudo apt install ethtool
❯ sudo ethtool enp1s0
Settings for enp1s0:
...
Speed: 1000Mb/s
...
Link detected: yes
可以综合使用 ip 和 ethtool 工具,一键查看网络信息
❯ ip link show enp1s0 && sudo ethtool enp1s0 | grep -E "Speed|Duplex|Link"
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:e0:20:12:82:01 brd ff:ff:ff:ff:ff:ff
altname enx00e020128201
Link partner advertised link modes: 10baseT/Half 10baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Link detected: yes
EUI64
debian13 会被分配两个 IPv6,其中一个是 EUI64 固定后缀的地址,直接在 ddns-go 中使用正则匹配这个后缀的地址即可。
ipv6reg: (?:^|:)(25ff:fe73:5f4)$
Fedora Server 已经默认启用 EUI64,只会获取一个固定 IPv6 后缀的公网地址,方便一些。
远程访问
远程访问方案需要灵活地选择、搭配,要看你最在意的点是哪一个
IPv6 + DDNS
直接部署 ddns-go 即可。
也可以直接使用 python 脚本定期执行,更加轻量化。
缺点是有些网站不支持 https,在公网上裸奔有一点安全风险。
IPv6 + DDNS + 反向代理
更加安全,并且方便 SSL,我用的这种方案,反向代理服务器和 DDNS 都在路由器上。
无安全风险,但是每项服务都需要添加反向代理,相对麻烦。
特殊服务(如 Gitea,我选择直接 DDNS 到设备上)。
VPN
非逼不得已不推荐,配置复杂,性能不如 IPv6,每个设备都需要安装 app。
但可以异地无缝访问,安全性最强没有之一。
通过虚拟局域网访问,需要在路由器和设备上进行配置。
网络安全
防火墙
debian 上的 ufw、cockpit 上的网络页面都可以很方便的配置防火墙,但从精细程度和配置难度来说,远不如 OpenWRT 强大和方便。
所以如果有 openwrt 做反向代理服务器和防火墙的话,这里就无需开防火墙。
UPS 不间断电源
推荐使用网络 nut
sudo apt update
sudo apt install nut-server nut-client nut-cgi
使用方案需要自行学习。
我的 nut 在 PVE 上,因此也不需要这个。
文件共享
NAS 系统的重中之重的重中之重,这一块配不好就别玩了。
网络文件管理
使用 Apache2 + davfs 可以实现 WebDAV,使用反向代理服务器加密 https
但是相对来说比较复杂,不推荐使用这种方式,使用 docker 部署 WebDAV 又会遇到很多无法自行解决的问题
所以不如使用 Openlist,Openlist 除了可以挂网盘,还可以挂本地磁盘
这样可以间接通过网页、WebDAV 两种方式来管理磁盘上的文件
注意一个地方,如果容器内需要使用挂载目录,不要先挂载到本地再用 -v 映射,容器本身就支持映射 SMB/NFS 文件夹。
回收站
回收站这个功能平时觉得没用,但真遇到数据误删,哭都来不及
# debian 系
sudo apt install trash-cli
# redhat 系
sudo dnf install trash-cli
trash 命令很简单,基本上看字面意思都能看懂:
❯ trash
-- external command --
trash trash-empty trash-list trash-put trash-restore trash-rm
添加一个 alias,禁用 rm:
alias rm='echo "请谨慎使用 rm 命令!建议使用 trash"'
这样配置的话,使用 rm 命令删除文件,会被阻止,并提示使用 trash,通过 trash 删除的文件默认会移动到用户的 ~/.local/share/Trash/ 文件夹。
❯ rm -rf .zsh_history
请谨慎使用 rm 命令!建议使用 trash -rf .zsh_history
后来我想到一个问题,如果删除的是其他磁盘的文件,那这个文件也会移动到 ~ 目录下吗?这样是否会占用系统盘大量空间?这个问题我问了一下 AI,节选一下:
在使用
trash-cli时,被删除的文件并不会默认移动到用户的~(家目录)下,而是会根据文件所在的存储设备(分区)创建对应的回收站目录,从而避免跨设备移动大文件导致的硬盘空间问题。具体机制如下:
1.
trash-cli的回收站目录规则
trash-cli遵循 FreeDesktop 回收站规范,对于不同分区的文件,会在该分区的根目录下创建.Trash目录(或用户专属的.Trash-<UID>目录,UID是用户ID),用于存储该分区内被删除的文件。
- 例如:若文件在
/data分区(独立硬盘或分区),删除后会被移动到/data/.Trash/<UID>/files/目录,而不是用户的~/.local/share/Trash/(家目录所在分区的回收站)。- 只有当文件所在分区没有写入权限(无法创建
.Trash目录)时,才会 fallback 到用户家目录的回收站(~/.local/share/Trash/)。
2. 关于“大文件删除是否会挤爆硬盘”
- 正常情况:由于文件被移动到自身所在分区的回收站,不会跨分区占用其他硬盘空间,因此不会因“移动大文件到
~目录所在分区”而挤爆该分区。- 特殊情况:若文件所在分区无权限创建
.Trash目录(如只读分区、挂载的外部设备无写入权限),trash-cli会强制将文件移动到家目录的回收站,此时若文件过大,可能导致家目录所在分区空间不足。
3. 如何避免问题?
- 定期清理回收站:使用
trash-empty命令清空回收站,或trash-rm手动删除大文件。- 检查文件所在分区:删除前通过
df <文件路径>确认文件所在分区,避免无权限场景下的跨分区移动。- 直接永久删除:若确认无需回收,可使用
rm命令(或trash-cli的--force选项,视版本而定)直接删除,跳过回收站。
因此,trash-cli 设计上优先使用文件所在分区的回收站,正常情况下不会因删除大文件而挤爆其他分区(包括 ~ 目录所在分区),但需注意特殊权限场景的处理。
我试了一下,机械硬盘上的数据的确被移动到了根目录:
❯ ls
. .. 1000 lost+found public .Trash-1000
还有一种防误删的方式——系统快照,通过 btrfs、zfs 等文件系统的快照功能,可以一定程度放置文件误删(比如每小时快照一次,保留24小时内快照)。但这高度依赖文件系统特性,如果使用 ext4,就无法进行快照。
SMB 协议
SMB 主要用在不支持 NFS 的设备和软件上,例如 Windows、Vidhub 等等。
samba 是服务端,smbclient 是客户端,可以按需安装。
sudo apt update
sudo apt install -y samba smbclient
cockpit 管理
需要安装插件,该插件不支持中文。
# 无法自动更新
curl -LO https://github.com/45Drives/cockpit-file-sharing/releases/download/v4.3.2/cockpit-file-sharing_4.3.2-2focal_all.deb
sudo apt install ./cockpit-file-sharing_4.3.2-2focal_all.deb
# 添加源的安装方式,可以自动更新,仅 Rocky 8 可用
curl -sSL https://repo.45drives.com/setup | sudo bash
sudo dnf install cockpit-file-sharing
# 无法自动更新
sudo dnf install https://github.com/45Drives/cockpit-file-sharing/releases/download/v4.3.2/cockpit-file-sharing-4.3.2-2.el8.noarch.rpm
然后在网页中添加配置即可,注意,要手动启用和设置服务自启动
sudo systemctl enable SMB
终端管理
# 备份初始配置
sudo cp /etc/samba/smb.conf{,.bak}
给需要使用 smb 的用户设个密码
sudo smbpasswd -a <username>
写入你要共享的文件夹
[视频文件]
path = /mnt/disk3T/视频文件/
available = yes
valid users = <username>
read only = no
browsable = yes
public = yes
writable = yes
[通用资料]
path = /mnt/disk3T/通用资料/
available = yes
valid users = <username>
read only = no
browsable = yes
public = yes
writable = yes
[相册]
path = /mnt/disk3T/相册/
available = yes
valid users = <username>
read only = no
browsable = yes
public = yes
writable = yes
重启服务生效:
sudo systemctl restart smb
NFS
# deb
sudo apt install nfs-common
# dnf
sudo dnf install nfs-utils
cockpit 管理
与 SMB 基本相似,同样需要手动启用
sudo systemctl enable nfs-server
终端管理
配置文件路径 /etc/exports
语法类似下面:
/HUH72/share -fsid=c2a5bbab-6ba5-4ee1-bf9d-609967eb75ee 10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/HUH72/shae2 -fsid=c2a5bbab-6ba5-4ee1-bf9d-6034547775ee 10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash)
DLNA
使用 minidlna 软件包
❯ cat /etc/minidlna.conf
# 媒体目录设置(重要)
media_dir=V,/HUH721212ALE601/视频文件
# 如果需要其他类型媒体,可以添加
# media_dir=A,/mnt/HUH721212ALE601/音乐文件
# media_dir=P,/mnt/HUH721212ALE601/图片文件
# 服务器名称
friendly_name=FedoraDLNA
# 端口(默认8200)
port=8200
# 数据库和日志目录
db_dir=/var/cache/minidlna
log_dir=/var/log
# 是否扫描内嵌封面
album_art_names=Cover.jpg/cover.jpg/AlbumArt.jpg/albumart.jpg/.jpg
# 自动扫描新文件(推荐)
inotify=yes
FTP/SFTP
从过往使用成品 NAS 的经验来看,我选择不使用这个功能,因为 FTP 完全比不上 WebDAV
podman 容器
基本用法
直接手撕 docker compose
❯ pwd;ls
/home/<username>/应用数据
. .. duplicati gitea <其他容器>
如果改动文件较多,还是建议连 vscode 改配置,vim 一个个改还是挺费力的,也不方便对比。
裸机 linux 一个很大的问题是,所有的文件权限都需要自己管理,这极大增加了 docker 的难度
因为 docker 容器以 root 权限运行,这会导致映射目录所有者被改写为 root:root,并且这个问题要解决极其复杂
所以我推荐
- 用 podman 代替 docker,虽然 podman 也存在这个问题,但至少还在可控的范围内。
- 单独开无特权 LXC 容器部署与机械硬盘无关的服务,定期把数据备份到机械硬盘上。
注意:一定要启用 Linger
loginctl enable-linger
否则容器在终端关闭后会自行退出,,登入的时候又自动启用,很尴尬
podman compose 的用法与 docker 基本一致,但是镜像前面要加上 docker.io/,示例:
❯ cat docker-compose.yml
services:
vaultwarden:
image: docker.io/vaultwarden/server:latest
container_name: vaultwarden
restart: always
由于 podman 使用 rootless 运行,基本不会导致目录权限被篡改,示例
❯ cd ../homepage
❯ ll
总计 16
drwxr-xr-x 3 1000 1000 4096 11月 6日 16:14 .
drwxr-xr-x 11 1000 1000 4096 11月 6日 17:09 ..
drwxr-xr-x 3 1000 1000 4096 11月 6日 21:20 config
-rwxr-xr-x 1 1000 1000 375 11月 6日 16:14 docker-compose.yml
但这并不是绝对的,也可能会遇到容器内用户改目录权限的问题,如果遇到了,要一一排查。
如果用 docker 运行这个 compose,config 目录必被改成 root:root
podman 容器自启动
podman 没有守护进程,因此不能通过 –restart 参数自启动
按下面 Gitea 示例来即可
使用用户级 systemd 服务(推荐)
# 停止并禁用当前服务
sudo systemctl stop gitea.service
sudo systemctl disable gitea.service
# 创建用户级服务
mkdir -p ~/.config/systemd/user/
cp /etc/systemd/system/gitea.service ~/.config/systemd/user/
# 编辑用户级服务文件
nano ~/.config/systemd/user/gitea.service
修改内容:
[Unit]
Description=Gitea
After=network.target
[Service]
Type=forking
WorkingDirectory=/appdata/应用数据/gitea
ExecStart=/usr/bin/podman-compose up -d
ExecStop=/usr/bin/podman-compose down
TimeoutStopSec=30
[Install]
WantedBy=default.target
启用用户服务:
systemctl --user daemon-reload
systemctl --user enable gitea.service
systemctl --user start gitea.service
# 确保用户服务在登录前启动
sudo loginctl enable-linger $USER
LXC 部署高性能应用
核显映射
首先,确保 LXC 容器是特权容器,并且开启以下选项:

然后在 LXC 配置文件 /etc/pve/lxc/10{x}.conf 中添加
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
也许你还需要给 /dev/dri 文件夹权限:sudo chmod 777 -R /dev/dri,否则容器内可能无法调用核显。
NFS 挂载
虚拟机方案,必须要考虑到一个问题:如果容器比 NAS 虚拟机启动更快,那么如何保证自动挂载 NAS 上的网络共享?
可以用 autofs 来简单规避这一问题(由于 LXC 容器一般都是 root 用户,所以不加 sudo)
apt/dnf update
apt/dnf install autofs
添加主要配置文件:echo "/- /etc/auto.direct --timeout=300" > /etc/auto.master,使用 /- 表示直接挂载到指定路径,而不是在子目录下。
创建直接挂载映射文件 /etc/auto.direct
# 直接挂载配置
# 格式: 完整路径 -fstype=nfs,选项 服务器:共享路径
# 示例
/videos -fstype=nfs,rw,no_root_squash,hard,intr,timeo=300,retrans=3 10.0.0.111:/HUH72/视频文件
/library -fstype=nfs,rw,no_root_squash,hard,intr,timeo=300,retrans=3 10.0.0.111:/HUH72/library
记得先创建挂载点:mkdir -p /videos /library
# 先检查挂载正不正常
systemctl restart autofs
# 正常的话就设为自启动
systemctl enable autofs