咱們都知道,在Windows中,右鍵單擊一個文件或文件夾,選屬性(Properties)能夠看到這個文件或文件夾的大小。而這個大小是文件的原始大小,即邏輯大小(logical size)。即一個1KB的文本文件,經過這種方式,看到的大小就是1KB, 咱們這裏說的是「size」。node
嚴格上來講,Windows上顯示出來的是兩個size,一個叫作「size」,另外一個叫作「size on disk」. 此兩者的區別,大體以下:Windows在格式化磁盤的時候,會選擇使用什麼文件系統來format,而且,一樣的文件系統在格式化的時候也能夠指定allocation unit (即cluster)的大小。 這個allocation unit的大小就是文件系統上尋址的最小單位。即假設咱們format一塊磁盤的時候,選擇了NTFS,而且選擇了allocation unit的大小是64KB,那麼若是咱們往這塊盤上放一個1KB的文件,那麼同時就會有63KB的空間被浪費掉。這時, 在文件上點右鍵,看屬性,就會發現size是1KB,而size on disk是64KB。linux
如何查看Windows的某一塊盤的allocation unit是多大呢?操作系統
假設咱們想看C盤,那麼可使用命令:3d
fsutil fsinfo ntfsinfo c:unix
Linux下也能夠查看一樣的概念,這個概念在Linux下叫作Sector。orm
查看全部分區,可使用命令:blog
fdisk –lip
然而,在有保護的文件系統上,好比Isilon的OneFS,那麼文件的大小就有了變化。並且當OneFS上啓用了壓縮功能,那麼這個文件的大小如何查看就更是個值得仔細琢磨一下的問題了。get
OneFS默認的文件保護等級是2d:1n, 便可以容忍任意兩塊磁盤同時壞掉或者一個節點的丟失。要達到這個保護等級,對於小文件來講就是須要3份拷貝,對於大文件來講就是要增長FEC的數據塊,從而能夠計算對丟失的數據進行恢復。那麼2d:1n的保護等級會對一個比較大的文件增長多少數據塊呢?說來有點複雜,這取決於Isilon cluster包含多少個節點。具體請看下圖:it
看2d:1n的一列,能夠看到,集羣小的時候每4個數據塊就添加兩個FEC數據塊,集羣大的時候能夠每16個數據塊添加兩個FEC塊。
說了這麼多,如今回到正題,假設我有一個logical size(即原始文件大小)爲48MB的文件,假如把它存儲在一個4個節點的2d:1n的Isilon cluster上,那麼OneFS會以8*6+8*2= 64MB的空間來存儲這個文件。那麼我該使用什麼命令來查看從而獲得文件的原始大小48MB和實際存儲這個文件所消耗的磁盤空間64MB呢?
在FreeBSD操做系統上,能夠經過以下命令來獲得:
du –sh
使用這個命令來獲得文件或文件夾實際佔用的磁盤空間,若是是上文的例子,那麼這個命令會獲得64MB。(實際上,若是使用du –sk命令的話,獲得的會是「文件的數據的大小」,與「inode的三份mirror大小24KB」的和)。
du –Ash
使用這個命令來獲得文件或文件夾的logical size,這個命令會獲得48MB。
在一臺普通的H500上,查看文件大小的命令結果以下:
在開啓了壓縮的環境裏,這個差距可能會更大,以下:
===============
Why is There a Big Difference Between ‘Size’ and ‘Size on Disk’?
https://www.howtogeek.com/180369/why-is-there-a-big-difference-between-size-and-size-on-disk/
How can I view the allocation unit size of a NTFS partition in Vista?
HOW TO FIND BLOCK SIZE IN LINUX AND UNIX
https://www.linuxnix.com/find-block-size-linux/
Finding the sector size of a partition
https://unix.stackexchange.com/questions/2668/finding-the-sector-size-of-a-partition