>我必须测试我的程序,它是否从磁盘中完全删除了文件及其内容。为了测试我是否执行以下操作:
- 创建一个包含一些已知字符串的文件。
- 我的程序删除了该文件。
- 我在文件所在的磁盘上搜索字符串。为此,我让 grep 将磁盘视为一堆原始数据:
$ grep -a -o -c 'some_string_to_be_found' /dev/sda1
测试实际上按预期工作(如果我手动删除文件,则找到字符串,如果我的程序删除它,则不会(。
问题是磁盘大小可能很大,因此需要大量时间才能完成测试。此外,磁盘的标签在不同的计算机上可能有所不同。
因此,我考虑如何使用虚拟文件系统。使用 tmpfs 在 RAM 中创建磁盘:
pc:/mnt$ mkdir tmpfs
pc:/mnt$ chmod 777 tmpfs/
pc:/mnt$ mount -t tmpfs -o size=50M tmpfs /mnt/tmpfs/
创建/填充/删除文件,然后尝试查找其内容,如下所示:
$ grep -a -o -c 'some_string_to_be_found' /dev/tmpfs
问题是它会导致
grep:/dev/tmpfs: 没有这样的文件或目录
所以问题是:是否可以使用 tmpfs 作为设备,或者读取为虚拟文件系统分配的原始内存?
虽然我还没有找到如何将tmpfs
视为一种设备的方法,但有一种方法可以解决上述我的 taks(可能对某人有用(。
我们将文件视为设备。算法如下:
-
创建指定大小的空文件:
# touch storage_file # truncate -s 10M storage_file
-
在该文件内创建一个文件系统:
# mkfs.ext4 storage_file
-
现在,我们可以从该文件创建一个设备并将其挂载为普通磁盘:
# losetup /dev/loop0 storage_file # mkdir /mnt/loopfs # mount -o loop /dev/loop0 /loopfs
-
就这样。我们可以将文件视为设备。在其中创建/删除任意文件/目录。
grep
通过/dev/loop0
按预期工作,无需处理整个物理存储设备,仅在storage_file
内爬行。