“mbuffer -T”如何工作?

“mbuffer -T”如何工作?

我目前正在尝试将 tar 备份到磁带,并mbuffer充当以下之间的缓冲区:

tar --acls -c /var/test | mbuffer -m 8G -P 100% -R 100M | dd of=/dev/nst0 bs=256k

但大约有 10-20 次缓冲区仍然是空的。所以我想通过以下命令使用基于文件的缓冲区:

tar --acls -c /var/test | mbuffer -m 60G -T /srv/testbuffer -P 100% -R 100M | dd of=/dev/nst0 bs=256k 

我的理解是,该选项-T将在给定位置创建一个文件并将其用作读/写缓冲区。

但没有创建任何文件,并且在一个系统上mbuffer只是挂起。

  • 我错过了什么吗?
  • 是否mbuffer以特殊方式创建文件?
  • 是否mbuffer在另一个目录中创建文件?
  • 是否mbuffer以某种方式扩展/使用交换?

据我在mbuffer( settings.c)的源代码中读到,分配了过孔mbuffer大小的空间。tmpfilemalloc()

这是否意味着我仍然需要相同数量的 RAM,或者至少需要交换,就好像我在没有参数的情况下使用它一样-T

答案1

没有创建文件

mbuffer -m 60G -T /srv/testbuffer创建一个文件,打开它并立即取消链接。如果你检查文件描述符,/proc/<PID of mbuffer>/fd你会发现一个指向

/srv/testbuffer (deleted)

对于临时文件来说,这是一个相当标准的技巧。如果mbuffer由于某种原因终止(即使被残酷地杀死),文件系统最终将释放空间(在最坏的情况下电源故障或内核恐慌:在fsck未来之后)。完全未使用、废弃的文件不会永远占用您的磁盘空间。

在一个系统上mbuffer只是挂起

在开始缓冲数据的主要工作之前,该工具实际上会保留磁盘空间fallocate(不仅仅是创建一个稀疏文件,例如)。truncate分配大文件可能需要时间。此延迟取决于文件系统类型、可能的碎片等。

这是否意味着我仍然需要相同数量的 RAM,或者至少需要交换,就好像我在没有参数的情况下使用它一样-T

否。该文件存在于适合所选路径(在您的情况下)的文件系统中/srv/testbuffer,但该路径不再存在。 (注意:具有相同路径的新文件将是具有不同 inode 号的单独文件)。

相关内容