linux重定向100GB标准输出到文件失败
问题描述:
我有这个命令将超过100GB的数据写入文件。linux重定向100GB标准输出到文件失败
zfs send snap1 > file
某些东西在过程中几个小时似乎出错。例如,如果我执行两次作业,则输出会略有不同。如果我尝试处理该文件与
zfs receive snap2 < file
几个小时后报告错误。
出于调试的目的,我猜测shell重定向有一些低概率失败。有没有人看到重定向海量数据的问题?关于何处进行的任何建议?
由于小例子正常工作,而且每次运行大型案例需要花费3个多小时,所以调试它非常麻烦。
早些时候,我曾试图管道:
zfs send snap1| zfs receive snap2
然而,这总是要小得多实例失败,为此
zfs send snap1 > file; zfs receive snap2 < file
工作。 (我发布了一个关于该问题的问题,但没有得到有用的答复。)这是我怀疑shell的另一个原因。
谢谢。
答
与zfs中的错误或您如何使用它的问题相比,失败在shell(或OS)中的可能性可以忽略不计。
它只是需要几分钟来测试你的假设:编译这个愚蠢的程序:
#include<unistd.h>
#include<string.h>
#define BUF 1<<20
#define INPUT 56
int main(int argc, char* argv[]) {
char buf[BUF], rbuf[BUF], *a, *b;
int len, i;
memset(buf, INPUT, sizeof(buf));
if (argc == 1)
{
while ((len = read(0, rbuf, sizeof(rbuf))) > 0)
{
a = buf; b = rbuf;
for (i = 0; i < len; ++i)
{
if (*a != *b)
return 1;
++a; ++b;
}
}
}
else
{
while (write(1, buf, sizeof(buf)) > 0);
}
return 0;
}
然后尝试在一个外壳mkfifo a; ./a.out w > a
和pv < a | ./a.out
在一个又一个,看多长时间才能让任何位翻转。
它应该比较快地进入TiB区...