我们都知道,在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. Vue2.0学习——axios用法详解

    功能特性 在浏览器中发送 XMLHttpRequests 请求 在 node.js 中发送 http请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 自动转换 JSON 数据 客 ...

  2. UOJ#23. 【UR #1】跳蚤国王下江南 仙人掌 Tarjan 点双 圆方树 点分治 多项式 FFT

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ23.html 题目传送门 - UOJ#23 题意 给定一个有 n 个节点的仙人掌(可能有重边). 对于所有 ...

  3. Codeforces 1012D AB-Strings 贪心

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1012D.html 题目传送门 - CF1012D 题意 给定字符串 $s,t$ ,其中只包含小写字母 $a ...

  4. AtCoder Regular Contest 099 (ARC099) E - Independence 二分图

    原文链接https://www.cnblogs.com/zhouzhendong/p/9224878.html 题目传送门 - ARC099 E - Independence 题意 给定一个有 $n$ ...

  5. 使用 Django-debug-toolbar 优化Query 提高代码效率

    一段程序执行效率慢,除了cpu计算耗时外,还有一个很重要的原因是SQL的Duplicated过多,使用Django-debug-toolbar能够快速找出哪些地方的SQL可以优化,提高程序执行效率 1 ...

  6. redis虚拟内存

    对于redis 这样的内存数据库, 内存总是不够用的. 除了可以将数据分割到多个 redis 服务器以外. 另外的能够提高数据库容量的办法就是使用虚拟内存技术把那些不经常访问的数据交换到磁盘上 如果我 ...

  7. position的定义

    position的属性有哪些 static :静态属性,默认布局 absolute:绝对定位:除了static之外的以其他属性定位,除此之外相对于body, fixed:固定定位:脱离文档流,滚动条不 ...

  8. 大数据技术 - MapReduce 作业的运行机制

    前几章我们介绍了 Hadoop 的 MapReduce 和 HDFS 两大组件,内容比较基础,看完后可以写简单的 MR 应用程序,也能够用命令行或 Java API 操作 HDFS.但要对 Hadoo ...

  9. Java基础中的RMI介绍与使用

    今天在这边介绍一下Java基础中的rmi使用.其实rmi有什么样的使用场景呢?它跟webservice有什么区别呢?其实webservice主要是可以跨语言实现项目间的方法调用,而rmi只是java内 ...

  10. seq2seq升级TF1.5后_Linear报错

    解决TF升级到1.5之后seq2seq.py出现的引用报错: 1.4时候使用rnn_cell_impl的_Linear没有问题的,TF升级到1.5之后这一行就运行不过去了,查到的方法是引用core_r ...