软链接和硬链接
Linux 文件构成
- 数据块:存放文件真实内容的地方。
索引节点:
- 文件的身份。存储权限、大小等元数据,并指向真实数据即
数据块
。 - Link Count (链接计数):索引节点上的一个数字,记录有多少个文件名指向它。与Telegram类似 :链接数为 0 时,数据才会被系统删除。
- 文件的身份。存储权限、大小等元数据,并指向真实数据即
- 文件名:指向文件的索引节点的“标签”。关系:
文件名 -> 索引节点 -> 数据块
。
硬链接 (Hard Link)
- 本质:多个文件名指向同一个索引节点。
特性:
- 所有链接地位平等,没有“源文件”和“快捷方式”之分。
- 删除任一链接,仅使索引节点的链接计数减 1。
- 数据只在链接数为 0 时才被删除。
- 不能跨硬盘/文件系统。
软链接 (Soft Link / 快捷方式)
- 本质:一个特殊文件,其内容是另一个文件的路径地址。
特性:
- 只是一个指针,地位不平等。
- 删除源文件,软链接会失效(变成“断开的链接”)。
- 可以跨硬盘/文件系统。
Docker
发现 radarr 无论如何都不能硬链接 qbit 下载的电影。才发现 docker 的卷映射到主机上不同目录,对 docker 来说就是跨硬盘/文件系统。
这是原来的目录树:
/mnt/Storage1/
├── AppData/
├── Downloads/ <-- 下载目的地
├── Media/ <-- 媒体库存放地
├── qbittorrent-nox/ <-- qb 的配置
├── radarr/ <-- Radarr 的配置
└── ... (其他各种文件夹)
/mnt/Storage1/Media/Movies
->/movies
/mnt/Storage1/Downloads
->/downloads
这样 movies 和 downloads 映射不是同一个目录。
最初的配置虽然在主机上满足了硬链接的条件,但在 Docker 的虚拟化层面上,通过创建多个独立的挂-载点,人为地制造了“跨文件系统”的假象,从而导致了失败。
这是最终的目录树:
/mnt/Storage1/Plex-Media-Server/
├── configs
│ ├── jellyfin
│ ├── prowlarr
│ ├── qbittorrent-nox
│ ├── qbittorrent-nox\011
│ └── radarr
└── data
├── downloads
└── media
/mnt/Storage1/Plex-Media-Server/data
->/data
全部的容器的data
都映射到/mnt/Storage1/Plex-Media-Server/data
中
总而言之,对容器来说,卷映射最重要的还是映射 config 和 data,config 可以放在一个 configs 目录下为不同容器创建的目录,data 比如说像这种影视库要共用影视文件的则映射到同一个 data 目录就行了。
评论区(4条评论)
测试
测试
测试
测试