Linux CentOS 中 LTO6 磁带的读取速度非常低

Linux CentOS 中 LTO6 磁带的读取速度非常低

尊敬的技术专家,

几个星期以来,我一直在尝试从 LTO6 磁带中提取数据,但在速度方面并未取得太大成功。

我正在使用“dd”将磁带内容转储到一个大的二进制文件中,因为我不知道磁带是以什么格式写入的(它绝对不是 TAR)。基本上我使用这个命令:

dd if=/dev/nst0 of=tape.dump bs=512k

当我这样做时,我的速度总是在 4.7MB/s 左右。另外,在调整块大小时,我似乎没有让它超出这个速度,它总是达到 4.7MB/s 的最大值。

我在读取操作期间运行了 Tapestat 以获得更多见解,但我唯一能看到的是它 100%(以及 99%)等待读取操作完成:

st0         4       0        3.4M        0.0k   6%   0%   6%       0       0

Tape:     r/s     w/s   kB_read/s   kB_wrtn/s  %Rd  %Wr  %Oa    Rs/s    Ot/s
st0        72       0       36.0M        0.0k  98%   0%  98%       0       0

Tape:     r/s     w/s   kB_read/s   kB_wrtn/s  %Rd  %Wr  %Oa    Rs/s    Ot/s
st0        73       0       36.5M        0.0k 100%   0% 100%       0       0

Tape:     r/s     w/s   kB_read/s   kB_wrtn/s  %Rd  %Wr  %Oa    Rs/s    Ot/s
st0        72       0       36.0M        0.0k  98%   0%  98%       0       0

Tape:     r/s     w/s   kB_read/s   kB_wrtn/s  %Rd  %Wr  %Oa    Rs/s    Ot/s
st0        73       0       36.5M        0.0k 100%   0% 100%       0       0

Tape:     r/s     w/s   kB_read/s   kB_wrtn/s  %Rd  %Wr  %Oa    Rs/s    Ot/s
st0        72       0       36.0M        0.0k  98%   0%  98%       0       0

此外,当我使用输出文件 /dev/null 执行读取操作时,速度仍然保持不变,因此看起来底层磁盘速度不会导致“擦鞋”效果。

我使用的硬件是 HPE Ultrium 6 外置磁带驱动器,通过 SAS 连接到运行 CentOS8 的 HPE DL385G7 服务器。

任何帮助或指导从哪里开始研究将不胜感激!

谢谢

答案1

好吧,我终于设法以不错的速度转储磁带了。我现在使用的过程基本上依赖于对磁带的不同部分使用不同的块大小。目前,我读取了块大小为 64KB 的磁带的前 2KB,然后切换到 65KB(我知道很奇怪)几个块(使用 400 进行测试)。之后切换回 64KB,直到该命令自动与dd: error reading '/dev/nst0': Cannot allocate memory.此时将读取磁带的前 4GB。

对于磁带的其余部分,我可以切换回 65KB 的块大小,然后速度就不错了(~100MB/s)。当我解析磁带上的数据时,我确实看到每个 64KB 块似乎都有 1KB 的“填充”,因此 65KB 的块大小使用起来可能并不奇怪。

[root@tapepoc TapeBlobExtractor]# dd if=/dev/nst0 of=/tape_dump/tape_1.dump bs=64k
dd: error reading '/dev/nst0': Cannot allocate memory
0+2 records in
0+2 records out
2048 bytes (2.0 kB, 2.0 KiB) copied, 3.28837 s, 0.6 kB/s
[root@tapepoc TapeBlobExtractor]# dd if=/dev/nst0 of=/tape_dump/tape_2.dump bs=65k count=400
dd: warning: partial read (7168 bytes); suggest iflag=fullblock
11+389 records in
11+389 records out
26167296 bytes (26 MB, 25 MiB) copied, 5.26119 s, 5.0 MB/s
[root@tapepoc TapeBlobExtractor]# dd if=/dev/nst0 of=/tape_dump/tape_3.dump bs=64k
dd: error reading '/dev/nst0': Cannot allocate memory
60413+4 records in
60413+4 records out
3959387136 bytes (4.0 GB, 3.7 GiB) copied, 17.4649 s, 227 MB/s
[root@tapepoc TapeBlobExtractor]# dd if=/dev/nst0 of=/tape_dump/tape_4.dump bs=65k
^C1024568+19746 records in
1024568+19746 records out
68377951232 bytes (68 GB, 64 GiB) copied, 641.83 s, 107 MB/s

答案2

我建议在采取任何行动之前进行一些诊断测试来隔离问题。

由于与驱动器相关的问题,例如磁头磨损、导辊问题和电机问题,磁带驱动器速度减慢。原因是驱动器在错误率较高时重试读取过程。磁带驱动器也会因介质相关问题(例如缺陷、边缘损坏和表面碎片)而减慢速度。系统周围的瓶颈(例如磁盘、PCIe、HBA 和布线)也可能是原因。因此,您应该隔离问题以采取正确的行动。

国际商业机器公司ITDT使我们能够进行适当的诊断测试。特别是,“系统测试”在这种情况下会很有用。系统测试是一个简短的诊断测试,并显示不同块大小和带/不带硬件压缩的传输速率结果。您应该使用全新的介质进行此测试,因为它会擦除数据。

如果非压缩传输速率不符合规范(=160MB/秒),则原因是驱动器问题,因为您使用了全新磁带。此外,压缩传输速率还揭示了由系统、布线或 HBA 引起的带宽限制。

该测试涉及非常短的磁带长度,如果您想测试整个介质,还有另一个测试称为“全写”测试。它执行全卷写入,这需要几个小时。测试完成后,你会看到写入容量和传输速率。如果它们分别不满足 2.5TB 和 160MB/秒,则根本原因是与驱动器相关的问题。

相关内容