64 kiB 块大小是为了最大化吞吐量并避免“擦鞋”。
mt -f /dev/nst0 setblk 64k
tar -c -v -R -b128 -f /dev/nst0 test_dir
返回:
bloc 0 : test_dir/
bloc 1 : test_dir/file_1.bin
bloc 204802 : test_dir/file_2.bin
bloc 2252803 : test_dir/file_3.bin
bloc 4300804 : test_dir/file_4.bin
...
但是,尽管阻塞因子给出了 64 kiB 块大小(128 * 512),但输出中的块号tar
对应于 512 B 块大小。
然后,不管 mt 命令的块大小是多少(变量,64 kiB)。
目标是在 Tar 磁带中随机访问。将 64 kiB 块大小转换为 512 意味着要进行修剪。
有没有办法匹配tar
和的记录大小mt
?
答案1
更新:哎呀!测试就这么多。刚刚进行了一次完整备份,使用默认块/记录大小的 tar 运行速度慢了约 25%。所以我又回到使用 -b2048 了。我会尝试 -b1024,看看效果如何。
好的,刚刚进行了一些测试。我的建议是将磁带块大小设置为 0(变量),然后选择您选择的 tar 块/记录。我使用磁带块大小为 1M 和 512K 以及匹配的 tar 记录大小(-b2048=1M -b1024=512K)进行了测试,然后我将磁带块大小设置为 0,并使用 tar -b2048 和 -b1024 进行了测试,结果没有差异。然后我再次使用“setblk 0”进行测试,但默认 tar 块大小为 512(换句话说,没有 -bxxxx),总记录长度为 10240 字节,性能仍然没有差异。
我使用的是 Quantum LTO-5。只要您大大超过 512 字节(我相信是 LTO-5 的默认值),您就应该没问题,而且您不太可能会遇到任何麻烦。在我看来,设置驱动器块大小(而不是变量)的唯一原因是当它忽略软件块大小(tar 情况下的记录大小)时。
注意:tar 的默认块大小为 512 字节 x 20,总“记录大小”为 10240 字节。顺便说一句,我的测试都在 12 秒内完成,总计约 141,000,000 字节/秒,这是 LTO-5 的最大吞吐量。
答案2
我使用 --blocking-factor 将 tar 复制到磁带上,结果有多个 200 到 300 GB 大小的 tar 档案。
--blocking-factor 256 吞吐量62至68 MiB/秒。
--blocking-factor 1024 吞吐量 87 MiB/秒。
我打算使用更大的阻塞因素进行更多实验。
以上内容是使用默认硬件块大小(我认为是变量)并且没有压缩获得的。
我的设备列表如下:
HP EH958B StorageWorks Ultrium 3000 LTO-5 1.5/3TB SAS(串行连接 SCSI)半高外置磁带驱动器 LTO5
TDK LTO-5 Ultrium 数据磁带 1.5 TB / 3.0 TB LTO Ultrium-5 磁带
ATTO Technology ExpressSAS H680 PCIe 2.0 薄型 6Gb/s SAS HBA 卡(外部端口)P/N:ESAS-H680-000