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

常規的建立文件方式有:shell

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

可是這幾種都只適合建立小的文本文件,某些狀況下出於測試的須要,你須要快速建立一個超大的文件,可能要 上百G。這時候要使用上面幾個命令,你可能要等一天的時間,效率很是低。服務器

接下來介紹幾種我經常使用的方法測試

1. dd

dd命令,能夠從標準輸入或指定的文件中讀取數據,拷貝至新文件。spa

$ dd if=/dev/zero of=big_file count=10 bs=1G複製代碼

使用 time 命令,能夠算出建立一個 10G的文件須要耗時多久?3d

$ 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秒的時間code

$ 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。cdn

$ fallocate -l 10G big_file複製代碼

使用 time 命令,能夠算出建立一個 10G的文件須要耗時多久?blog

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

竟然只有 0.001秒。it

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

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

$ 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,速度夠快,也是也會真實地佔用磁盤空間,符合真實的測試場景。


相關文章
相關標籤/搜索