背景

这份教程基于一次完整的从飞牛(fnOS)系统迁移到 Ubuntu 24.04.4 LTS Desktop + 1Panel + Docker 开源生态的硬核实践整理而成。整个过程经历了备份、重装、恢复、排错、优化的全流程,融入了长达数万字的对话中遇到的每一个“坑”和最终验证有效的解决方案。

本教程的最大特点:它不是一份理想化的官方文档,而是一份真实的排错实录,涵盖了从底层磁盘挂载(飞牛复杂的LVM/RAID结构)、SSH连接、1Panel快照恢复,到硬盘休眠配置、Docker代理设置、Cockpit反代等所有实际操作细节。

适用场景:飞牛系统(或其他NAS系统)迁移至Ubuntu + 1Panel,希望保留原有数据,并搭建更强大、更可控的家庭服务器环境。


一、备份

1.1 1Panel面板快照(最关键的一步)

在飞牛系统的1Panel中,必须使用“面板快照”功能,而不是普通的“网站备份”。普通的备份只包含网站文件,而面板快照能完整备份:

  • 网站配置(域名、Nginx规则)
  • 防火墙规则
  • 计划任务
  • 面板设置

操作步骤

  1. 登录飞牛上的1Panel → 面板设置快照
  2. 点击 “创建快照”,备份账号选择“服务器磁盘”
  3. 创建完成后,找到快照文件(通常在 /opt/1panel/backup/snapshot),将其复制到你的数据盘或外部存储设备(这一步非常重要,重装系统后会用到)

1.2 Docker数据备份

1Panel快照不包含Docker容器的内部数据(如Nextcloud的文件、数据库等),需要单独备份:

# 查看Docker数据目录(默认为/var/lib/docker)
docker info | grep "Docker Root Dir"

# 打包备份
sudo tar -czvf docker-backup.tar.gz /var/lib/docker

将打包文件也复制到外部存储。

1.3 记录关键信息

建议用笔记记录以下信息,恢复时能省去很多麻烦:

  • 1Panel网络信息(如 1panel-network 的子网、网关)
  • 数据库密码、应用密钥
  • 域名配置

二、安装Ubuntu桌面版(24.04.4 LTS)

2.1 制作启动盘

  • 从清华镜像源下载:ubuntu-24.04.4-desktop-amd64.iso
  • 使用Rufus(Windows)或 dd命令写入U盘

2.2 安装过程中的关键选择

  1. 分区:如果你希望系统盘和数据盘分离,可以在安装时手动分区:
    • EFI分区:512MB
    • /:建议60-80GB(ext4)
    • /home:剩余空间(ext4)——这样以后重装系统可以保留用户数据
  2. 用户信息:设置用户名(如 king)、密码、主机名
  3. 软件选择取消勾选“安装第三方图形驱动”和“安装媒体编解码器”,保持系统最小化

2.3 安装后的第一件事:换源

Ubuntu 24.04使用新的DEB822格式,编辑源文件:

# 备份原文件
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak

# 编辑
sudo nano /etc/apt/sources.list.d/ubuntu.sources

替换为清华源内容:

Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

更新源:

sudo apt update && sudo apt upgrade -y

三、设置SSH远程连接(告别显示器)

Ubuntu桌面版默认只安装了SSH客户端,没有安装SSH服务端,需要手动安装:

# 安装SSH服务端
sudo apt install openssh-server -y

# 启动并设置开机自启
sudo systemctl enable --now ssh

# 检查状态
sudo systemctl status ssh

# 如果防火墙开启,放行SSH端口
sudo ufw allow ssh

此时就可以用另一台电脑的PuTTY或终端连接了

ssh 用户名@你的UbuntuIP

避坑提醒:如果连接失败,可能是防火墙或服务未启动。用 sudo systemctl status ssh 检查,若显示 inactive,用 sudo systemctl start ssh 启动。


四、安装1Panel并恢复快照

4.1 安装1Panel

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh
sudo bash quick_start.sh

按提示设置1Panel端口、用户名、密码。

4.2 恢复Docker数据(先于面板快照恢复)

因为1Panel快照恢复时会尝试启动容器,所以需要先让Docker数据就位:

# 停止Docker服务
sudo systemctl stop docker

# 将备份的docker-backup.tar.gz解压覆盖
sudo tar -xzvf /path/to/docker-backup.tar.gz -C /

# 启动Docker服务
sudo systemctl start docker

4.3 恢复1Panel快照

  1. 登录1Panel → 面板设置快照
  2. 点击 “导入快照”,选择之前备份的快照文件
  3. 等待导入完成,系统会自动重启1Panel服务

4.4 重建1Panel网络和修复应用

快照恢复后,可能会因为网络环境变化导致部分容器启动失败:

  1. 检查网络:在1Panel“容器-网络”中,查看是否存在 1panel-network。如果不存在,手动创建一个同名的bridge网络,填入之前记下的子网信息(如 172.20.0.0/16
  2. 重建应用:在“应用商店-已安装”中,对显示异常的应用逐个点击 “重建”。重建时会读取已存在的Docker数据,不会丢失配置

在重建之前,必须先配置好Docker代理,否则恢复后重建应用时可能无法拉取镜像!
请先按照第七阶段的方法配置好Docker代理(包括修改 daemon.json、重启Docker、验证代理生效)。如果暂时无法配置代理,也可以使用离线导入镜像的方式(见第七阶段备选方案),但推荐优先配置代理。


💾 第五阶段:挂载飞牛的“复杂”硬盘(LVM/RAID)

这是整个迁移中最可能出现问题的环节,因为飞牛系统通常对每块硬盘都设置了单盘RAID + LVM,导致在Ubuntu下不能直接挂载。

5.1 识别磁盘结构

sudo lsblk -f

你会看到类似这样的输出:

sda
└─sda1   linux_raid_member
  └─md0   LVM2_member
    └─卷组-逻辑卷  ext4

这就是飞牛典型的单盘RAID1 + LVM结构:每块物理盘先做成一个独立的RAID1阵列(虽然是单盘),然后再用LVM管理。

5.2 安装必要工具

sudo apt install mdadm lvm2 smartmontools sdparm -y

5.3 组装RAID并激活LVM

# 扫描并组装所有可识别的RAID
sudo mdadm --assemble --scan

# 查看组装的RAID设备
cat /proc/mdstat
# 应该看到类似 md0 : active raid1 sda1[0] 的输出

# 扫描并激活LVM卷组
sudo vgscan
sudo vgchange -ay

# 查看逻辑卷
sudo lvs
sudo lvdisplay

你会看到类似这样的逻辑卷路径:

  • /dev/trim_2abfb71e_7982_4d6d_ac4e_8f81d4533fff/0
  • /dev/trim_3bd2bc87_9c09_4efc_993b_fdc489e2d0a9/0
  • /dev/trim_2dfb11ee_bcf4_4117_8add_df84633db194/0

5.4 挂载逻辑卷(数据无损)

# 创建挂载点
sudo mkdir -p /mnt/disk{1,2,3}

# 挂载(路径以实际lvs输出为准)
sudo mount /dev/trim_2abfb71e_7982_4d6d_ac4e_8f81d4533fff/0 /mnt/disk1
sudo mount /dev/trim_3bd2bc87_9c09_4efc_993b_fdc489e2d0a9/0 /mnt/disk2
sudo mount /dev/trim_2dfb11ee_bcf4_4117_8add_df84633db194/0 /mnt/disk3

5.5 验证数据

ls /mnt/disk1
ls /mnt/disk2
ls /mnt/disk3

如果能看见飞牛中的文件(如照片、视频),恭喜你——数据完好无损!

5.6 配置开机自动挂载(使用UUID)

# 获取文件系统UUID(不是LVM的UUID)
sudo blkid /dev/trim_2abfb71e_7982_4d6d_ac4e_8f81d4533fff/0
sudo blkid /dev/trim_3bd2bc87_9c09_4efc_993b_fdc489e2d0a9/0
sudo blkid /dev/trim_2dfb11ee_bcf4_4117_8add_df84633db194/0

编辑 /etc/fstab

sudo nano /etc/fstab

添加类似以下三行(替换UUID为实际值):

UUID=06176f77-6bee-44c9-bd31-50276af711a4 /mnt/disk1 ext4 defaults,noatime 0 2
UUID=1e1a0d70-0e3f-444a-96e5-091d9b42b178 /mnt/disk2 ext4 defaults,noatime 0 2
UUID=f198112a-a62c-4184-b51b-ea478e07c97e /mnt/disk3 btrfs defaults,noatime 0 2

5.7 保存RAID配置(确保重启后自动组装)

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

避坑提醒:第三个盘可能是btrfs文件系统,这是飞牛默认格式,可以直接挂载使用,无需转换。挂载后检查文件系统类型,确保在fstab中填写正确。


💤 第六阶段:硬盘休眠配置(保护机械盘)

使用 hd-idle 实现三块机械盘(sda、sdb、sdc)的自动休眠,并配置监控脚本记录健康状态。

6.1 安装hd-idle

sudo apt update
sudo apt install hd-idle -y

6.2 配置自动休眠策略

编辑配置文件 /etc/default/hd-idle

sudo nano /etc/default/hd-idle

修改为以下内容:

START_HD_IDLE=true
# -i 0 保证默认不休眠(避免影响系统盘)
# -a 后面紧跟硬盘ID,-i 600 表示空闲600秒(10分钟)后休眠
HD_IDLE_OPTS="-i 0 -a sda -i 600 -a sdb -i 600 -a sdc -i 600"

参数解释

  • -i 0:对其他未指定的磁盘不休眠
  • -a sda -i 600:对 /dev/sda 设置10分钟无操作后休眠
  • 同理为sdb、sdc设置

6.3 启动服务

sudo systemctl enable hd-idle
sudo systemctl start hd-idle

# 查看状态
sudo systemctl status hd-idle

6.4 测试休眠

# 立即强制休眠(测试用)
sudo hdparm -y /dev/sdb

# 查看硬盘状态(应显示 standby)
sudo hdparm -C /dev/sdb

# 查看hd-idle空闲计时器
sudo hd-idle -t sda
sudo hd-idle -t sdb
sudo hd-idle -t sdc

注意hd-idle -t显示空闲时间,不是强制休眠。强制休眠用 hdparm -y

6.5 创建硬盘健康监控脚本

创建一个脚本,定期记录三块盘的SMART数据,观察休眠效果和健康状态。

脚本路径/usr/local/bin/disk_health_monitor.sh

#!/bin/bash

# ================= 配置部分 =================
DISKS=("/dev/sda" "/dev/sdb" "/dev/sdc")
LOG_FILE="/var/log/disk_health_monitor.log"
# =============================================

# 检查 smartctl 是否安装
if ! command -v smartctl &> /dev/null; then
    echo "$(date "+%Y-%m-%d %H:%M:%S") - 错误:未发现 smartctl,请先安装:sudo apt install smartmontools" | tee -a $LOG_FILE
    exit 1
fi

# 如果日志文件不存在,创建表头
if [ ! -f "$LOG_FILE" ]; then
    echo "时间 | 磁盘 | 运行小时 | 磁头起停(LCC) | 马达起停" > "$LOG_FILE"
    echo "------------------------------------------------------------" >> "$LOG_FILE"
fi

# 循环处理每个磁盘
for DISK in "${DISKS[@]}"; do
    if [ ! -b "$DISK" ]; then
        echo "$(date "+%Y-%m-%d %H:%M:%S") | $DISK | 磁盘不存在,跳过" >> "$LOG_FILE"
        continue
    fi

    DATE=$(date "+%Y-%m-%d %H:%M:%S")
  
    # 提取关键数据
    HOURS=$(sudo smartctl -a "$DISK" | grep "Power_On_Hours" | awk '{print $10}')
    LOAD_CYCLES=$(sudo smartctl -a "$DISK" | grep "Load_Cycle_Count" | awk '{print $10}')
    START_STOP=$(sudo smartctl -a "$DISK" | grep "Start_Stop_Count" | awk '{print $10}')

    [ -z "$HOURS" ] && HOURS="N/A"
    [ -z "$LOAD_CYCLES" ] && LOAD_CYCLES="N/A"
    [ -z "$START_STOP" ] && START_STOP="N/A"

    echo "$DATE | $DISK | $HOURS h | $LOAD_CYCLES | $START_STOP" >> "$LOG_FILE"
    echo "记录成功: $DATE | $DISK | $HOURS h | $LOAD_CYCLES | $START_STOP"
done

赋予执行权限并设置定时任务(例如每天凌晨2点记录):

chmod +x /usr/local/bin/disk_health_monitor.sh

# 添加到crontab
sudo crontab -e
# 添加一行
0 2 * * * /usr/local/bin/disk_health_monitor.sh

避坑提醒

  • LVM可能会定期写入元数据,阻止磁盘休眠。如果发现硬盘始终不休眠,可以调整LVM配置(/etc/lvm/lvm.conf 中设置 write_cache_state = 0),但会影响性能,建议先观察。
  • 使用 iotopiostat 检查是否有进程频繁访问磁盘。

🌐 第七阶段:配置Docker局域网代理

由于网络环境限制,Docker拉取镜像需要代理。你的局域网内有代理主机(IP:192.168.1.112,端口:7897)。

7.1 编辑Docker配置文件

sudo nano /etc/docker/daemon.json

确保内容如下(注意JSON语法,最后一个花括号不能少):

{
  "data-root": "/var/lib/docker",
  "live-restore": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-file": "5",
    "max-size": "100m"
  },
  "proxies": {
    "http-proxy": "http://192.168.1.112:7897",
    "https-proxy": "http://192.168.1.112:7897",
    "no-proxy": "localhost,127.0.0.1,192.168.1.0/24"
  },
  "registry-mirrors": [
    "https://docker.xuanyuan.me",
    "https://registry.hub.docker.com",
    "https://docker.1panel.live"
  ]
}

语法检查

  • 确保每个大括号、方括号都正确闭合
  • 最后一个条目后面不能有逗号

7.2 重启Docker服务

sudo systemctl restart docker

7.3 验证代理是否生效

# 查看Docker环境变量
sudo systemctl show --property=Environment docker

# 测试拉取镜像
docker pull hello-world

如果拉取成功,且代理主机上有对应日志,说明配置正确。

避坑提醒

  • Windows防火墙:如果代理主机是Windows,记得在防火墙中放行7897端口,允许局域网访问
  • 代理软件设置:确保代理软件(如Clash、v2ray)开启了“允许局域网连接”

🚀 第八阶段:拉取v2raya镜像(备用代理方案)

如果后续需要更灵活的代理(如透明代理),可以安装v2raya。

8.1 通过apt安装

# 添加官方源
wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/trusted.gpg.d/v2raya.asc
echo "deb https://apt.v2raya.org/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list

# 安装
sudo apt update
sudo apt install v2raya -y

# 启动服务
sudo systemctl enable --now v2raya.service

8.2 访问Web界面

浏览器打开 http://你的IP:2017,创建管理员账号,导入节点即可。

8.3 配置Docker使用v2raya代理

v2raya默认HTTP代理端口为20171,可以修改Docker配置中的代理地址指向它:

"proxies": {
  "http-proxy": "http://127.0.0.1:20171",
  "https-proxy": "http://127.0.0.1:20171"
}

v2raya默认会开启HTTP代理端口(通常为 20171)和SOCKS5端口(20170)。如果你只是希望Docker通过代理拉取镜像,可以将Docker代理配置指向 http://127.0.0.1:20171。如果你开启了v2raya的全局透明代理模式(例如使用TPROXY),则无需额外配置Docker代理,所有流量会自动走代理。请根据你的实际需求选择。


🔒 第九阶段:安全检查与证书配置

9.1 检查防火墙

# 查看防火墙状态
sudo ufw status

# 放行必要端口(如1Panel、SSH、HTTP/HTTPS)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 9090/tcp  # Cockpit端口

9.2 1Panel安全设置

  • 登录1Panel,修改默认端口(建议改为非标准端口)
  • 开启面板登录验证码
  • 定期检查“安全-防火墙”中的端口放行规则

9.3 SSL证书申请

在1Panel中:

  1. 进入“网站” → “证书” → “申请证书”
  2. 选择ACME类型(如Let's Encrypt)
  3. 填写域名、邮箱,自动申请证书
  4. 在网站设置中启用HTTPS并选择申请的证书

🖥️ 第十阶段:安装Cockpit并配置反向代理

10.1 安装Cockpit

sudo apt install cockpit cockpit-storaged -y
sudo systemctl enable --now cockpit.socket

10.2 在1Panel中配置反向代理

  1. 在1Panel“网站”中创建新站点,域名例如 cockpit.你的域名.com
  2. 启用HTTPS,选择已申请的SSL证书
  3. 设置反向代理地址:http://127.0.0.1:9090

10.3 解决Cockpit反代后的访问问题

Cockpit默认只允许通过localhost或与服务器主机名匹配的域名访问。通过反向代理访问时,需要修改Cockpit配置:

sudo nano /etc/cockpit/cockpit.conf

添加以下内容:

[WebService]
AllowUnencrypted = true
Origins = https://cockpit.你的域名.com http://cockpit.你的域名.com

重启Cockpit服务:

sudo systemctl restart cockpit

避坑提醒

  • 如果页面能打开但样式丢失,检查Nginx配置是否传递了正确的Host头
  • 如果出现403,通常是 Origins配置未正确添加

10.4 安装SMB共享插件(Ubuntu 24.04特供版)

官方源尚未支持24.04,需要手动下载适配22.04的deb包(在24.04上也能用):

# 安装Samba依赖
sudo apt install samba nfs-common policykit-1 -y

# 下载deb包
wget https://github.com/45Drives/cockpit-file-sharing/releases/download/v4.5.3-4/cockpit-file-sharing_4.5.3-4jammy_all.deb

# 安装
sudo dpkg -i cockpit-file-sharing_4.5.3-4jammy_all.deb
sudo apt --fix-broken install -y
sudo systemctl restart cockpit

现在通过Cockpit的“文件共享”插件可以方便地管理Samba共享。


☁️ 第十一阶段:安装Nextcloud并优化配置

11.1 1Panel应用商店安装

  1. 在1Panel“应用商店”中搜索Nextcloud,选择最新版安装
  2. 同时安装MariaDB和Redis(作为依赖)
  3. 数据目录建议放在SSD上的 /home/nextcloud_data(利用SSD高速读写)

11.2 配置反向代理(公网访问)

同Cockpit类似,在1Panel中为Nextcloud创建网站,设置域名和SSL。

11.3 修改Nextcloud配置文件

编辑 /home/nextcloud_data/config/config.php(路径以实际为准),添加以下配置解决反向代理问题:

'trusted_domains' => 
array (
  0 => 'localhost',
  1 => 'nc.你的域名.com',
),
'overwrite.cli.url' => 'https://nc.你的域名.com',
'overwritehost' => 'nc.你的域名.com',
'overwriteprotocol' => 'https',
'trusted_proxies' => 
array (
  0 => '127.0.0.1',  // 1Panel Nginx容器IP
),
'forwarded_for_headers' => array('HTTP_X_FORWARDED_FOR'),

11.4 集成ONLYOFFICE实现文档在线编辑

独立部署Collabora Online(推荐)

docker run -d --restart=always --name=collabora \
  -p 9980:9980 \
  -e "aliasgroup1=https://nc.你的域名.com" \
  -e "extra_params=--o:ssl.enable=false --o:ssl.termination=true" \
  --cap-add MKNOD \
  collabora/code

在1Panel中为 office.你的域名.com 设置反向代理,并添加WebSocket支持。

在Nextcloud后台“管理设置”→“Office”中,填写服务器地址 https://office.你的域名.com


🧹 第十二阶段:清理Snap与桌面优化

12.1 彻底禁用并删除Snap

Snap会占用系统资源且自动更新不可控,建议彻底移除:

# 1. 卸载所有Snap应用(除核心外)
sudo snap remove firefox snap-store firmware-updater

# 2. 卸载桌面集成组件
sudo snap remove gnome-42-2204 gtk-common-themes snapd-desktop-integration

# 3. 卸载snapd
sudo apt purge snapd -y

# 4. 删除残留目录
sudo rm -rf /var/cache/snapd /snap /var/lib/snapd ~/snap

# 5. 阻止Snap重新安装
sudo nano /etc/apt/preferences.d/nosnap.pref
# 添加:
Package: snapd
Pin: release a=*
Pin-Priority: -10

12.2 安装Edge浏览器(桌面备用)

# 添加微软仓库
curl -fSsL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-edge.gpg > /dev/null
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-edge.gpg] https://packages.microsoft.com/repos/edge stable main' | sudo tee /etc/apt/sources.list.d/microsoft-edge.list

# 安装
sudo apt update
sudo apt install microsoft-edge-stable -y

12.3 整理桌面图标

由于删除了Snap,一些桌面快捷方式可能失效,可以手动清理 ~/Desktop~/.local/share/applications 中的无效链接。


🕒 第十三阶段:设置定时清理脚本

在1Panel中创建计划任务,定期清理系统垃圾和Docker无用镜像。

脚本内容(保存为 /usr/local/bin/cleanup.sh):

#!/bin/bash
echo "--- 开始系统清理 [$(date)] ---"

# 清理孤儿依赖
apt-get autoremove -y

# 清理软件包缓存
apt-get autoclean -y

# 清理残留配置文件
dpkg -l | grep ^rc | awk '{print $2}' | xargs -r apt-get purge -y

# 清理Docker垃圾(虚悬镜像、停止的容器等)
docker system prune -af

# 清理系统日志,保留最近3天
journalctl --vacuum-time=3d

echo "--- 清理完成 ---"

在1Panel“计划任务”中创建新任务:

  • 任务类型:Shell脚本
  • 执行周期:每天凌晨3点(0 3 * * *
  • 脚本内容:直接粘贴上述代码,或填写脚本路径

✅ 第十四阶段:收尾与验证

  1. 检查所有服务:1Panel、Cockpit、Nextcloud、Jellyfin等是否正常运行
  2. 验证自动挂载:重启一次,确认 /mnt/disk* 都已自动挂载
  3. 测试代理:执行 docker pull nginx 看是否通过代理拉取
  4. 验证休眠:等待10分钟后,用 hdparm -C /dev/sdb 查看磁盘状态
  5. 确认防火墙:确保只开放了必要端口

📝 最后的话

至此,你已完成从飞牛到自建Ubuntu服务器的完整迁移,并获得了一份详尽的操作记录。这份教程最大的价值在于真实——每一个步骤都经过实际验证,每一个“坑”都有对应的解决方案。

现在,你拥有的是一个完全可控、功能强大、且根据你的硬件(HP 600 SFF G3)和需求定制的家庭服务器。尽情享受这份折腾后的宁静与成就感吧!

如果有新的需求或问题,随时可以继续探索——这正是自建服务器的乐趣所在。


🧩 附:优化过程中的折腾记录与避坑指南

在迁移和调优过程中,围绕“构建轻量、可控、高效的Ubuntu桌面服务器”这一目标,进行了大量尝试。以下是详细记录,包括目的、尝试方案、最终选择及放弃原因,供日后参考。

1. 软件安装方式:从图形界面到命令行

目的:摆脱Snap版软件,改用原生Deb包或更轻量的方式安装应用。

尝试过的方案 遇到的问题 最终选择 放弃原因
GNOME软件中心(Snap版) 内存占用高,与系统风格不搭,已卸载 Modren(轻量图形前端)+ APT命令行 软件中心本身不是问题,但Snap版不受控,卸载后改用更轻量的Modren,日常安装仍用命令行
GDebi图形安装器 打开 .deb文件后窗口空白无响应 APT命令行sudo apt install ./xxx.deb GDebi图形界面在Ubuntu 24.04上可能存在Wayland或PolicyKit兼容问题,调试复杂,命令行稳定高效
手动解压Zotero 解压后找不到可执行文件,或启动失败 Flatpak版Zotero 手动解压需要自己处理快捷方式和更新,Flatpak版自动更新、沙箱隔离,省心且官方支持

经验:图形工具虽好,但遇到兼容问题时不值得深究,直接换用命令行或Flatpak往往更快。

2. 处理文件关联(MIME类型)

这是最关键的一步。系统记住了一些文件格式要由 gnome-software 打开,我们需要把这个关联删掉。

bash

# 查看有哪些文件类型还关联着 gnome-software
grep -r "gnome-software" /usr/share/applications/ ~/.local/share/applications/

# 找到对应的 .desktop 文件(通常是 /usr/share/applications/org.gnome.Software.desktop),
# 它里面定义了支持哪些文件类型。如果只是想取消关联,可以备份后删除这个文件:
sudo mv /usr/share/applications/org.gnome.Software.desktop /usr/share/applications/org.gnome.Software.desktop.bak

# 更新桌面数据库
sudo update-desktop-database

3. 检查并停止后台服务

GNOME Software 有一个后台服务,负责检查更新和提供搜索功能。即使界面没了,它可能还在运行。

bash

# 查看服务状态
systemctl --user status gnome-software-service.service

# 如果存在且正在运行,停止它并禁用开机自启
systemctl --user stop gnome-software-service.service
systemctl --user disable gnome-software-service.service

💡 补充说明

做完以上步骤,重启一下系统或注销重新登录,再双击未知文件,应该就不会弹出那个搜索窗口了。

org.gnome.Software 作为系统组件,它的很多功能是通过插件实现的,比如支持 PackageKit(管理 deb 包)、fwupd(更新固件)等。所以彻底移除它可能会影响系统更新提示等功能,这一点你可以根据实际需要权衡。如果只是为了阻止未知文件弹窗,处理完第二步的文件关联可能就够了。

2. 浏览器硬件加速:从卡顿到流畅

目的:解决Edge浏览器滑动卡顿、CPU高的问题,让核显(Intel HD 630)参与渲染。

尝试过的方案 遇到的问题 最终选择 放弃原因
检查驱动、权限 lspci识别,i915加载,但 chrome://gpu显示软件渲染 坚持权限修正(加入 render组) 必须注销登录后权限才生效,这是基础步骤
调整Edge flags 启用 Override software rendering list等无效 最终方案:在 edge://settings/system开启硬件加速并重启浏览器 之前忽视了这个最简单的开关,折腾了半天的启动参数和Xorg切换其实多余
切换到Xorg会话 Xorg下硬件加速成功,但Wayland才是现代选择 继续使用Wayland Edge本身支持Wayland硬件加速,只需正确开启并重启即可

经验:遇到硬件加速问题,先检查最简单的地方:设置开关、权限、重启。不要急于换会话。

3. 硬盘休眠:从“永不眠”到“自动睡”

目的:让三块机械盘(sda、sdb、sdc)在空闲时自动休眠,节能降噪。

尝试过的方案 遇到的问题 最终选择 放弃原因
hd-idle配置 配置正确,但硬盘从不休眠 拆除RAID/LVM结构 根本原因是磁盘处于RAID+LVM管理下,底层元数据写入导致无法空闲
手动休眠测试 hdparm -y在卸载分区后成功,挂载后无效 排查写入进程 发现挂载后文件系统元数据(如jbd2)有少量写入,通过 noatime挂载选项大幅减少
调整LVM/RAID配置 尝试修改LVM参数减少写入 彻底拆除 临时缓解不如根治,拆除后磁盘变为普通独立分区,休眠正常
改用hdparm -S 让硬盘自管理休眠,但需要测试兼容性 最终使用hd-idle + 普通分区 拆除RAID/LVM后,hd-idle正常工作了

经验:硬盘不休眠先看底层结构,RAID/LVM是罪魁祸首。拆除后配合 noatime挂载选项,休眠问题迎刃而解。

4. 用户权限:让普通用户读写挂载点

目的:用户 king能直接读写 /mnt/disk*下的文件,无需每次sudo。

尝试过的方案 遇到的问题 最终选择 放弃原因
临时chown 重启后失效(挂载点所有权重置) 修改 /etc/fstab后固定所有权 对于ext4/btrfs,只需在挂载后 chown一次,所有权会保存在文件系统中,永久有效
通过uid/gid挂载 仅适用于FAT/NTFS 放弃 不适用当前文件系统
创建storage组 可行但稍显复杂 直接chown 单用户环境,直接chown最简单

经验:对于Linux原生文件系统,chown一次即可永久生效,无需每次挂载时指定。

5. 其他尝试与工具

工具/方案 目的 最终评价
Firejail / Flatpak 隔离运行国产软件(WPS、微信) 未深入,但Flatpak是未来方向
Docker版WPS 尝试在容器中运行办公软件 资源占用大,配置复杂,放弃
Mission Center 系统监控(类似任务管理器) 轻量好用,替代GNOME系统监视器
rsync 数据迁移 稳定可靠,配合 -avP显示进度,完美
grsync rsync图形前端 未实际使用,命令行已满足需求

📌 避坑指南总结

  1. 软件安装:优先用 apt或Flatpak,少折腾图形安装器。
  2. 硬件加速:先开设置开关,再查权限,最后考虑驱动。重启浏览器或注销登录很重要。
  3. 硬盘休眠:确认磁盘是普通独立分区,RAID/LVM会阻止休眠。挂载时加 noatime减少写入。
  4. 权限问题/mnt下的挂载点所有权可通过 chown一次解决,无需每次挂载时指定。
  5. 遇到卡顿时:用 iotopfatraceiostat定位写入源,而不是盲目调整配置。

这次折腾虽然花费时间,但彻底理清了Ubuntu桌面服务器的关键配置点,以后重装系统可以照搬经验,少走弯路。

方案二:全局禁用所有休眠功能

如果希望从根本上杜绝系统进入任何形式的休眠,可以采用这个方案。这会屏蔽掉系统所有与休眠相关的“目标”(targets),相当于釜底抽薪。

操作步骤如下:

在终端中执行以下一条命令即可:

bash

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

这条命令会禁用所有与休眠相关的系统服务,让系统和应用程序都没有办法触发休眠。

如果想恢复休眠功能,可以执行:

bash

sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target