添加整个300 GB的文件系统到Git Annex库?

默认情况下,我得到一个错误,我有过多的打开的文件。 如果我手动解除限制,我得到一个错误,我内存不足。 无论出于何种原因,似乎目前状态下的Git附件没有针对这类任务进行优化(一次添加数千个文件到存储库)。

作为一个可能的解决scheme,我的下一个想法是做类似的事情:

cd / find . -type d | xargs git annex add --$NONRECURSIVELY find . -type f | xargs git annex add # Need to add parent directories of each file first or adding files fails 

这个解决scheme的问题是,似乎从文档中不能以非recursion方式在Git附件中添加一个目录。 有什么我失踪或解决这个?

如果我提出的解决scheme是死路一条,那么人们解决这个问题还有别的方法吗?

更新:不要这样做。

很显然,Git Annex将每个添加到一个仓库的文件移动到.git / annex / objects中的某个目录结构中,然后用符号链接replace成.git中的真实文件。 如果我没有第一次尝试添加/ etc,这将会很好。

不用说,服务器软件。 幸运的是,我想出了一个解决办法:

 find /etc -type l | while read file ; do realpath=`realpath "${file}"` ; rm "${file}" ; cp -rfa "${realpath}" "${file}" ; done 

编辑:无视; 我真笨; 系统仍然洗涤; 这将是一个漫长的夜晚。

第二编辑:pipe理取消系统。 它涉及很多手动重build/ etc和重新安装每个软件包,包括重新configuration/解开大量的软件包,以及debugging/解决大量的APT问题。 不会再试一次。


至于控制300G文件的版本问题,每当我决定做一些事情,让它工作时(不pipe是否使用Git附件),我都会回来更新。

小更新:

  1. 这整个问题完全是用户错误。 我的根驱动器是一个256 GB的SSD,而我试图添加的文件夹之一映射到一个1.5 TB的RAID 1arrays。 不pipe我怎么做到这一点,它将不可避免地试图将更多的文件复制到/.git文件夹比驱动器可能适合(杜)。 不知道我以为会发生什么:/。

  2. 这就是为什么你不要乱搞系统目录…

  3. 初始化1.5TB驱动器上的Git Annex存储库,然后复制我想要备份的根级目录。 正常的git annex add . 工作出色,而且我的存储库在过去五天左右使用这些Annex-Glacier钩子一直支持自己到Glacier。

我使用附件进行主机pipe理,如下所示:

  • 在/ var / annex下创buildgit附件仓库
  • 在/ var / annex中,为每台机器都有一个子目录 – 这是文件去哪里是唯一的机器。 例如,/var/annex/mars.example.com/etc/default/krb5-kdc
  • 有另一个通用的文件目录,这些文件是网站独有的,例如/var/annex/example.com/etc/resolv.conf
  • 使用gnu stow来pipe理/指向/ var / annex / *中的所有符号链接
  • 在/var/annex/example.com/usr/local/bin/中有一个简单的脚本,它运行gnu stow和git annex(上面的脚本当然是通过上面的机器把它们连接到/ usr / local / bin中)

这一切都像一个低速,分布式的“pipe理文件系统”,具有版本控制,分级,以及任何你想要如何使用git和git附件的平衡。

如果你正确地pipe理你的机器,你不需要检查整个根文件系统 – 大多数机器不会因机器而异。 你需要有一些pipe理软件包安装和升级的方法,但是这个工具本身可以被检查到附件中,以及它用作源数据的软件包和其他blob – 再次,所有版本都是由git提供的。