【问题标题】:Quickly create an uncompressible large file on a Linux system在 Linux 系统上快速创建不可压缩的大文件
【发布时间】:2021-03-05 08:18:00
【问题描述】:
在 Linux 系统上,我需要创建一个大文件(大约 10GB),不可压缩的文件。
该文件应该驻留在 Docker 映像中,用于测试在本地注册表上传输和存储大型 Docker 映像的性能。因此,我需要图像“本质上”很大(即:不可压缩),以绕过优化机制。
fallocate(描述于Quickly create a large file on a Linux system)非常适合快速创建大文件,但结果是一个熵为 0 的大文件,高度可压缩。将大图像推送到注册表时,只需几 MB。
那么,如何创建一个不可压缩的大文件?
【问题讨论】:
标签:
linux
file
filesystems
【解决方案1】:
您可以使用/dev/urandom 或/dev/random 填充您的文件,例如
@debian-10:~$ SECONDS=0; dd if=/dev/urandom of=testfile bs=10M count=1000 ;echo $SECONDS
1000+0 条记录
1000+0 条记录输出
已复制 10485760000 字节(10 GB,9,8 GiB),171,516 秒,61,1 MB/秒
171
使用更大的 bs 需要一点时间:
*@debian-10:~$ SECONDS=0; dd if=/dev/urandom of=testfile bs=30M count=320 ;echo $SECONDS
320+0 条记录
320+0 记录输出
已复制 10066329600 字节(10 GB,9,4 GiB),164,498 秒,61,2 MB/秒
165
171 秒 VS。 165 秒
【解决方案2】:
4GiB 的真实数据不到 3 分钟的速度是可以接受的吗?
可以通过提供 dd 准备好的数据而不是生成它来获得“随机集”。
最简单的方法是使用已满程度大于所需文件大小的磁盘,
我使用了带有随机二进制文件和视频的磁盘。如果你担心数据泄露,你可以用一些东西来处理你的数据。
一切都转到 /dev/shm,因为写入 RAM 比写入磁盘快得多。
当然,必须有足够的可用空间我有 4GB 所以示例中的文件是 4GB
我的处理器是第一代的老 i7。
% time dd if=/dev/sdb count=40 bs=100M >/dev/shm/zerofil
40+0 records in
40+0 records out
4194304000 bytes (4,2 GB, 3,9 GiB) copied, 163,211 s, 25,7 MB/s
real 2m43.313s
user 0m0.000s
sys 0m6.032s
% ls -lh /dev/shm/zerofil
-rw-r--r-- 1 root root 4,0G mar 5 13:11 zerofil
% more /dev/shm/zerofil
3��؎м
f`f1һ���r�f�F����fa�v
f�fFf��0�r'f�>
^���>b��<
...