外部图库跟踪存储在 Immich 外部文件系统中的资产。扫描外部图库时,Immich 将从磁盘加载视频和照片,并创建相应的资产。这些资产将显示在主时间轴上,它们的外观和行为与其他资产一样,包括在地图上查看、添加到相册等。之后,如果在 Immich 外部修改了文件,需要扫描图库才能显示修改。
如果外部资产从磁盘中删除,Immich 会在重新扫描时将其移至垃圾桶。要恢复资产,需要恢复原始文件。30 天后,文件将从垃圾桶中移除,Immich 中元数据的任何更改都将丢失。
注意事项
如果您以任何方式向外部资产添加元数据(如添加到相册或编辑描述),该元数据只存储在 Immich 内部,不会持续到外部资产文件。如果您将资产移动到图库内的另一个位置,所有这些元数据在重新扫描时都会丢失。这是因为资产在移动后被视为新资产。这是一个已知问题,将在未来的版本中修复。
注意事项
由于高速缓存的作用,刷新的资产可能需要一些时间才能正确显示在网页视图中。您需要清除浏览器中的缓存才能看到更改。这是一个已知问题,将在未来的版本中修复。在 Chrome 浏览器中,您需要用 F12 打开开发人员控制台,然后用 F5 重新加载页面,最后右键单击重新加载按钮并选择 “清空缓存并硬重新加载”。
导入路径
外部图库使用导入路径来确定要扫描的文件。每个图库可以有多个导入路径,以便将不同位置的文件添加到同一个库中。导入路径是递归扫描的,如果一个文件在多个导入路径中,它只会被添加一次。每个导入文件必须是文件系统中存在的可读目录;导入路径对话框会提醒您注意任何无法访问的路径。
如果对导入路径进行了编辑,导致外部文件不再位于任何导入路径中,则会以删除文件的方式将其从图库中删除。如果文件被移回导入路径,则会像添加新文件一样再次添加。
故障排除
有时,外部图库无法正确扫描。如果 Immich 无法访问文件,就会出现这种情况。这里有一些需要检查的地方:
- 在 docker-compose.yml 文件中,卷是否被正确挂载?
- 卷是否也挂载到了任何工作容器中?
- 导入路径是否设置正确,是否与 docker-compose.yml 文件中设置的路径一致?
- 确保在导入图库中没有使用符号链接,也没有跨 docker 挂载链接。
- 权限设置是否正确?
- 确保使用的是正斜杠 (/),而不是反斜杠。
要验证 Immich 能否连接到外部图库,请在容器内启动 shell。运行 docker exec -it immich_server bash 到一个 bash shell。如果导入路径是 /data/import/photos,用 ls /data/import/photos 检查一下。在任何微服务容器中也做同样的检查。
排除模式
默认情况下,导入路径中的所有文件都将添加到程序图库中。如果存在不应添加的文件,可以使用排除模式将其排除。排除模式是与完整文件路径相匹配的 glob 模式。如果文件与排除模式相匹配,就不会添加到程序库中。可以在扫描设置页面为每个库添加排除模式。在引擎盖下,Immich 使用 glob 包来匹配模式,因此请参阅其文档,了解支持哪些模式。
一些基本例子:
- **/*.tif 将排除扩展名为 .tif 的所有文件
- **/hidden.jpg 将排除所有名为 hidden.jpg 的文件
- **/Raw/** 将排除任何名为 Raw 的目录中的所有文件
- **/*.{tif,jpg} 将排除扩展名为 .tif 或 .jpg 的所有文件
@ 等特殊字符应转义,例如:
- **/\@eadir/** 将排除任何名为 @eadir 的目录中的所有文件
自动监控外部图库文件变化(试验性)
这项功能目前属于试验性质,仅供高级用户使用。如果启用,它将允许自动观察文件系统,这意味着新资产会自动导入到 Immich,而无需重新扫描。
如果您的照片在网络驱动器上,自动文件监视功能可能无法工作。在这种情况下,你将不得不依靠定期刷新库来调入你的更改。
开启方法:进入系统管理 -> 系统设置 -> 外部图库 -> 监控图库(实验性),启用“监控外部图库文件变化”选项
故障排除
如果遇到 ENOSPC 错误,则需要增加文件监视器限制。在 sysctl 中,此键名为 fs.inotify.max_user_watches,默认值为 8192。将该值提高到一个合适的数值,使其大于你要监视的文件数量。注意,Immich 必须监控导入路径中的所有文件,包括任何被忽略的文件。
ERROR [LibraryService] Library watcher for library c69faf55-f96d-4aa0-b83b-2d80cbc27d98 encountered error: Error: ENOSPC: System limit for number of file watchers reached, watch '/media/photo.jpg'
在极少数情况下,图库监视器会挂起,导致 Immich 无法启动。在这种情况下,请在配置文件中禁用图库监视器。如果在 Immich 内部启用了图库监视器,就必须在不使用微服务的情况下启动应用程序。在 docker compose 文件中禁用微服务,启动 Immich,在管理设置中禁用图库监视器,关闭 Immich,重新启用微服务,然后就可以正常启动 Immich 了。
定期扫描
有一个自动扫描任务,计划每天运行一次。这项工作也会清理任何卡在删除中的图库。
使用方法
让我们举一个具体的例子,在 Immich 中添加一个现有的图库。在这里,我们要添加以下文件夹:
- /home/user/old-pics:包含童年照片的文件夹。
- /mnt/nas/christmas-trip:圣诞节旅行的照片。子文件夹 /mnt/nas/christmas-trip/Raw 包含直接从数码单反相机获取的原始文件。我们不想将原始文件导入 Immich
- /mnt/media/videos: 来自同一次圣诞旅行的视频。
首先,我们需要计划如何组织图库。圣诞旅行的照片应该属于自己的资料库,因为我们想把原始文件排除在外。视频和旧照片可以放在同一个库中,因为我们想导入所有文件。如果其他文件夹中没有符合原始文件排除模式的文件,我们也可以将所有三个文件夹添加到同一个图库中。
挂载 Docker 卷
immich-server 容器需要访问图库。修改 docker compose 文件如下
# docker-compose.yml
immich-server:
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - /mnt/nas/christmas-trip:/mnt/media/christmas-trip:ro
+ - /home/user/old-pics:/mnt/media/old-pics:ro
+ - /mnt/media/videos:/mnt/media/videos:ro
+ - /mnt/media/videos2:/mnt/media/videos2 # 可以删除该文件夹中的文件,因为它不是以 :ro 结尾的
+ - "C:/Users/user_name/Desktop/my media:/mnt/media/my-media:ro" # 在 Windows 系统中的导入路径。
提示
末尾的 ro 标志只允许对卷进行只读访问。这将禁止在 Web UI 中删除图像,或向库中添加元数据(XMP 边卡)。
信息
记得运行 docker compose up -d 来注册更改。确保你能在容器中看到挂载的路径。
创建新图库
这些操作必须由 Immich 管理员执行。
- 点击系统管理 -> 外部图库管理
- 点击“创建外部图库”
- 选择拥有该图库的用户,以后不能更改
- 输入 /mnt/media/christmas-trip,然后点击添加
- 点击保存
- 单击新创建图库的下拉菜单
- 单击“重命名”,将其重命名为“圣诞之旅”
注意:我们必须使用 /mnt/media/christmas-trip 路径,而不是 /mnt/nas/christmas-trip 路径,因为所有路径都必须是 Docker 容器看到的路径。
接下来,我们将添加一个排除模式,以过滤掉原始文件。
- 点击新创建的 Christmas 库的下拉菜单
- 点击管理
- 点击扫描设置
- 点击添加排除模式
- 输入 **/Raw/** 并单击保存。
- 单击保存
- 单击新建图库的下拉菜单
- 单击扫描
现在将在后台扫描圣诞旅行资料库。同时,让我们把视频和老照片添加到另一个资料库中。
- 单击创建外部图库。
注意
如果在此处出现错误,请将其他外部图库重命名为其他名称。这是一个错误,将在今后的版本中修复。
- 单击新建图库的下拉菜单
- 单击“编辑导入路径”
- 单击“添加路径”
- 输入 /mnt/media/old-pics 然后单击添加
- 单击“添加路径”
- 输入 /mnt/media/videos 然后单击添加
- 单击保存
- 单击扫描
几秒钟内,旧照片和视频文件夹中的资产就会显示在主时间轴上。
文件夹视图
文件夹视图提供了除时间线以外的另一种视图,类似于文件资源管理器。它允许你浏览资料库中的文件夹和文件。该功能对于高度策划和定制的外部图库或配置良好的存储模板非常方便。
您可以在 “账户设置”>“功能”>“文件夹 ”下启用该功能。
该用户界面目前仅适用于网页;移动版将在后续版本中推出。
设置自定义扫描时间间隔
注意
只有管理员才能执行此操作。
您可以在系统管理 -> 系统设置 -> 外部图库下为触发器外部图库重新扫描定义自定义时间间隔。
您可以使用预设或 cron 格式设置扫描间隔。有关详细信息,请参阅 Crontab Guru。
发表回复