在Windows系统中快速创建大文件

296

在Linux系统上快速创建大文件类似,我想在Windows系统上快速创建一个大文件。我想要的大小是5GB,内容并不重要。最好使用内置命令或短批处理文件,但如果没有其他简单的方法,我也可以接受应用程序。

24个回答

478
fsutil file createnew <filename> <length>

其中<length>表示文件大小以字节为单位。

例如,要创建一个1MB (Windows MB或MiB) 大小名为“test”的文件,可以使用以下代码。

fsutil file createnew test 1048576

fsutil 需要管理员权限。


6
对于我的需求,我只需要让文件系统将空间视为不可用,但如果其他人需要,你的信息也很有帮助。 - Leigh Riffel
23
fsutil file createnew 命令不会创建稀疏文件。 - Per Mildner
10
"fsutil sparse setflag temp.txt" 会设置稀疏标志,将其变为稀疏文件。"fsutil sparse setrange temp.txt 0 1024" 则是设置稀疏范围的命令,可以控制文件的稀疏程度。 - Coldblackice
3
@ZXX fsutil file createnew 命令不会创建稀疏文件:c:\>fsutil file createnew test.txt 0x100000,此命令会创建一个大小为 0x100000 字节的新文件 test.txtc:\>fsutil sparse queryflag test.txt,查询这个文件是否为稀疏文件,结果显示这个文件不是稀疏文件。 - ivan_pozdeev
3
这也许不是一个严格的“稀疏文件”,但创建一个500GB的文件只需要不到一秒钟的时间(即使在一些有缺陷的硬盘上也是如此)。如果你想要真正触发500GB的磁盘IO(像我一样),这个命令并不能做到。 - Simon Kissane
显示剩余5条评论

39
您可以使用Sysinternals Contig工具。它有一个-n开关,可以创建给定大小的新文件。与fsutil不同,它不需要管理员权限。

2
哇!下载和运行非常快。我使用的命令是 m:\contig -n M:\SpaceBuffer.tmp 5368709120 - Leigh Riffel
6
我想确认一下这是一个稀疏文件还是实际含有数据的文件? - slolife
2
据我所知,它不是一个稀疏文件,并且该文件为空。 - Joey
@slolife fsutil sparse queryflag 显示它不是稀疏文件。 - ivan_pozdeev
1
我在这里有点困惑...如果它是瞬时的,并且不是稀疏文件,那么它实际上如何使用磁盘空间? - Jason S
3
@JasonS: contig命令实际上将指针移至最后一个字节并在那里写入一个单独的0(使用Process Monitor查看)。然后Windows会用零填充其余部分。对于非稀疏文件,这可能是你能得到的最有效率的方式,即使在我的硬盘上创建一个大小约为5 GiB的文件也只需要几秒钟。我猜当时我尝试过在固态硬盘上或使用更小的文件。但它相当快速(而且肯定比自己写入空文件的所有字节要快得多)。 - Joey

27

我正在寻找一种生成大量数据文件的方法,而不仅仅是稀疏文件。偶然发现下面的技术

If you want to create a file with real data then you can use the below command line script.

echo "This is just a sample line appended to create a big file.. " > dummy.txt
for /L %i in (1,1,14) do type dummy.txt >> dummy.txt

(Run the above two commands one after another or you can add them to a batch file.)

The above commands create a 1 MB file dummy.txt within few seconds...


6
从上面链接中提取的内容:如果您想创建一个包含真实数据的文件,则可以使用以下命令行脚本。 echo "This is just a sample line appended to create a big file.. " > dummy.txt for /L %i in (1,1,14) do type dummy.txt >> dummy.txt (按顺序运行上述两个命令,或者将它们添加到批处理文件中)以上命令在几秒内创建了一个1 MB的dummy.txt文件。 - Tony Stark
注意:您必须先复制第一行,回车,然后再复制第二行。我尝试将整个脚本复制到我的shell中,但什么都没发生。 - Magiranu

17

打开Windows任务管理器,找到正在运行的最大进程,右键单击,然后点击创建转储文件

这将在您的临时文件夹中创建一个与进程内存大小相关的文件。

您可以轻松创建一个几GB大小的文件。

在这里输入图片描述

在这里输入图片描述


3
好的解决方案!如果您运行多种应用程序,可以获得不同的尺寸,非常实用。 - Don Cheadle

17

查看RDFC http://www.bertel.de/software/rdfc/index-en.html

RDFC可能不是最快的,但它可以分配数据块。绝对最快的方法是使用较低级别的API仅获取集群链并将其放入MFT而无需写入数据。

请注意,这里没有万能药-如果“创建”立即返回,那意味着您得到了一个虚拟的大文件,但在写入它之前,您将无法获得数据块/链。如果您只读取,您会获得非常快速的零值,这可能会让您相信您的驱动器突然变得飞快:-)


这似乎是最好的答案。FSUTIL创建了一个稀疏文件,这对于许多情况来说不是一个有效的测试场景。Sysinternals contig似乎从未为我工作过,当我使用像“contig -n largefile.bin 6000000000”这样的命令时,它会创建一个大小为1.7GB的文件...???感谢RDFC,因为它在第一次尝试时完美地工作,并以我的ATA磁盘的最大写入速度进行写入。 - Syclone0044
正如上面所说,FSUTIL“createnew”不会创建稀疏文件,它只是在MFT中为请求的文件分配请求的空间,即全部空间。如果您检查文件的属性,分配的大小(令人恼火地命名为“磁盘上的大小”,因为它可以在任何不一定是“磁盘”的设备上)与实际大小相似或非常接近。一个完全填充了零的真正稀疏文件将具有非常小的分配大小。我发现唯一能够将非稀疏文件转换为稀疏文件(并实际缩小其大小,而不仅仅是标记它)的工具是SparseTest。 - GabrielB

16

我需要一个普通的10 GB文件来进行测试,所以我不能使用fsutil,因为它会创建稀疏文件(感谢 @ZXX)。

@echo off

:: Create file with 2 bytes
echo.>file-big.txt

:: Expand to 1 KB
for /L %%i in (1, 1, 9) do type file-big.txt>>file-big.txt

:: Expand to 1 MB
for /L %%i in (1, 1, 10) do type file-big.txt>>file-big.txt

:: Expand to 1 GB
for /L %%i in (1, 1, 10) do type file-big.txt>>file-big.txt

:: Expand to 4 GB
del file-4gb.txt
for /L %%i in (1, 1, 4) do type file-big.txt>>file-4gb.txt

del file-big.txt

我想创建一个10 GB的文件,但不知何故,它只显示为4 GB,所以我想保险起见,在4 GB停止。如果你真的想确保你的文件被操作系统和其他应用程序正确处理,请在1 GB处停止扩展。


你需要使用一个百分号,而不是两个。此外,括号中不需要额外的空格。我会为你编辑。 - Samir
你在这里用的是什么操作系统?rm 是 Unix/Linux 命令,而 del 是 DOS/Windows 命令。 - Samir
@Sammy:它以@echo off开头,所以显然是一个.bat文件。这就是为什么它有双百分号的原因。 - f.ardelian
好的,那么我们可能想要重新采用双百分号。为什么在创建它之前要删除 file-4gb.txt?这不会导致错误吗?你实际上是想在那一行中创建 file-4gb.txt 吗?还是重命名旧的 file-big.txt 文件?这很不清楚,即使对于批处理文件也是如此。如果你想重命名它,那么你要找的命令可能是 ren。像这样:ren file-big.txt file-4gb.txt。我认为你把它和 rm 搞混了。 - Samir
新的编辑将为每个循环生成一个新文件,分别为1 KB、1 MB、1 GB和4 GB。这样可以给您更多的选择,即您可以选择要使用的文件大小。它将需要超过5 GB的免费磁盘空间。为了节省空间,您可以通过将“file-big-1K.txt”等重命名为“file-big.txt”来简单地使用一个单一文件。 - Samir
显示剩余2条评论

14

请查看Windows Server 2003资源工具包。其中有一个名为Creatfil的实用程序。

 CREATFIL.EXE
 -? : This message
 -FileName -- name of the new file
 -FileSize -- size of file in KBytes, default is 1024 KBytes

这与Solaris上的mkfile类似。


2
我宁愿不需要下载资源工具包。 - Leigh Riffel
1
我会试一下,但我宁愿不要有额外的文件依赖。 - Leigh Riffel
1
谢谢!下载的软件包名为rktools.exe,大小为11.7MB,解压后为18.2MB。哦对了,“creatfil.exe”而不是“createfil.exe”。这个文件大小只有5.5KB,这就是你真正需要的全部。在一个四核3.0 GHz Intel处理器上,我用不到1分钟就生成了一个1GB的文件。使用上面发布的fsutil.exe工具,创建它只需要几分之一秒。所以确实,那个工具可以创建稀疏文件。这个工具的大小甚至更大,达到73.5KB。这个工具更适合用于生成大型测试文件。 - Samir
我尝试了Contig,但它甚至都没有起作用。我可能在使用错误的语法。但这只是表明Creatfil.exe更容易使用。Contig打包在一个102 KB的Zip文件中。扩展后为203 KB。 - Samir
所以我之前在使用Contig时使用了错误的语法。现在我明白了。它可以瞬间创建一个1GB的文件。因此,它似乎比Creatfil.exe更快。但我怀疑它是否真的会填充文件数据。这似乎太好了。但我认为Contig、Creatfil或者RDFC都是不错的选择。而Fsutil工具则不太行。它需要使用额外的命令来填充文件的实际数据。 - Samir
显示剩余2条评论

9

最近我在寻找一种创建大型虚拟文件并进行空间分配的方法。所有的解决方案看起来都很笨拙。最后,我只是启动了Windows中内置的DISKPART实用程序(自Windows Vista以来):

DISKPART
CREATE VDISK FILE="C:\test.vhd" MAXIMUM=20000 TYPE=FIXED

这里的MAXIMUM是生成文件的最大大小,本例为20 GB。


迄今为止最佳解决方案。 - Bluebird
对我来说不起作用。不幸的是没有文件被创建。我尝试使用管理员权限。 - Magiranu
不错,但需要管理员权限。 - Amit Naidu

8

以下是一个 PowerShell 一行命令,用于在 C:\Temp 目录下创建一个文件来填充 C: 磁盘,只留下 10 MB 的空间:

[io.file]::Create("C:\temp\bigblob.txt").SetLength((gwmi Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace - 10MB).Close

4
它会创建具有真实内容还是稀疏文件的文件? - Samselvaprabu
这与 fsutil file with nulls 完全相同。 - Amit Naidu

6

除了编写完整的应用程序外,我们Python开发者可以通过以下四行代码在Windows和Linux上实现任意大小的文件(os.stat()行只是一个检查):

>>> f = open('myfile.txt','w')
>>> f.seek(1024-1) # an example, pick any size
>>> f.write('\x00')
>>> f.close()
>>> os.stat('myfile.txt').st_size
1024L
>>>

1
安装Python来解决一个问题真的有点大材小用。为什么不使用一些内置的东西,比如Powershell或C# - https://gist.github.com/nadams810/6539070(你甚至不需要Visual Studio来编译C#应用程序)。 - Natalie Adams
1
它们内置于Windows中,这正是OP所要求的(假设您的系统已完全更新)。 - Natalie Adams
1
@NatalieAdams 如果你已经安装了Python来解决其他问题,那么这个答案确实非常有帮助。 :) - JuSTMOnIcAjUSTmONiCAJusTMoNICa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接