【问题标题】: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��<
      ...
      

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 2010-11-02
        • 1970-01-01
        • 2013-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        相关资源
        最近更新 更多