為什么文件占用的空間會(huì)大于文件實(shí)際大小以windows系統(tǒng)舉例,先看幾張圖: 圖1:文件的大小比占用空間更小。
圖2:文件的大小和占用空間大小一致。
圖3:文件大小比占用空間大小更大。
上面3張圖展示了文件大小與占用空間的大小幾種情況,前兩種場(chǎng)景是比較常見的情況,之所以有時(shí)文件大小會(huì)比占用空間小時(shí)因?yàn)榇卮笮〉南拗,簇代表了可以分配用?lái)保存文件的最小磁盤空間量,存放sparse.txt文件所在區(qū)簇的大小為4096字節(jié),圖1中文件大小為4096字節(jié)(可以使用chkdsk命令查看),所以5K的文件需要2個(gè)簇來(lái)存儲(chǔ),如下圖所示:
圖2所示文件大小為5M,5M正好是4096的整數(shù)倍,所以文件大小跟占用空間大小一樣大。 下面重點(diǎn)說(shuō)下第三種情況,這里涉及到稀疏文件問(wèn)題,對(duì)于不支持稀疏文件的系統(tǒng)就不會(huì)出現(xiàn)這種情況,看個(gè)例子: /**
* 常規(guī)文件可能會(huì)有很多不必要的空間浪費(fèi)
* @throws IOException
*/
@Test
public void normalFile() throws IOException {
File file = new File("d:/tmp/sparse.txt");
Path path = file.toPath();
FileChannel ch = FileChannel.open(path, StandardOpenOption.CREATE,StandardOpenOption.WRITE);
ch.position(5*1024*1024L);
ch.write(ByteBuffer.wrap("hello world".getBytes("utf-8")));
ch.close();
}
/**
* 稀疏文件模式
* @throws IOException
*/
@Test
public void sparseFile() throws IOException {
File file = new File("d:/tmp/sparse.txt");
Path path = file.toPath();
FileChannel ch = FileChannel.open(path, StandardOpenOption.SPARSE,StandardOpenOption.CREATE_NEW,StandardOpenOption.WRITE);
ch.position(5*1024*1024L);
ch.write(ByteBuffer.wrap("hello world".getBytes("utf-8")));
ch.close();
}有的用戶會(huì)發(fā)現(xiàn)文件管理中統(tǒng)計(jì)的文件大小與實(shí)際空間占用大小不一致,如空間大小提示超標(biāo)文件大小未超標(biāo),也是因?yàn)檫@些原因?qū)е碌,綜上所述,我司系統(tǒng)檢測(cè)到的空間占用大小為實(shí)際文件占用空間的大小,而非文件本身的大小,如提示空間超標(biāo),請(qǐng)您升級(jí)空間大小,避免影響您的正常使用。 如您的主機(jī)配額超標(biāo)很多,實(shí)際占用空間不大,是因?yàn)橛泻芏嘈〉木彺嫖募,比如\runtime\session 路徑下的文件,如下圖:
這類情況如果通過(guò)FTP或文件管理器刪除太慢,請(qǐng)【提交工單】,可授權(quán)技術(shù)工程師為您批量刪除處理。
|
|||||
| >> 相關(guān)文章 | |||||
|
|
|||||