linux重定向100GB stdout到文件失败

时间:2015-10-16 21:13:48

标签: linux shell redirect bigdata

我有这个命令可以将超过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的另一个原因。

感谢。

1 个答案:

答案 0 :(得分:0)

与zfs中的错误或您使用它的方式存在问题相比,故障在shell(或OS)中的概率可以忽略不计。

测试你的假设只需几分钟:编译这个愚蠢的程序:

<select class="shortened-select">
  <option value="Open" data-descr="some description"></option>
  <option value="Closed" data-descr="a bunch of text"></option>
</select>

然后在shell中尝试#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; } ,在另一个shell中尝试mkfifo a; ./a.out w > a,看看有多长时间才能翻转。

应该相对较快地进入TiB区域......