微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Linux 系统上快速创建不可压缩的大文件

如何解决在 Linux 系统上快速创建不可压缩的大文件

在 Linux 系统上,我需要创建一个文件(大约 10GB),不可压缩的文件

这个文件应该驻留在一个 Docker 镜像中,需要测试在本地注册上传输和存储大型 docker 镜像的性能。因此,我需要图像“本质上”大(即:不可压缩),以绕过优化机制。

fallocate(在 Quickly create a large file on a Linux system 中描述)非常适合快速创建大文件,但结果是一个 0 熵的大文件,高度可压缩。将大映像推送到注册表时,只需几 MB。

那么,如何创建一个不可压缩的大文件

解决方法

您可以托盘使用 /dev/urandom/dev/random 来填充您的文件,例如

@debian-10:~$ SECONDS=0; dd if=/dev/urandom of=testfile bs=10M count=1000 ;echo $SECONDS
1000+0 record in
1000+0 record out
10485760000 bytes (10 GB,9,8 GiB) copied,171,516 s,61,1 MB/s
171

使用更大的 bs 需要一点时间:

*@debian-10:~$ SECONDS=0; dd if=/dev/urandom of=testfile bs=30M count=320 ;echo $SECONDS
320+0 record in
320+0 record out
10066329600 bytes (10 GB,4 GiB) copied,164,498 s,2 MB/s
165

171 秒 VS。 165秒

,

在 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��<
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。