Linux中建立大檔案並作為檔案系統使用
在Linux系統的使用過程中,有時候會遇到諸如某個磁碟分割區的大小不夠用了,導致其下的檔案系統不能正常寫入資料。亦或者是系統swap分割區太小,不夠用或者不滿足條件而導致的其他一系列問題。如果我們系統上掛載的有富餘的磁碟空間,這樣就簡單多了,直接在現成的磁碟上劃出一個分割區,格式化並掛載就完事了。但是也有些時候限於條件,沒有富餘的磁碟空間,怎麼辦的呢?我們可以在現有的系統中,看看有沒有其他分割區的空間比較大,並且分出去一部分後,仍然不影響改分割區系統的正常使用。如果存在這種情況,就可以實現間接的擴充套件磁碟空間了。
1,我們需要先在有富餘空間的磁碟分割區上建立一個大檔案,檔案的大小根據你的實際需要和所要劃出空間分割區實際大小來決定。建立大檔案,可以使用如下3個命令:
1.1 dd
建立大檔案首選的會是dd命令,dd是 device driver 的縮寫,可以用來讀取裝置、檔案中的內容,並原封不動地複製到指定位置。因此dd本質上是copy一個檔案副本,
它強制你編寫每個資料塊,並初始化檔案內容,但是初始化會佔用大量的I / O時間,因此使用dd命令建立大檔案的速度是比較緩慢的。使用dd建立大檔案的命令如下:
dd if=/dev/zero of=/home/disk0 bs=2G count=1
這個命令將在/home根目錄下建立一個名為disk0的空檔案,其中用到了如下四個選項:
if=檔名:指定輸入檔名或者裝置名,如果省略“if=檔名”,則表示從標準輸入讀取。
of=檔名:指定輸出檔名或者裝置名,如果省略“of=檔名”,則表示寫到標準輸出。
bs:指定單個檔案的塊block大小。
count:想要建立檔案的個數。
1.2 fallocate
fallocate的功能是為檔案預分配物理空間,而不是生成一個空洞檔案,fallocate分配的空間在磁碟的磁區上是連續的,它減少後續寫入和讀取檔案時的磁碟尋道開銷;
並且是迅速直接佔用空間,而不是想空洞檔案那樣“假裝”戰=佔有那麼多空間,這樣就可以保證隨著磁碟空間的使用,而不會出現該段磁碟空間不足。由於fallocate
並不是標準的posix介面,並不是所有的檔案系統都是支援的,目前主流的ext4和xfs都是可以的。
fallocate -l 20G /home/disk00
-l:--length,指定分配檔案的長度,即檔案的大小;
disk00:所分配檔名稱
1.3 truncate
truncate和lseek是將檔案的末尾位置“擴充套件到”一個固定位置而生成的一個空洞檔案,也即是稀疏檔案。該檔案並不佔用實際磁碟空間,只是邏輯上看起來那麼大而已。
使用ls -l命令可以檢視其邏輯大小,即你希望分配的大小。使用du命令可以看到其實際占用的磁碟空間大小。使用od -c命令可以看到檔案中間是用“