将单个 100GB 文件从挂载存储复制到主机文件系统时 Blobfuse 内存不足
Blobfuse out of memory when copying single 100GB file from mounted storage to host filesystem
我已经安装了一个 Azure 存储帐户 Azure VM (ubuntu 18.04)。装载点在 4TB vHDD 中,带有 2TB ram 磁盘用于 blobfuse (1.4.2.)。在存储帐户中,我有 16 个 100GB 的压缩文件,我试图将其复制到 VM 文件系统但出现错误:
cp: 无法打开 './datafile.bz2.partaq' 进行读取:软件导致连接中止
cp: 无法打开 './datafile.bz2.partaq' 进行读取:传输端点未连接
系统日志:
Dec 23 14:01:00 backupVM kernel: [1694861.841872] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice,task=blobfuse,p
id=26036,uid=0
Dec 23 14:01:00 backupVM kernel: [1694861.841896] Out of memory: Killed process 26036 (blobfuse) total-vm:421240kB, anon-rss:156972kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtab
les:588kB oom_score_adj:0
Dec 23 14:01:00 backupVM kernel: [1694861.865857] oom_reaper: reaped process 26036 (blobfuse), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
复制 2GB 的文件工作正常。虚拟机有 14GB 内存。有什么提示吗?
由于我没有大文件数据所以无法测试。但我已经测试了大约。 2GB 以上的文件,对我来说工作正常。
我所做的是在 Azure Blob 存储中上传大约 2GB 以上的数据文件,并使用 blob fuse 将容器安装在 Linux 机器中。在tar文件中转换挂载文件并复制到我的VM机器文件系统中。
错误:'软件导致连接中止'一般是在复制大文件之间断开连接。所以不要使用 cp 命令。
您可以使用 nohup 命令复制文件。即使您断开连接,这也会使复制过程保持活动状态。
要使用 rsync 同步源目录和目标目录,您可以使用
nohup rsync -av /path_to/source_directory/ /path_to/destination_directory
这会将所有剩余的文件和目录(如果有)从源目录复制到目标目录,并且还会确保没有“部分”复制的文件留在目标目录中。
检查两个目录是否包含相同文件的另一种可能性是使用 diff:
# compare dirs and watch result in terminal
diff -r /path_to/source_directory /path_to/destination_directory
# compare dirs and write result to diff.log (disconnection failsafe)
nohup diff -r /path_to/source_directory /path_to/destination_directory > diff.log
&
第二个命令将创建一个日志文件 diff.log,其中包含仅存在于两个目录之一中的所有文件以及所有有差异的文件(部分复制),从而帮助您找出复制过程中止的位置。
注意:确保将尾部斜杠 "/"
添加到源目录,否则您会将源目录作为子目录复制到目标目录。如果您之前做过 cp -r /home/user/dir1 /tmp/dir2
,则需要 rsync -av /home/user/dir1/ /tmp/dir2
我已经安装了一个 Azure 存储帐户 Azure VM (ubuntu 18.04)。装载点在 4TB vHDD 中,带有 2TB ram 磁盘用于 blobfuse (1.4.2.)。在存储帐户中,我有 16 个 100GB 的压缩文件,我试图将其复制到 VM 文件系统但出现错误:
cp: 无法打开 './datafile.bz2.partaq' 进行读取:软件导致连接中止
cp: 无法打开 './datafile.bz2.partaq' 进行读取:传输端点未连接
系统日志:
Dec 23 14:01:00 backupVM kernel: [1694861.841872] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice,task=blobfuse,p
id=26036,uid=0
Dec 23 14:01:00 backupVM kernel: [1694861.841896] Out of memory: Killed process 26036 (blobfuse) total-vm:421240kB, anon-rss:156972kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtab
les:588kB oom_score_adj:0
Dec 23 14:01:00 backupVM kernel: [1694861.865857] oom_reaper: reaped process 26036 (blobfuse), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
复制 2GB 的文件工作正常。虚拟机有 14GB 内存。有什么提示吗?
由于我没有大文件数据所以无法测试。但我已经测试了大约。 2GB 以上的文件,对我来说工作正常。
我所做的是在 Azure Blob 存储中上传大约 2GB 以上的数据文件,并使用 blob fuse 将容器安装在 Linux 机器中。在tar文件中转换挂载文件并复制到我的VM机器文件系统中。
错误:'软件导致连接中止'一般是在复制大文件之间断开连接。所以不要使用 cp 命令。 您可以使用 nohup 命令复制文件。即使您断开连接,这也会使复制过程保持活动状态。 要使用 rsync 同步源目录和目标目录,您可以使用
nohup rsync -av /path_to/source_directory/ /path_to/destination_directory
这会将所有剩余的文件和目录(如果有)从源目录复制到目标目录,并且还会确保没有“部分”复制的文件留在目标目录中。 检查两个目录是否包含相同文件的另一种可能性是使用 diff:
# compare dirs and watch result in terminal
diff -r /path_to/source_directory /path_to/destination_directory
# compare dirs and write result to diff.log (disconnection failsafe)
nohup diff -r /path_to/source_directory /path_to/destination_directory > diff.log
& 第二个命令将创建一个日志文件 diff.log,其中包含仅存在于两个目录之一中的所有文件以及所有有差异的文件(部分复制),从而帮助您找出复制过程中止的位置。
注意:确保将尾部斜杠 "/"
添加到源目录,否则您会将源目录作为子目录复制到目标目录。如果您之前做过 cp -r /home/user/dir1 /tmp/dir2
,则需要 rsync -av /home/user/dir1/ /tmp/dir2