如何在Linux (Red Hat Linux)系统中快速创建大文件?
dd可以完成这项工作,但是从/dev/zero读取并写入驱动器可能会花费很长时间,因为您需要一个几百gb大小的文件进行测试……如果你需要重复这样做,时间就会增加。
我不关心文件的内容,我只想快速创建它。如何做到这一点呢?
使用稀疏文件不能解决这个问题。我需要为文件分配磁盘空间。
如何在Linux (Red Hat Linux)系统中快速创建大文件?
dd可以完成这项工作,但是从/dev/zero读取并写入驱动器可能会花费很长时间,因为您需要一个几百gb大小的文件进行测试……如果你需要重复这样做,时间就会增加。
我不关心文件的内容,我只想快速创建它。如何做到这一点呢?
使用稀疏文件不能解决这个问题。我需要为文件分配磁盘空间。
当前回答
这是一个常见的问题——尤其是在当今的虚拟环境中。不幸的是,答案并不像人们想象的那么简单。
Dd显然是第一选择,但Dd本质上是一个副本,它迫使您写入每个数据块(因此,初始化文件内容)…初始化占用了大量的I/O时间。(想要花更长的时间?使用/dev/random而不是/dev/zero!然后你将使用CPU以及I/O时间!)最后,dd是一个糟糕的选择(尽管它本质上是VM“create”gui使用的默认值)。例句:
dd if=/dev/zero of=./gentoo_root.img bs=4k iflag=fullblock,count_bytes count=10G
truncate is another choice -- and is likely the fastest... But that is because it creates a "sparse file". Essentially, a sparse file is a section of disk that has a lot of the same data, and the underlying filesystem "cheats" by not really storing all of the data, but just "pretending" that it's all there. Thus, when you use truncate to create a 20 GB drive for your VM, the filesystem doesn't actually allocate 20 GB, but it cheats and says that there are 20 GB of zeros there, even though as little as one track on the disk may actually (really) be in use. E.g.:
truncate -s 10G gentoo_root.img
fallocate是用于虚拟机磁盘分配的最终——也是最好的——选择,因为它本质上是“保留”(或“分配”您正在寻找的所有空间,但它不需要写任何东西。因此,当您使用fallocate创建一个20 GB的虚拟驱动器空间时,您实际上得到了一个20 GB的文件(不是一个“稀疏文件”,并且您不会费心向其写入任何内容—这意味着几乎任何东西都可以在其中—有点像一个全新的磁盘!)例如:
fallocate -l 10G gentoo_root.img
其他回答
你也可以使用“yes”命令。语法相当简单:
#yes >> myfile
按“Ctrl + C”停止它,否则它将耗尽所有可用空间。
要清除该文件,请执行以下命令:
#>myfile
将清除此文件。
一种方法是:如果可以保证不相关的应用程序不会以冲突的方式使用这些文件,那么只需在特定目录中创建一个大小不同的文件池,然后在需要时创建指向它们的链接。
例如,有一个文件池叫做:
/ home / bigfiles 512M-A / home / bigfiles 512M-B / home / bigfiles 1024M-A / home / bigfiles 1024M-B
然后,如果你有一个应用程序需要一个1G的文件,名为/home/oracle/logfile,执行“ln /home/bigfiles/1024M-A /home/oracle/logfile”。
如果它在单独的文件系统上,则必须使用符号链接。
可以使用A/B/etc文件来确保不相关的应用程序之间没有冲突的使用。
链接操作已经尽可能快了。
其中seek是你想要的文件的大小,单位是字节- 1。
dd if=/dev/zero of=filename bs=1 count=1 seek=1048575
来自其他答案的Dd是一个很好的解决方案,但它的速度较慢。在Linux(和其他POSIX系统)中,我们有fallocate,它使用所需的空间,而不必实际写入它,与大多数现代基于磁盘的文件系统一起工作,非常快:
例如:
fallocate -l 10G gentoo_root.img
Linux和所有文件系统
xfs_mkfile 10240m, 10gigs文件
Linux &和一些文件系统(ext4, xfs, btrfs和ocfs2)
fallocate -l 10G 10Gigfile
OS X, Solaris, SunOS,可能还有其他的unix系统
mkfile 10240m 10Gigfile
hp - ux
prealloc 10Gigfile 10737418240
解释
尝试mkfile <size> myfile作为dd的替代。使用-n选项,大小会被注明,但直到数据写入磁盘块时才会分配磁盘块。如果没有-n选项,则空间为零,这意味着写入磁盘,这意味着花费时间。
mkfile派生自SunOS,并不是到处都可用。大多数Linux系统都有xfs_mkfile,它以完全相同的方式工作,而且不只是在XFS文件系统上(尽管名称相同)。它包含在xfsprogs (Debian/Ubuntu)或类似的命名包中。
大多数Linux系统也有fallocate,它只在某些文件系统上工作(比如btrfs、ext4、ocfs2和xfs),但它是最快的,因为它分配所有的文件空间(创建非空洞文件),但不初始化任何文件。