You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unison跨Mac与Linux同步失败:无法设置文件时间戳

解决Unison从Mac同步到Linux时修改时间设置失败的问题

你遇到的这个报错是Unison在同步过程中,尝试把临时缓存文件的修改时间设为Unix纪元起始的1970年,但Linux系统通常不允许设置这么早的时间,直接导致同步失败。这种情况大多和跨平台文件系统的时间处理差异、Unison的缓存机制有关,给你几个针对性的解决办法:

  • 修改Unison配置,绕过时间校验
    打开你的Unison配置文件(一般是~/.unison/[你的同步配置名].prf),添加这两行参数:

    fastcheck = true
    times = false
    

    fastcheck=true会让Unison优先用文件内容哈希判断是否需要同步,而非依赖修改时间;times=false则直接跳过修改时间的同步操作,从根源上避免时间设置失败的报错。

  • 检查Linux系统的时间设置限制
    你可以先手动在Linux机器上测试能否设置早于某个时间点的文件修改时间,执行这两条命令:

    touch test_temp_file
    touch -t 197001010100 test_temp_file
    

    如果命令执行失败,说明你的Linux系统或挂载的文件系统确实限制了时间范围,那上面的Unison配置调整就更有必要了。

  • 清理Unison的缓存文件
    报错里提到的.unison.spdy.xxx.tmp是Unison的临时缓存文件,有时候缓存损坏会导致同步逻辑异常。你可以分别在Mac和Linux机器上删除Unison的缓存目录:

    # Mac端执行
    rm -rf ~/.unison/arcs
    # Linux端执行
    rm -rf ~/.unison/arcs
    

    清理完后重新启动同步,大概率能解决缓存导致的异常。

  • 排除无需同步的目录(可选)
    看报错发生在node_modules目录下,其实这个目录完全可以通过npm install重新生成,没必要同步。你可以在Unison配置里添加排除规则,减少同步量和出错概率:

    ignore = Path node_modules
    
  • 更新Unison到最新版本
    旧版本的Unison在跨Mac(HFS/HFS+)和Linux(ext系列)文件系统时,可能存在时间处理的兼容性bug。更新到最新稳定版,能解决不少这类历史问题。

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

火山引擎 最新活动