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 > apv < a | ./a.out在一个又一个,看多长时间才能让任何位翻转。

它应该比较快地进入TiB区...