根据我们完整的对话,以下是你从配置硬盘开机挂载到部署 OpenList 系统服务的全过程总结,包含所有关键步骤、配置细节及最终解决方案。
一、硬盘开机自动挂载配置
1. 查看分区信息
执行 sudo blkid 得到需要挂载的两个 NTFS 分区:
| 设备 | 用途 | UUID | 标签 |
|---|---|---|---|
/dev/nvme0n1p4 | 固态硬盘数据分区 | 1662A3D262A3B541 | 1-固态硬盘 |
/dev/sda1 | 机械硬盘数据分区 | 2273D1CD6CF37E9C | 2-机械硬盘 |
2. 创建挂载点
sudo mkdir -p /mnt/ssd_data # 实际你可能用了 /mnt/ssd
sudo mkdir -p /mnt/hdd_data # 实际可能用了 /mnt/hdd
3. 编辑 /etc/fstab,追加以下两行
# 固态数据分区 (NVMe) - 所有用户可读写
UUID=1662A3D262A3B541 /mnt/ssd_data ntfs-3g defaults,noatime,nofail,utf8,fmask=000,dmask=000 0 0
# 机械数据分区 (SATA) - 所有用户可读写
UUID=2273D1CD6CF37E9C /mnt/hdd_data ntfs-3g defaults,noatime,nofail,utf8,fmask=000,dmask=000 0 0
fmask=000,dmask=000使得所有用户(包括nobody)对该分区拥有完全读写权限。nofail保证分区故障时系统仍能启动。utf8支持中文文件名。
4. 测试并重启
sudo mount -a # 测试挂载
sudo reboot # 验证开机自动挂载
重启后,在 Dolphin 中看到“1-固态硬盘”和“2-机械硬盘”即成功。
二、OpenList 服务部署(systemd)
1. 项目原始位置
~/桌面/openlist/ 包含:
openlist(可执行二进制)data/(配置及数据目录)run.sh(原启动脚本,不再使用)
2. 移动到系统目录
sudo mkdir -p /opt/openlist
sudo cp -r ~/桌面/openlist/* /opt/openlist/
sudo chmod +x /opt/openlist/openlist
3. 开放目录权限(允许任意用户写入)
因为程序需要写入子目录,且你希望家庭环境下任何用户都能读写,执行:
sudo chmod -R 777 /opt/openlist
并设置默认 ACL,使以后新建的子目录自动继承 777 权限:
sudo setfacl -d -m u::rwx,g::rwx,o::rwx /opt/openlist
4. 创建 systemd service 文件
文件:/etc/systemd/system/openlist.service
[Unit]
Description=OpenList Server
After=network.target
Wants=network.target
[Service]
Type=simple
WorkingDirectory=/opt/openlist
ExecStart=/opt/openlist/openlist server
Restart=on-failure
RestartSec=5
User=nobody
Group=nogroup
NoNewPrivileges=yes
PrivateTmp=yes
[Install]
WantedBy=multi-user.target
- 使用
User=nobody(UID 65534)以最小权限运行。 - 监听端口 5244(>1024,无需 root)。
WorkingDirectory确保程序使用相对路径data时能找到配置。
5. 启动并启用服务
sudo systemctl daemon-reload
sudo systemctl enable --now openlist
sudo systemctl status openlist
日志显示服务成功启动:
start HTTP server @ 0.0.0.0:5244
三、遇到的权限问题及解决
问题现象
服务日志报错:
failed get objs: failed to list objs: open /run/media/XUYINGJUN/2-机械硬盘/安装包/: permission denied
- 程序配置中指向了
/run/media/XUYINGJUN/2-机械硬盘/安装包/。 - 该路径是 udisks 自动挂载的用户目录,权限为
700,只有XUYINGJUN能访问。 nobody用户无法进入该目录,导致权限拒绝。
解决方案(采用)
修改 OpenList 配置文件 /opt/openlist/data/config.json,将所有涉及自动挂载路径的项改为使用 /etc/fstab 中固定挂载的路径:
| 原路径(自动挂载) | 新路径(固定挂载) |
|---|---|
/run/media/XUYINGJUN/2-机械硬盘/安装包/ | /mnt/hdd_data/安装包/ |
/run/media/XUYINGJUN/1-固态硬盘/... | /mnt/ssd_data/... |
因为 /mnt/hdd_data 和 /mnt/ssd_data 已通过 fmask=000,dmask=000 开放了 777 权限,nobody 可以正常读写。
操作步骤
sudo nano /opt/openlist/data/config.json
# 修改路径后保存
sudo systemctl restart openlist
sudo journalctl -u openlist -f # 确认不再有权限错误
四、最终成果
- 硬盘:开机自动挂载到
/mnt/ssd_data和/mnt/hdd_data,所有用户可读写,支持中文。 - OpenList 服务:以
nobody用户运行,开机自启,崩溃自动重启,监听 5244 端口,能正确读写固定挂载的硬盘路径。 - 系统安全:避免使用 root 运行网络服务,遵循最小权限原则;目录权限 777 在家庭环境中可接受。
五、后续维护提醒
-
防火墙(如需外部访问):
sudo firewall-cmd --add-port=5244/tcp --permanent sudo firewall-cmd --reload -
查看服务日志:
sudo journalctl -u openlist -f -
修改配置后重启服务:
sudo systemctl restart openlist -
若添加新子目录需继承 777:已设置默认 ACL,无需额外操作。
以上即是你从硬盘挂载到服务部署的完整技术记录。所有配置均已在你的 openSUSE Leap 系统上验证通过。