目前我使用:
find /nix/store/* -maxdepth 1 | xargs -L <N> nix-copy-closure --sign --gzip --use-substitutes --to <remote machine>
哪里N
有一些合理的数字,不会使行长度太长xargs
。
有没有更惯用的方法在两台运行的机器上执行此操作?
编辑:
上述方法的优点:
- 不复制两端都存在的闭包。这也意味着您可以停止传输并从上次中断的地方继续,然后再进行一些哈希检查开销
--use-substitues
这将使远程计算机首先从二进制缓存下载,然后再发送计算机。在将文件从我的笔记本电脑发送到删除服务器的常见情况下,这非常有用,与我的笔记本电脑相比,远程服务器通常具有 100 倍到 nix 二进制缓存的带宽nix-copy-closure
通过 ssh 进行复制,因此传输是加密的。- 据我所知,nix-copy-closure 不应干扰 nix 商店上发生的任何其他操作。
答案1
我更喜欢nix-serve
在笔记本电脑之间共享包
% nix-env -i nix-serve
% nix-serve -p 8080
有关如何在机器之间共享 nix 软件包的更多选项,请参阅尼克斯手册
答案2
我更喜欢使用scp
.以下命令会将所有内容递归复制到远程计算机:
scp -r /nix/store/* your_user@host_name:/path/to/store/copy
如果要保留原始文件的修改时间、访问时间和模式,请使用该-p
标志。
要优化 scp 性能并提高速度,请使用河豚作为切片机并启用压缩,如下所示:
scp -c blowfish -r -C /nix/store/* your_user@host_name:/path/to/store/copy