我目前正在尝试将 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
大小的空间。tmpfile
malloc()
这是否意味着我仍然需要相同数量的 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 号的单独文件)。