我想将LMDB从本地计算机迁移到另一台远程计算机,但是文件大小有些奇怪。根据文件系统,LMDB是一个包含两个文件的目录:data.mdb和lock.mdb。
输出ls -altoh lmdb
指示data.mdb的文件大小为4T,它与我用于创建LMDB的map_size参数匹配。所有这些意味着当数据库打开时,操作系统将对内存映射文件,为其提供4T的虚拟空间。输出du -hs lmdb
表明lmdb占用了大约900MB的磁盘,这与报告的map_size一致python -mlmdb -e lmdb stat
。
当我执行本地副本时cp -r lmdb lmdb_copy
,它按预期工作:复制900MB的数据。我这样做scp -r lmdb lmdb_copy2
(使用scp做本地复制)。
但是,当我进行远程复制时scp -r lmdb user@remotehost:~/lmdb_copy
,scp会尝试复制4T数据,如进度条所示。在转移2GB数据后我停止了scp。
在远程计算机上,'ls
并且du
两个2GB作为LMDB的大小。 python -mlmdb -e lmdb_copy stat
报告正确的900MB大小,并且所有条目都在那里。我已经确认我可以打印出所有按键并且它们是正确的。
有了这个背景,我的问题是,为什么scp会尝试复制所有4T的内存映射大小?理想情况下,我想让scp在后台执行它的操作,而不必手动杀死它。
ls
显示正确的文件大小),以便scp按预期工作。