Linux文件空洞与稀疏文件 转】的更多相关文章

  1.Linux文件空洞与稀疏文件 2.文件系统数据存储 3.文件系统调试   文件空洞   在UNIX文件操作中,文件位移量可以大于文件的当前长度在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞.位于文件中但没有写过的字节都被设为 0. 如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”在文件里创造“空洞(hole)”.没有被实际写入文件的所有字节由重复的 0 表示.空洞是否占用硬盘空间是由文件系统(file system)决定的 稀…
在UNIX/LINUX系统中,文件位移量可以大于文件的当前长度,这种情况下向文件中写入数据就会产生文件空洞(hole),这些没写入数据的文件空洞部分默认会被0填满.虽然这些文件空洞并没有实际的数据,但是它们仍然占据硬盘空间. 在Windows下同样支持这种文件空洞,以下简单的代码产生一个6KB的空洞文件: #include <afx.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* ar…
17.8 稀疏调拨的内存映射文件 17.8.1 稀疏文件简介 (1)稀疏文件(Sparse File):指的是文件中出现大量的0数据,这些数据对我们用处不大,但是却一样的占用空间.NTFS文件系统对此进行了优化,那些无用的0字节被用一定的算法压缩起来.例如声明一个很大的稀疏文件(如100GB),这个文件实际上并不需要占用那么大的空,内部都是一些无用的0数据,那么NTFS就会利用算法释放这些无用的0字节空间,这是对磁盘占用空间的一种优化.但要注意FAT32并不支持稀疏文件的压缩. (2)与稀疏文件…
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/8745685.html 先引入两个问题: 一.第一个字节处写入一个字符,然后再第1000个字节位置写入一个字符,文件系统显示的文件大小是多少,磁盘系统显示的文件大小是多少. 二.仅仅在第一个字节处写入一个字符,文件系统显示的文件大…
1. Sparse 文件是并不占用磁盘存储空间. 2. rm 某文件后, 文件占用的磁盘空间并不是立即释放, 而是其句柄没有被任意一个进程引用时才回收. 3. ls 的结果是 apparent sizes, 我的理解是文件长度, 就类似文件系统中 file 这个数据结构中的定义文件长度的这个字段, du 的结果 disk usage, 即真正占用存储空间的大小, 且默认度量单位是 block. (apparent sizes 和 disk usage 说法摘自 man du 中的 --appar…
今天发现一个有意思的现象,文件系统大小只有37GB,上面却有一个900GB的文件!查了下,这个叫“稀疏文件”,我理解类似于VMWare里的瘦硬盘模式吧,先预先划出一块空间,然后往里填数据. [root@centos7 labs]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/cl_centos7-root 37G .4G 36G % / devtmpfs 910M 910M % /dev tmpfs 920M 920M…
在LInux系统的使用过程中,有时候会遇到诸如某个磁盘分区的大小不够用了,导致其下的文件系统不能正常写入数据.亦或者是系统swap分区太小,不够用或者不满足条件而导致的其他一系列问题.如果我们系统上挂载的有富余的磁盘空间,这样就简单多了,直接在现成的磁盘上划出一个分区,格式化并挂载就完事了.但是也有些时候限于条件,没有富余的磁盘空间,怎么办的呢?我们可以在现有的系统中,看看有没有其他分区的空间比较大,并且分出去一部分后,仍然不影响改分区系统的正常使用.如果存在这种情况,就可以实现间接的扩展磁盘空…
本篇主要从stat函数开始,逐个说明stat结构的每一个成员,以此来了解文件的所有属性.同时将说明修改这个属性的各个函数. 一.文件 使用stat函数族得到和文件有关的信息结构. #include <sys/stat.h> /* 获取和文件相关的信息结构,当文件是符号链接时,lstat返回该符号链接的信息 * @return 成功返回0,出错返回-1 */ int stat(const char *path, struct stat *buf); int fstat(int fd, struc…
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并和标准I/O进行对比. 文件描述符 内核通过文件描述符引用打开的文件,它是一个非负整数.按惯例,shell中使用0与进程的标准输入关联,1与标准输出关联,2与标准错误输出关联.依照POSIX,这些幻数应替换为符号常量 STDIN_FILENO . STDOUT_FILENO .STDERR_FILE…
如果程序的文件偏移量已然跨越了文件结尾,然后再执行IO操作,将会发生什么情况? read调用将会返回0,表示文件结尾.令人惊讶的是,write函数可以在文件结尾后的任意位置写入数据. 从文件结尾后到新写入数据的这段空间被称为文件空洞. 从编程的角度来看,文件空洞是存在字节的,读取空洞将返回以0(空字节)填充的缓冲区. 然而,文件空洞不占用任何磁盘空间.知道后续某个时间点,在文件空洞中写入了数据,文件系统才会为之分配磁盘块. 文件空洞的优势在于,与为实际需要的空字节分配磁盘块相比,稀疏的填充文件会…