稀疏檔案Sparse File

2021-06-25 22:05:34 字數 1906 閱讀 7702

引入稀疏檔案(sparse file)的目的是有效的利用檔案系統空間(磁碟空間)。當檔案沒有實際資料時,首先將元資料/metadata(代表了空blocks)寫入磁碟,而不是用空資料(0)填充磁碟。而當寫入資料的時候,整個block被占用。

讀取稀疏檔案時,檔案系統透明地將metadata轉化為實際的空blocks,其中填充0.

總之,sparse file是當真正需要的時候才分配空間。這樣即提高了磁碟利用率,又能在磁碟空間不足的情況下建立大檔案(有時候這也是問題),而且降低了建立檔案的時間開銷(不需要分配完整的空間、不需要填充資料——初始分配一般填充0)。

當然sparse file也有問題

linux下的相關命令

使用dd建立乙個sparse file

icode0410@ubuntu:~/tmp$ddof=sparse-file bs=1k seek=5120 count=1

0+1 records in

0+1 records out

1 byte (1 b) copied, 1.169 s, 0.0 kb/s

icode0410@ubuntu:~/tmp$ls -lks

total 4

4-rw-rw-r-- 1 icode0410 icode0410 5242881 sep 23 18:57 sparse-file

icode0410@ubuntu:~/tmp$du --block-size=1ksparse-file

4sparse-file

建立的檔案前5m空間是乙個hole,1位元組被寫入,而占用的空間為4k(乙個block空間為4k)。

使用truncate命令可以調整檔案大小,也會產生hole

icode0410@ubuntu:~/tmp$ truncate -s6msparse-file

icode0410@ubuntu:~/tmp$ ls -lks sparse-file

4-rw-rw-r-- 1 icode0410 icode04106291456sep 23 19:09 sparse-file

通常,cp命令能夠檢測到sparse file,複製產生的新檔案也是sparse file

icode0410@ubuntu:~/tmp$cpsparse-file sparse-file2

icode0410@ubuntu:~/tmp$ ls -lks sparse-file2

4 -rw-rw-r-- 1 icode0410 icode0410 6291456 sep 23 19:11 sparse-file2

cp命令的--sparse=when(auto|awayls|never)選項可以控制複製sparse file的行為

icode0410@ubuntu:~/tmp$cp --sparse=neversparse-file sparse-file3

icode0410@ubuntu:~/tmp$ ls -lks sparse-file3

6144-rw-rw-r-- 1 icode0410 icode0410 6291456 sep 23 19:14 sparse-file3

參考資料

稀疏檔案 20210209

看維基百科的介紹吧 wikipedia sparse file 使用find var log type f printf s t p n 判斷檔案是否為稀疏檔案。或者使用stat c b b s file 命令。最左邊一列 s 顯示的值是 block size st blocks st size 在...

linux 稀疏檔案相關

1.用dd建立乙個檔案 dd if dev zero of mnt test bs 4096 count 1 oflag direct 2.用stat 檢視檔案的詳細資訊 size表示的是檔案的邏輯大小,這裡是4k。blocks表示的物理檔案的大小 blocks 512 8 512 4096,也就是...

稀疏檔案變成了普通檔案

原本有乙個 30g 的稀疏檔案 file.img,實際占用 3.5g 的空間。但壓縮成 file.img.tar.gz 後再解壓出來,發現實際占用了 30g 空間,稀疏檔案不稀疏了。為什麼呢?原來是因為在壓縮時沒有加上 s 引數。此引數的作用是指明被壓縮檔案是乙個稀疏檔案,如果沒有這個引數,程式會填...