通过网络将完整 /nix/store 从一台 nixos 机器复制到另一台机器的最佳方法

通过网络将完整 /nix/store 从一台 nixos 机器复制到另一台机器的最佳方法

目前我使用:

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 商店上发生的任何其他操作。

在线手册页nix-copy-closure

答案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

相关内容