【问题标题】:Does tee forward data that has not made it into the file?是否会转发尚未进入文件的数据?
【发布时间】:2014-10-13 21:53:27
【问题描述】:

我正在像这样将一个新硬盘归零:

pv /dev/zero | tee /dev/sdb | sha1sum -

这个想法是我将磁盘归零并同时计算一个校验和,无论写入多少个零。然后我会对块设备进行sha1sum,看看它是否与我最初写入它的数据匹配。

问题是,当“tee”用完设备上的空间并终止时会发生什么?假设块设备正好是 100 万字节; tee 显然会用 100 万个零字节填充它,但它会将 恰好 100 万个零字节转发到 sha1sum 吗?

【问题讨论】:

    标签: linux bash tee


    【解决方案1】:

    回答原问题:

    不,tee 不会在写入参数中指定的文件失败时停止写入 stdout

    但我认为这并不重要。看来您的目标是确保整个磁盘都被零覆盖,而不用担心磁盘有多大。因此,读取磁盘并将读取的每个块与零块进行比较就足够了。你可以通过cmp /dev/sdb /dev/zero 做到这一点。如果它显示“EOF on /dev/sdb”,那么所有字节都是 0。

    【讨论】:

      【解决方案2】:

      为了它的价值,我想到了另一种方法来做同样的事情,尽管有点间接:

      pv /dev/zero | dd bs=100M of=/dev/sdb 2> log
      

      dd 的报告(在“log”中捕获)应该包含写入的精确字节数,您可以使用它来计算 sha1sum(或者,将块设备与生成的正好那么多零的流进行比较)。

      (bs=100M 是因为 dd 的默认块大小是 512 字节,结果在我的用例中表现不佳)

      【讨论】:

        猜你喜欢
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多