我们都知道,在Windows中,右键单击一个文件或文件夹,选属性(Properties)可以看到这个文件或文件夹的大小。而这个大小是文件的原始大小,即逻辑大小(logical size)。即一个1KB的文本文件,通过这种方式,看到的大小就是1KB, 我们这里说的是“size”。

严格上来说,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。

如何查看Windows的某一块盘的allocation unit是多大呢?

假设我们想看C盘,那么可以使用命令:

fsutil fsinfo ntfsinfo c:

Linux下也可以查看同样的概念,这个概念在Linux下叫做Sector。

查看所有分区,可以使用命令:

fdisk –l

然而,在有保护的文件系统上,比如Isilon的OneFS,那么文件的大小就有了变化。而且当OneFS上启用了压缩功能,那么这个文件的大小如何查看就更是个值得仔细琢磨一下的问题了。

OneFS默认的文件保护等级是2d:1n, 即可以容忍任意两块磁盘同时坏掉或者一个节点的丢失。要达到这个保护等级,对于小文件来说就是需要3份拷贝,对于大文件来说就是要增加FEC的数据块,从而可以计算对丢失的数据进行恢复。那么2d:1n的保护等级会对一个比较大的文件增加多少数据块呢?说来有点复杂,这取决于Isilon cluster包含多少个节点。具体请看下图:

看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?

https://stackoverflow.com/questions/81236/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

通过命令“du–sk”, “du–Ask” 的区别,谈谈如何在有保护的文件系统中查看文件或文件夹的大小的更多相关文章

  1. Linux下用ls和du命令查看文件以及文件夹大小

    ls的用法 ls -l |grep "^-"|wc -l或find ./company -type f | wc -l  查看某文件夹下文件的个数,包括子文件夹里的. ls -lR ...

  2. Linux下查看文件或文件夹大小的命令df 、du、ls

    转自:http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的 ...

  3. Linux文件系统管理 常见命令df、du、fsck、dumpe2fs

    概述 Linux文件系统管理 常见命令df.du.fsck.dumpe2fs. 文件系统查看命令:df 通过 df 命令可以査看已经挂载的文件系统的信息包括设备文件名.文件系统总大小.已经使用的大小. ...

  4. Linux下用ls和du命令查看文件以及文件夹大小(转)

    转自:https://www.cnblogs.com/xueqiuqiu/p/7635722.html ls的用法 ls -l |grep "^-"|wc -l或find ./co ...

  5. linux如何查看目录或文件夹的总大小--du命令

    记录一下如何查看一个目录或文件夹的总大小. 使用du命令的选项-s,可以统计整个目录或文件夹的大小. 例如 du -sk ./ 156k -k表示以KB为单位计算.

  6. Linux下查看文件和文件夹大小的df和du命令

        转自:http://www.yayu.org/look.php?id=162 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比 ...

  7. Linux命令(二十三) 磁盘管理命令(一) df,du,tune2fs

    一. 查看磁盘占用空间情况 df df 命令用于查看硬盘空间的使用情况,还可以查看硬盘分区的类型或 inode 节点的使用情况等. df 命令常用参数如下: -a 显示所有文件系统的磁盘使用情况,包括 ...

  8. 每天一个linux命令(3):du命令

    Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是查看当前指定文件或目录(会递归显示子目录)占用磁盘空间大小,还是和df命令有一些区别的. 1.命令格式: du [选 ...

  9. Linux命令-文件系统常用命令:df,du,fsck,dumpe2fs

    df -h 人性化显示文件系统的分区信息 注意:在linux中目录也是文件,不要混淆下面的目录文件说法. 传统方式查看文件大小可以使用:ll -h /目录/文件名,就可以看到文件的大小,但是如果你想看 ...

随机推荐

  1. FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db: Data::Dumper

    今天安装本地数据库,所遇到的错误 FATAL ERROR: please install the following Perl modules before executing ./mysql_ins ...

  2. BZOJ4003 [JLOI2015]城池攻占 左偏树 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4003 题意概括 题意有点复杂,直接放原题了. 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑 ...

  3. 不同路径(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?)

    示例 1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角. 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -&g ...

  4. 20165235 祁瑛 2018-4 《Java程序设计》第八周学习总结

    20165235 祁瑛 2018-4 <Java程序设计>第八周学习总结 教材学习内容总结 操作系统与进程 程序是一段静态的代码,它是应用软件执行的蓝本.进程是程序的一次动态执行过程,它对 ...

  5. scrapy 代码调试用 shell

    在虚拟机里CD到你的scrapy某个项目的目录,再 1. scrapy shell + '网址'(注意引号) 2. response.xpath(' ')来提取 如: response.xpath(' ...

  6. netty简单NIO模型

    首先是使用java原生nio类库编写的例子,开发一套nio框架不简单,所以选择了netty,该例完成后,是netty举例. package com.smkj.netty; public class T ...

  7. 基于jest和puppeteer的前端自动化测试实战

    前端测试现状 经常听到后端同学说“单元测试”,前端写过测试用例的有多少?答案是:并不多,为什么呢?两个主要原因 1.前端属于GUI软件,浏览器众多,兼容问题让人头大,用户量有一定规模的浏览器包括: I ...

  8. 表达式语言引擎:Apache Commons JEXL 2.1 发布

    http://www.linuxde.net/2011/12/4348.html Commons JEXL 2.1 发布了,该版本和 2.0.1 是二进制兼容的,但源码不兼容,因为新增了两个接口: o ...

  9. 一种表达式语言的解析引擎JEXL简单使用

    Jexl 是一个 Expression Language 的解析引擎, 是为了方便嵌入你的系统或者程序框架的开发中, 他算是实现了 JSTL 中 EL 的延伸版本. 不过也采用了一些 Velocity ...

  10. 负载均衡---ribbon

    Ribbon:提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用. 上一篇简单讲解了eureka的使用,这一篇文章基于上一篇的基础上,讲一下springcloud的另一个重要的组 ...