如何解决在 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 举报,一经查实,本站将立刻删除。