如何在 1 s內快速創建數百G超大文件?


常規的創建文件方式有:

  1. touch
  2. vi(m)
  3. tee
  4. >>>

但是這幾種都只適合創建小的文本文件,某些情況下出於測試的需要,你需要快速創建一個超大的文件,可能要 上百G。這時候要使用上面幾個命令,你可能要等一天的時間,效率非常低。

接下來介紹幾種我常用的方法

1. dd

dd命令,可以從標准輸入或指定的文件中讀取數據,拷貝至新文件。

$ dd if=/dev/zero of=big_file count=10 bs=1G

使用 time 命令,可以算出創建一個 10G的文件需要耗時多久?

$ time dd if=/dev/zero of=big_file count=10 bs=1G
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 7.93627 s, 1.4 GB/s

real	0m7.941s
user	0m0.000s
sys	0m7.935s

花了將近8秒的時間

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 10:57 big_file

2. fallocate

fallocate命令可以為文件預分配物理空間。-l后接空間大小,默認單位為字節。也可后跟k、m、g、t、p、e來指定單位,分別代表KB、MB、GB、TB、PB、EB。

$ fallocate -l 10G big_file

使用 time 命令,可以算出創建一個 10G的文件需要耗時多久?

$ time fallocate -l 10G big_file
real	0m0.002s
user	0m0.000s
sys	0m0.001s

居然只有 0.001秒。

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 11:01 big_file

使用 du 命令,查看是否是真正創建了一個 10G大小的文件?從結果來看,是的。

$ du -sh big_file
10G	big_file

3. truncate

truncate命令可以將文件縮減或擴展為指定大小,使用-s參數設置大小。

$ truncate -s 10G big_file

使用 time 命令,可以算出創建一個 10G的文件需要耗時多久?

$ time truncate -s 10G big_file
real	0m0.001s
user	0m0.000s
sys	0m0.001s

也是只有 0.001 秒。

不過與 fallocate 不同的是,allocate 創建的文件是真實大小,而 truncate 創建的並不是。

使用 ls 和 du 命令,查看的結果是不一樣的。

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 11:11 big_file
 
$ du -sh big_file 
0	big_file

由此可見 truncate 的作用是指定一個文件的大小,如果該文件不存在,就會創建該文件。如果指定文件的大小小於原先的大小,會丟失內容。

這個命令指定的文件大小其實是虛擬的。只是顯示出來的大小。如果你指定一個非常大的文件。其實服務器剩余空間並不會減少。


以上,是我常用的幾種創建大文件的方法,可以根據不同的使用場景進行選擇,我一般使用的是 fallocate,速度夠快,也是也會真實地占用磁盤空間,符合真實的測試場景。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM