一些NAS软件——图片服务
目录
装了一台X86低功耗主机作为NAS,操作系统是Windows11,搭配了一些开源软件。
对我来说,Windows轻度使用是很友好的。
- 完善的驱动,更换了主板和CPU甚至不需要重装系统。
- NTFS可以直接在电脑上读取,硬盘坏掉的情况下比较好处理。虽然Window可以挂载Linux的磁盘,可以通过一些软件读取诸如ext4之类的文件系统,我试着把威联通上拆下来的4T硬盘接入到台式机,拷贝过程中会出错。
不过,说是简单其实也折腾了不少,开源软件使用起来确实没有群晖这些套件方便,需要自己调教和试错。这篇先来说说图片服务。
开源相册服务挺多的,但是用排除法可以排除掉大多数,因为一部分只支持图片上传,不能挂在已有的图片存储。我的硬盘里有几万张照片,重新上传一次并且打乱已有的目录结构,这是不可接受的。
PhotoPrism
这应是目前的最优解。支持人脸识别,支持地图,可以挂载已有的照片目录。官方推荐通过docker-compose部署,提供了样例YML文件。
Running PhotoPrism on a server with less than 4 GB of swap space or setting a memory/swap limit can cause unexpected
官方建议是分配4GB的swap,可以在Docker desktop中设置。
Windows Pro users should disable the WSL 2 based engine in Docker Settings
Windows用户需要关闭WSL 2,使用WSL 1,因为按照微软的说法,WSL 2在跨操作系统的文件访问时,性能是不如WSL 1的。

我这种把Windows目录挂载到Docker里就是这种用法,这里我开始想是不是装个PVE或者ESXI比较好
你的项目文件必须存储在 Windows 文件系统中。 WSL 1 可以更快地访问从 Windows 装载的文件。 如果你将使用 WSL Linux 分发版来访问 Windows 文件系统上的项目文件,并且这些文件无法存储在 Linux 文件系统上,那么,通过使用 WSL 1,你将跨 OS 文件系统实现更快的性能。
在使用倍控N5105主板时,docker中的photoprism-photoprism-1容器时常会挂掉,看日志会显示内存分配错误,即使把内存调整到8GB也无济于事,后来换成了N97或者是G7400就再也没出现过这个问题。不知道是不是跟传说中的N5105虚拟化问题有关,这个问题我时常听到PVE或者是ESXI用户们吐槽,不过Windows下没人提,大概是我这样用的人不多。在我前期咨询时甚至有人跟我说“别碰N5105,会让人变得不幸”😂,看样子是被折腾得不轻。
使用G7400的过程中,会发现PhotoPrism扫描文件生成缩略图时CPU占用率只有60-70,生成速度甚至比不过N97,发热量却要大得多。
根据官方文档在docker-compose.yml中设置了PHOTOPRISM_WORKERS环境变量,这个参数默认是根据核心数来决定的,G7400支持超线程,所以我把他手动设置成了4,这样CPU占用率会提高到97%,生成速度有所提高。算了下一个小时可以处理3200张左右的手机照片,我的3万多张照片需要10个小时。
这么看来照片扫描转换之类的任务,核心数还是很重要的。G7400但有比较高的主频和单核性能,但是2C4T的规格和N97这样4C4T的低功耗处理器相比居然拉不开差距。
网上很多关于NAS CPU的选择还是过于片面,毕竟每个人使用场景千差万别,测试软件并不能完全反映出这些使用场景下的真实情况,还是得自己折腾。顺带测试了一下,13700k处理这些玩意儿只要1个多小时😂。
最后,PhotoPrism的使用过程中还碰到过一个奇怪的情况。程序会按照它自有的规则创建目录来存储缩略图,但是有几次我在它的错误日志中看到无法创建目录的报错。
023-03-30 21:33:41 ERRO index: failed creating thumbnails for mobile/zlt/mate30pro/playmemory/9274519533105654181.JPEG (mkdir /photoprism/storage/cache/thumbnails/d/e/2: not a directory)
2023-03-30 21:33:41 ERRO media: failed creating fit_2048 (mkdir /photoprism/storage/cache/thumbnails/d/e/2: not a directory
通过docker exec -it <container name> /bin/bash进入到doker内部,可以看到它居然是个文件,而不是目录。

在Windows下找到这个目录,会发现它确实是个目录。这就很尴尬了,我把容器删掉重建,也确实没能复现这个问题。换到G7400平台后,休眠忘了关掉,索引过程中休眠了,重启后又碰到了这个问题。推测大概和关机、休眠之类的有关?
这还是个蛮麻烦的问题,在Github中给官方提了一个discussion,官方似乎并不认为这是一个bug。不过既然是开源软件,我又不懂GO语言,也没法强求什么。好在它不会影响已有的文件,暂时问题不大。
PhotoPrism只有付费的Plus版本才支持多用户。我暂时没有这个需求,所以这个照片服务算是可用的。
PhotoView
这个软件也支持挂载已有的图片,处理过程也不会改变已有的文件结构。它的功能相对比较少,支持人脸识别,支持时间线,不过没有地图,也没有自动分类。
Immich
这是个后起之秀,UI做得不错,还有配套APP,比起PhotoPrism只能使用浏览器版好多了。
文档看来看去没有找到挂载已有目录的方法,在Github的issue里面搜了一下,官方有个回应是不提供这个功能,请通过cli工具导入。
不过后来,在discussion中看到官方置顶的话题,说是打算支持Gallery Watcher特性,看了一下关联的issue就是管理已有的图片。
这个图片服务迭代的很快,这么看来可以期待一下,不知道今年能不能等到。😂
剩下的lychee、pickwego还没试