咱们都知道,在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