天天看點

linux建立1g大小檔案,如何在 1 s内快速建立數百G超大檔案?

linux建立1g大小檔案,如何在 1 s内快速建立數百G超大檔案?

正常的建立檔案方式有:

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

linux建立1g大小檔案,如何在 1 s内快速建立數百G超大檔案?