我正在寻找的是一种通过 STDIN 传入任意数据的方法,并将其作为普通文件进行压缩。
我试过这个
$ echo test | tar -cf test.tar /dev/stdin
Run Code Online (Sandbox Code Playgroud)
这给了我一个test.tar
包含内容的文件dev/stdin
。该stdin
文件是一个链接/proc/self/fd/0
.
我想要的是dev/stdin
TAR 文件内部是一个带有文本的常规文件test
。类似的事情发生在:
$ tar -cf test.tar <(echo test)
Run Code Online (Sandbox Code Playgroud)
但名称不同。
这是可行的吗?
所以我的设置是这样的。
$ truncate -s 1T volume
$ losetup -f --show volume
/dev/loop0
$ mkfs.ext4 /dev/loop0
$ ls -sh volume
1.1G volume
$ mount /dev/loop0 /mnt/loop
Run Code Online (Sandbox Code Playgroud)
现在我有 1.1TB 的卷,正如预期的那样。ext4 的开销将稀疏文件扩展至 1.1G,但这没关系。现在添加一个文件。
$ dd if=/dev/urandom of=/mnt/loop/file bs=1M count=10240
$ ls -sh volume
12G volume
Run Code Online (Sandbox Code Playgroud)
很好,现在我不想要这个文件了。
$ rm /mnt/loop/file
$ ls -sh volume
12G volume
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,可用空间仍然占用空间,并$ fallocate -d volume
释放了 1GB。
我的问题是,如何在不将卷扩展到完整大小的情况下将此处的可用空间清零?$ dd if=/dev/zero
会将其扩展至完整大小,并conv=sparse
使其在卷内创建一个无用的稀疏文件。
TL;DR:有没有一种方法可以losetup
忽略空块对空扇区的写入,同时允许其他所有操作?
我正在做一些测试,涉及因不安全删除 USB 驱动器而导致的数据损坏,但我需要一种方法来在特定时间一致地删除驱动器。是否有一个命令相当于物理上拉出驱动器而不刷新任何缓冲区或缓存?