You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

群晖Docker Home-Assistant环境下shutil.copy2复制文件大小不匹配求助

问题排查方向
  • 先定位问题发生阶段:在slideshow函数中加入日志打印,分别输出源文件大小、复制后目标文件大小,快速判断问题出在读取还是写入环节,示例修改代码如下:
@service
def slideshow():
    import random
    import os
    import shutil
    path = '/Slideshow'
    listOfFiles = getListOfFiles(path)
    random_image = random.choice([x for x in listOfFiles])
    # 新增日志打印
    log.info(f"源文件路径:{random_image}, 源文件大小:{os.path.getsize(random_image)/1024/1024} MB")
    shutil.copy2(random_image, '/config/www/slide.jpg')
    log.info(f"目标文件大小:{os.path.getsize('/config/www/slide.jpg')/1024/1024} MB")
  • 校验Docker容器挂载卷配置:确认/Slideshow源目录和/config/www目标目录的挂载属性,是否在群晖Docker的卷设置中开启了压缩、传输缓存限制之类的特殊参数,同时确认容器运行用户对两个目录都有完整的读/写/执行权限。
  • 校验pyscript组件的运行限制:检查Home-Assistant中pyscript的配置项,部分版本的pyscript默认会对脚本操作的文件大小做限制,超出部分会被自动截断。
  • 校验源目录的存储类型:如果/Slideshow是容器内挂载的远端SMB/NFS共享目录,先将测试图片放到容器本地的/config目录下执行复制测试,排除网络传输中断导致的文件截断问题。
  • 校验Home-Assistant附加组件的干扰:检查是否安装了图片自动压缩、www目录资源自动优化类的集成/附加组件,这类组件会自动检测www目录下新增的图片并压缩体积,和复制操作本身无关。
解决方案
  1. 调整Docker卷挂载参数:删除两个挂载路径的额外特殊参数,将容器运行用户修改为root临时测试,如果测试正常再把权限调整为对应用户的读写权限即可。
  2. 调整pyscript配置:在Home-Assistant的configuration.yaml中加入pyscript的文件大小限制配置,示例配置如下:
pyscript:
  allow_all_imports: true
  file_size_limit: 0 # 0代表不限制文件大小

修改后重启HA服务再测试。
3. 优化存储挂载配置:如果是远端存储挂载导致的问题,可将图片同步到群晖本地存储后再挂载到容器内使用,或者调整NFS/SMB的挂载参数,增加rsize=8192,wsize=8192之类的传输块大小配置。
4. 调整冲突组件规则:临时关闭所有媒体处理类的集成/附加组件后再次运行脚本,如果文件大小恢复正常,逐个开启组件找到冲突项后调整其压缩规则,排除/config/www/slide.jpg路径即可。

内容的提问来源于stack exchange,提问作者GKH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:06:08