
正常的建立檔案方式有:
touch
vi(m)
tee
> 或 >>
但是這幾種都隻适合建立小的文本檔案,某些情況下出于測試的需要,你需要快速建立一個超大的檔案,可能要 上百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,速度夠快,也是也會真實地占用磁盤空間,符合真實的測試場景。