linux将100GB标准输出重定向到文件失败

linux将100GB标准输出重定向到文件失败,linux,shell,redirect,bigdata,Linux,Shell,Redirect,Bigdata,我有一个命令,可以将超过100GB的数据写入一个文件 zfs send snap1 > file 在这个过程中几个小时似乎出现了一些问题。例如,如果我运行作业两次,输出会略有不同。如果我试图用 zfs receive snap2 < file 然而,这总是以小得多的例子失败,因为 zfs send snap1 > file; zfs receive snap2 < file zfs发送snap1>文件;zfs接收snap2a在一个shell中,而pv

我有一个命令,可以将超过100GB的数据写入一个文件

zfs send snap1 > file
在这个过程中几个小时似乎出现了一些问题。例如,如果我运行作业两次,输出会略有不同。如果我试图用

zfs receive snap2 < file
然而,这总是以小得多的例子失败,因为

zfs send snap1 > file; zfs receive snap2 < file
zfs发送snap1>文件;zfs接收snap2<文件
成功了。(我发布了一个关于这个的问题,但没有得到有用的回答。)这是我怀疑这个外壳的另一个原因


谢谢

与zfs中的错误或您如何使用它的问题相比,故障在外壳(或操作系统)中的概率可以忽略不计

只需要几分钟来验证你的假设:编译这个愚蠢的程序:

#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;
}
#包括
#包括
#定义BUF 1 0);
}
返回0;
}
然后尝试
mkfifo a/a、 out w>a
在一个shell中,而
pv
在另一个shell中,查看进行位翻转需要多长时间

它应该在TiB区域相对较快地到达

#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;
}