【NAS】fnOS 简要分析
萌新报道,开玩FNOS
目的
玩飞牛的第二天,我冒出来一个疑问
**
**
补充:
-
当前用户是管理员用户,用户名为admin
-
uid是 1000

带着这个问题,开始分析并得出结论
结论
**飞牛系统通过软链接把多个不同挂载点 **/vol1 ~ /vol*
中的数据目录整合到统一路径 /share/home/<uid>/webdav/
下,供 WebUI
使用
细节

- 飞牛(WebUI 登陆的用户)的文件管理下的数据存放在
/share/home/<uid>/webdav/
/share/home/<uid>/webdav/
是软连接的 /volx/<uid>/
- 多个用户有多个
/volx/<uid>
目录
- 比如
/volx/1000
、/volx/1001
、/volx/1002
、/volx/1233
…
问题又来了
-
由此引发疑问:/volx
是怎么来的?
用 df
工具简单查看一下,容易发现

/volx
是 /dev/mapper/trim_xxxx-x
挂载而来
-
/dev/mapper/trim_xxxx-x
是啥玩意 ?
大概了解了
物理磁盘 sdd
**─ 分区 sdd1 (linux_raid_member)
**─ 软件RAID设备 md123
**─ 作为物理卷 (PV) 加入卷组 trim_36087162_0870_40a2_98a5_4a402c3f69bb (VG)
**─ 逻辑卷 0 (LV, 7.28 TiB)
**─ 格式化为 btrfs
**─ 挂载点 /vol4
-
/dev/mapper/trim_xxxx-x
是谁挂载上的?
-
猜测/etc/fstab

-
猜测某个脚本,没有找到
grep -r "/vol4" /etc/init.d /etc/systemd/system /usr/lib/systemd/system /lib/systemd/system /opt 2>/dev/null
-
看看日志
journalctl -b | grep vol4
systemctl status trim_file_monitor.service
● trim_file_monitor.service - trim file monitor service
Loaded: loaded (/etc/systemd/system/trim_file_monitor.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-07-16 09:25:15 CST; 47min ago
Main PID: 1915 (trim_file_monit)
Tasks: 6 (limit: 19105)
Memory: 9.1M
CPU: 2.687s
CGroup: /system.slice/trim_file_monitor.service
**─1915 /usr/trim/bin/trim_file_monitor
Jul 16 09:25:38 vfnos monitor[1915]: Had been registered, /vol3
Jul 16 09:25:38 vfnos monitor[1915]: Watch storage /vol2 with level: 0
Jul 16 09:25:38 vfnos monitor[1915]: WatchFileSystem, /vol2, mask:0x400007c4
Jul 16 09:25:38 vfnos monitor[1915]: Had been registered, /vol2
Jul 16 09:25:38 vfnos monitor[1915]: Watch storage /vol4 with level: 0
Jul 16 09:25:38 vfnos monitor[1915]: WatchFileSystem, /vol4, mask:0x400007c4
Jul 16 09:25:38 vfnos monitor[1915]: Had been registered, /vol4
Jul 16 09:25:48 vfnos trim_file_monitor[1915]: Saved done!
Jul 16 09:31:31 vfnos monitor[1915]: [MountsMonitor] added:[/mnt/md122], type:[ext4]
Jul 16 09:32:48 vfnos monitor[1915]: [MountsMonitor] added:[/mnt/md125], type:[ext4]
-
**嘿,找到了一点信息 **trim_file_monitor
,可能有关系
-
这是个 systemd
管理的一个服务,来吧,分析下systemd怎么做的
- TODO,大概理清楚了还没有整理,fnOS做的真是优雅!值得学习
结论额外的了解
内核
系统
- Debian GNU/Linux 12 (bookworm)
文件系统
-
我当前的飞牛是:虚拟机安装,由宿主机USB类型的虚拟硬盘作为启动盘,数据盘是通过直通的sata控制器连接,在Web格式化硬盘位:Basic→Btrfs
启动盘 (系统根分区)
**─ sdg
**─ sdg1 (vfat, FAT32) —— 挂载于 /boot/efi (UEFI启动分区)
**─ sdg2 (ext4) —— 挂载于 / (根文件系统)
数据盘(btrfs + LVM + RAID 结构)
**─ sda1
** **─ md126 (RAID设备)
** **─ LVM逻辑卷 (LVM2_member)
** **─ btrfs 文件系统 —— 挂载于 /vol2
**─ sdb1
** **─ md124 (RAID设备)
** **─ LVM逻辑卷 (LVM2_member)
** **─ btrfs 文件系统 —— 挂载于 /vol3
**─ sdd1
** **─ md123 (RAID设备)
** **─ LVM逻辑卷 (LVM2_member)
** **─ btrfs 文件系统 —— 挂载于 /vol4
**─ nvme0n1p1
**─ md127 (RAID设备)
**─ LVM逻辑卷 (LVM2_member)
**─ btrfs 文件系统 —— 挂载于 /vol1
-
飞牛系统的启动
Linux 系统启动流程
**─ 1. 固件/BIOS/UEFI 加载启动引导程序
**
**─ 2. 引导加载器(GRUB等)启动内核和initramfs
**
**─ 3. 内核启动,初始化硬件和驱动
**
**─ 4. systemd(PID 1)启动
**
**─ 5. systemd 按目标和依赖启动服务
**─ rc-local.service (声明依赖,但因 /etc/rc.local 文件缺失,实际无效)
**
**─ trim_init.service —— 先初始化底层硬件和逻辑卷
↓ After
trim_main.service —— 负责挂载 /vol1 ~ /vol4 等核心业务逻辑
↓ After
trim_file_monitor.service —— 持续监控挂载点状态和变化
-
飞牛的应用及服务
trim_init.service # TRIM初始化服务,负责底层硬件及环境准备
**─> trim_diskpowerd.service # 硬盘电源管理守护进程,控制磁盘节能策略
**─> trim_main.service # TRIM主服务,核心业务逻辑启动和管理
**─> trim_file_monitor.service # 持续监控文件系统挂载点和状态变化
**─> trim_upload.service # 负责上传相关功能的服务
**─> trim_http_cgi.service # HTTP CGI处理服务,提供动态请求响应
**─> trim_app_cgi.service # 应用层CGI服务,处理更复杂业务请求
**─> trim_trashbind.service # 垃圾回收或临时文件管理服务
**─> trim_nginx.service # Nginx服务,TRIM定制的Web服务器
**─> trim_sac.service # 系统应用控制服务(SAC)
**─> trim_connect.service # 网络连接管理服务,依赖SAC
**─> trim_sharelink.service # 分享链接服务,依赖连接服务
**─> trim_app_center.service # 应用中心服务,管理应用模块和生命周期
graphical.target
**─ display-manager.service # 图形界面管理器,启动桌面环境
**─ systemd-update-utmp-runlevel.service # 运行级别变更日志
**─ multi-user.target # 多用户命令行模式
**─ dbus.service # D-Bus消息总线,系统核心通信服务
**─ NetworkManager.service # 现代网络管理
**─ docker.service # 容器服务
**─ ssh.service # 远程登录服务
**─ rsyslog.service # 系统日志
**─ cron.service # 定时任务服务
**─ systemd-logind.service # 登录会话管理
**─ basic.target # 系统基础启动目标
** **─ systemd-udevd.service # 设备管理守护进程
** **─ systemd-journald.service # 日志守护进程
** **─ systemd-timesyncd.service # 时间同步服务
** **─ systemd-modules-load.service # 内核模块加载
**─ sysinit.target # 系统初始化目标
** **─ local-fs.target # 本地文件系统挂载
** **─ swap.target # 交换分区挂载
**─ trim_init.service # TRIM自定义初始化服务(盘挂载等)
**─ trim_main.service # TRIM主业务服务
**─ trim_nginx.service # TRIM定制Web服务(Nginx)
部分分析过程
-
内核查看
uname -a
Linux vfnos 6.12.18-trim #5 SMP PREEMPT_DYNAMIC Thu Mar 27 10:30:00 CST 2025 x86_64 GNU/Linux
-
系统查看
cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
cat /etc/issue
███████╗███╗ ██╗ ██████╗ ███████╗
██╔════╝████╗ ██║██╔═══██╗██╔════╝
█████╗ ██╔██╗ ██║██║ ██║███████╗
██╔══╝ ██║╚██╗██║██║ ██║╚════██║
██║ ██║ ╚████║╚██████╔╝███████║
╚═╝ ╚═╝ ╚═══╝ ╚═════╝ ╚══════╝
OS version: fnOS v0.9.13
Hostname: vfnos
IPv4 for enp4s0: 192.168.1.40
fnOS Web UI can be directly accessed at: http://192.168.1.40:5666
For more information, help or support, go here:
https://www.fnnas.com
neofetch
_,met$$$$$gg. root@vfnos
,g$$$$$$$$$$$$$$$P. ----------
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
,$$P' `$$$. Host: KVM/QEMU (Standard PC (Q35 + ICH9, 2009) pc-q35-9.2)
',$$P ,ggs. `$$b: Kernel: 6.12.18-trim
`d$$' ,$P"' . $$$ Uptime: 31 mins
$$P d$' , $$P Packages: 1152 (dpkg)
$$: $$. - ,d$$' Shell: bash 5.2.15
$$; Y$b._ _,d$P' Resolution: 1024x768
Y$$. `.`"Y$$$$P"' CPU: Intel i3-10100 (6) @ 3.599GHz
`$$b "-.__ GPU: Intel CometLake-S GT2 [UHD Graphics 630]
`Y$$ Memory: 1401MiB / 16003MiB
`Y$$.
`$$b.
`Y$$b.
`"Y$b._
`"""
-
服务查看分析
graphical.target
**─ display-manager.service # 显示管理器,启动图形界面
**─ systemd-update-utmp-runlevel.service # 记录运行级别变化日志
**─ multi-user.target # 多用户模式,命令行多用户环境
**─ account-service.service # 用户账号服务
**─ accountsrv.service # 账户服务,系统用户管理相关
**─ ai_manager.service # AI 管理器,推测业务组件
**─ auto_thumbnailer.service # 自动缩略图生成服务
**─ autoThumbnailer.service # 可能是同类功能的另外实例
**─ avahi-daemon.service # Zeroconf 网络发现服务,局域网自动服务发现
**─ avahi.service # 同上,服务管理接口
**─ backup_service.service # 备份服务,数据保护相关
**─ cloud_storage_dav.service # 云存储DAV服务,文件共享
**─ console-setup.service # 控制台键盘及显示设置
**─ containerd.service # 容器管理服务,Docker 依赖
**─ cron.service # 定时任务守护进程
**─ dbus.service # D-Bus**总线,基础IPC服务,必需
**─ dlcenter.service # 下载中心服务,业务组件
**─ docker.service # Docker容器引擎服务
**─ dockermgr.service # Docker管理相关服务
**─ dpdk.service # 高性能数据包处理,网络加速
**─ dsmgr.service # 业务管理服务
**─ e2scrub_reap.service # Ext4/Ext3文件系统碎片整理守护进程
**─ epmd.service # Erlang端口映射守护进程,可能为业务组件
**─ eventlogger_service.service # 事件日志服务,日志收集
**─ filestor_service.service # 文件存储服务,业务相关
**─ finder_service.service # 文件或资源查找服务
**─ imagesrv.service # 图片服务器,业务相关
**─ libvirt-guests.service # 虚拟机管理服务
**─ libvirtd.service # libvirt守护进程,虚拟机管理
**─ lm-sensors.service # 硬件传感器检测服务
**─ mediasrv.service # 多媒体服务
**─ ModemManager.service # 调制解调器管理,网络服务
**─ mountmgr.service # 挂载管理服务
**─ multiple-downloads.service # 多任务下载服务
**─ multipleDownloads.service # 可能是同类服务的另外实例
**─ network.service # 旧版网络服务
**─ network_service.service # 网络服务管理
**─ networking.service # 网络初始化服务
**─ NetworkManager.service # 网络管理器,现代网络配置服务
**─ nfs-server.service # NFS文件服务器
**─ nmbd.service # Samba NetBIOS守护进程
**─ openvswitch-switch.service # Open vSwitch虚拟交换机
**─ postgresql.service # PostgreSQL数据库服务
**─ rabbitmq-server.service # 消息队列服务
**─ rc-local.service # 传统rc.local兼容服务(这里无效,文件缺失)
**─ resmon.service # 资源监控服务
**─ resmon_service.service # 资源监控业务服务
**─ rpc_broker.service # RPC调用代理服务
**─ rpcbind.service # RPC绑定服务
**─ rsyslog.service # 系统日志服务
**─ samba-ad-dc.service # Samba AD域控制器
**─ security_service.service # 安全相关服务
**─ share_service.service # 共享服务
**─ show_startup_info.service # 启动信息展示服务
**─ smartmontools.service # 磁盘监控工具服务
**─ smbd.service # Samba守护进程,文件共享
**─ smbftpd.service # FTP服务
**─ ssh.service # SSH远程登录服务
**─ sysinfo_service.service # 系统信息服务
**─ sysrestore.service # 系统恢复服务
**─ system_info.service # 系统信息收集
**─ system_shutdown.service # 系统关机服务
**─ systemd-ask-password-wall.path # systemd密码请求路径
**─ systemd-logind.service # 登录管理服务
**─ systemd-update-utmp-runlevel.service # 运行级别日志服务(前面也出现)
**─ systemd-user-sessions.service # 用户会话管理
**─ trim_app_center.service # TRIM应用中心
**─ trim_app_cgi.service # TRIM CGI服务
**─ trim_appinit.service # TRIM应用初始化服务(未激活)
**─ trim_connect.service # TRIM连接服务
**─ trim_diskpowerd.service # TRIM磁盘电源管理服务
**─ trim_file_monitor.service # TRIM文件监控服务
**─ trim_http_cgi.service # TRIM HTTP CGI服务
**─ trim_init.service # TRIM初始化服务,挂载/vol系列磁盘
**─ trim_main.service # TRIM主业务服务
**─ trim_nginx.service # TRIM定制Nginx服务,Web服务
**─ trim_sac.service # TRIM系统应用控制服务
**─ trim_sharelink.service # TRIM分享链接服务
**─ trim_trashbind.service # TRIM垃圾绑定服务
**─ trim_upload.service # TRIM上传服务
**─ upnp.service # 通用即插即用服务
**─ usersrv.service # 用户服务
**─ webdav.service # WebDAV文件共享服务
**─ winbind.service # Windows域认证服务
**─ wpa_supplicant.service # 无线网络管理服务
**─ wsdd2.service # Windows设备发现服务
**─ basic.target # 基础启动目标
** **─ -.mount # 根文件系统挂载
** **─ tmp.mount # /tmp挂载点
** **─ paths.target # 路径相关服务
** **─ slices.target # cgroup切片
** ** **─ -.slice # 根cgroup切片
** ** **─ system.slice # 系统cgroup切片
** **─ sockets.target # socket激活
** ** **─ avahi-daemon.socket # Avahi服务Socket
** ** **─ dbus.socket # D-Bus消息总线Socket
** ** **─ dm-event.socket # 设备管理事件Socket
** ** **─ docker.socket # Docker Socket
** ** **─ epmd.socket # Erlang端口映射Socket
** ** **─ libvirtd-admin.socket # 虚拟机管理Socket
** ** **─ libvirtd-ro.socket # 虚拟机只读Socket
** ** **─ libvirtd.socket # 虚拟机管理Socket
** ** **─ rpcbind.socket # RPC绑定Socket
** ** **─ systemd-initctl.socket # systemd初始化Socket
** ** **─ systemd-journald-audit.socket # 审计日志Socket
** ** **─ systemd-journald-dev-log.socket # 日志设备Socket
** ** **─ systemd-journald.socket # 日志服务Socket
** ** **─ systemd-udevd-control.socket # udev控制Socket
** ** **─ systemd-udevd-kernel.socket # udev内核事件Socket
** ** **─ uuidd.socket # UUID生成服务Socket
** ** **─ virtlockd-admin.socket # 虚拟化锁管理Socket
** ** **─ virtlockd.socket # 虚拟化锁管理Socket
** ** **─ virtlogd-admin.socket # 虚拟机日志Socket
** ** **─ virtlogd.socket # 虚拟机日志Socket
** **─ sysinit.target # 系统初始化目标
** ** **─ apparmor.service # 安全模块加载
** ** **─ blk-availability.service # 块设备可用性检查
** ** **─ dev-hugepages.mount # Hugepages挂载
** ** **─ dev-mqueue.mount # 消息队列挂载
** ** **─ keyboard-setup.service # 键盘配置
** ** **─ kmod-static-nodes.service # 静态节点加载
** ** **─ lvm2-lvmpolld.socket # LVM轮询Socket
** ** **─ lvm2-monitor.service # LVM监控服务
** ** **─ mdadm-shutdown.service # RAID卸载服务
** ** **─ proc-sys-fs-binfmt_misc.automount # 二进制格式自动挂载
** ** **─ resolvconf.service # DNS解析配置
** ** **─ sys-fs-fuse-connections.mount # FUSE挂载
** ** **─ sys-kernel-config.mount # 内核配置挂载
** ** **─ sys-kernel-debug.mount # 调试挂载
** ** **─ sys-kernel-tracing.mount # 跟踪挂载
** ** **─ systemd-ask-password-console.path # 密码请求路径
** ** **─ systemd-binfmt.service # 二进制格式服务
** ** **─ systemd-firstboot.service # 首次启动初始化
** ** **─ systemd-journal-flush.service # 日志刷新
** ** **─ systemd-journald.service # 日志守护进程
** ** **─ systemd-machine-id-commit.service # 机器ID提交
** ** **─ systemd-modules-load.service # 模块加载
** ** **─ systemd-pcrphase-sysinit.service # PCR阶段初始化
** ** **─ systemd-pcrphase.service # PCR阶段
** ** **─ systemd-pstore.service # 持久存储
** ** **─ systemd-random-seed.service # 随机数种子
** ** **─ systemd-repart.service # 分区重新分配
** ** **─ systemd-sysctl.service # sysctl配置
** ** **─ systemd-sysusers.service # 系统用户管理
** ** **─ systemd-timesyncd.service # 时间同步服务
** ** **─ systemd-tmpfiles-setup-dev.service # 临时文件设置
** ** **─ systemd-tmpfiles-setup.service # 临时文件设置
** ** **─ systemd-udev-trigger.service # udev触发器
** ** **─ systemd-udevd.service # udev设备管理
** ** **─ systemd-update-utmp.service # utmp更新
** ** **─ cryptsetup.target # 加密设置目标
** ** **─ integritysetup.target # 完整性检查目标
** ** **─ local-fs.target # 本地文件系统挂载目标
** ** ** **─ -.mount # 根文件系统
** ** ** **─ boot-efi.mount # EFI启动分区
** ** ** **─ systemd-fsck-root.service # 根文件系统检查
** ** ** **─ systemd-remount-fs.service # 重新挂载根fs
** ** **─ swap.target # 交换分区
** ** ** **─ swapfile.swap # 交换文件
** ** **─ veritysetup.target # 只读验证设置目标
** **
** **─ timers.target # 定时任务目标
** **─ apt-daily-upgrade.timer # apt自动升级定时器
** **─ apt-daily.timer # apt自动更新定时器
** **─ dpkg-db-backup.timer # dpkg数据库备份定时器
** **─ e2scrub_all.timer # ext文件系统整理定时器
** **─ exim4-base.timer # 邮件队列定时器
** **─ fstrim.timer # 文件系统TRIM定时器
** **─ logrotate.timer # 日志轮转定时器
** **─ man-db.timer # man文档更新定时器
** **─ systemd-tmpfiles-clean.timer # 临时文件清理定时器
**─ getty.target # 登录终端目标
** **─ getty-static.service # 静态登录终端
** **─ getty@tty1.service # tty1终端登录服务
**─ machines.target # 容器和虚拟机挂载目标
** **─ var-lib-machines.mount # 容器挂载点
**─ nfs-client.target # NFS客户端目标
** **─ auth-rpcgss-module.service # RPC安全模块
** **─ nfs-blkmap.service # NFS块映射服务
** **─ rpc-statd-notify.service # NFS通知服务
** **─ remote-fs-pre.target # 远程文件系统预挂载
**─ nut.target # 网络不间断 电源相关
** **─ nut-driver-enumerator.path # NUT驱动枚举路径
** **─ nut-driver-enumerator.service # NUT驱动枚举服务
** **─ nut-monitor.service # NUT监控服务(未激活)
** **─ nut-server.service # NUT服务器服务(未激活)
** **─ local-fs.target # 本地文件系统
** ** **─ -.mount # 根挂载
** ** **─ boot-efi.mount # EFI挂载
** ** **─ systemd-fsck-root.service # 根文件系统检查
** ** **─ systemd-remount-fs.service # 重新挂载根文件系统
** **─ nut-driver.target # NUT驱动目标
**─ remote-fs.target # 远程文件系统目标
**─ var-lib-machines.mount # 容器挂载点
**─ nfs-client.target # NFS客户端
**─ auth-rpcgss-module.service # RPC安全模块
**─ nfs-blkmap.service # NFS块映射
**─ rpc-statd-notify.service # NFS通知
**─ remote-fs-pre.target # 远程文件系统预挂载