当前位置:网站首页>只有1个字节的文件实际占用多少磁盘空间
只有1个字节的文件实际占用多少磁盘空间
2020-11-06 21:04:00 【张彦飞allen】
在前文《新建一个空文件是否占用磁盘空间?占用多少》中我们了解到了一个空文件的磁盘开销。 今天我们再思考另外一个问题,假如我们给文件里只写入1个字节,那么这个文件实际的磁盘占用也是1个字节吗?
查看1个字节的文件
和前文一样,先不谈原理,直接动手操作。
# mkdir tempDir
# cd tempDir
# du -h
0 .
# touch test
# du -h
0 .
在一个目录中创建了一个空的文件以后,通过du命令看到的该文件夹的占用空间并没有发生变化。这倒是符合我们之前的认识,因为空文件只占用inode。好,那让我们修改文件,添加一个字母
echo "a" > test
# du -h
4.0K .
保存后再次查看该目录的空间占用。我们发现由原来的0增加到了4K。 所以说,文件里的内容不论多小,哪怕是一个字节,其实操作系统也会给你分配4K的。哦,当然了还得再算前文中说到的inode和文件夹数据结构中存储的文件名等所用的空间。 所以,不要在你的系统里维护一大堆的碎文件。文件再小,占用磁盘其实一点都不少!
注意我的实验环境是在ext文件系统下进行的。如果是xfs可能表现会有些许出入。
继续讨论这个4K
再把linux源代码文件fs/ext2/ext2.h里关于inode的定义翻出来,我们找到结构体中定义的指向数据节点用的block数组:
struct ext2_inode {
......
__le32 i_block[EXT2_N_BLOCKS]; # 指向存储文件数据的块的数组
......
当文件没有数据需要存储的时候,这个数组都是空值。而当我们写入了1个字节以后,文件系统就需要申请block去存储了,申请完后,指针放在这个数组里。哪怕文件内容只有一个字节,仍然会分配一个整的Block,因为这是文件系统的最小工作单位。那么这个block大小是多大呢,ext下可以通过dumpe2fs查看。
#dumpe2fs -h /dev/mapper/vgroot-lvroot
......
Block size: 4096
在我的机器上,一个Block是4KB。
文件内容再大了怎么办
不知道你留意没,inode中定义的block数组大小呢,只有EXT2_N_BLOCKS个。我们再查看一下这个常量的定义,发现它是15,相关内核中定义如下:
#define EXT2_NDIR_BLOCKS 12
#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
就按4K的block size来看,15个block只够存的下15*4=60K的文件。 这个文件大小相信你一定不满意,你存一个avi大片都得上G了。那Linux是怎么实现大文件存储的呢?嗯,其实上面宏的定义过程已经告诉你了,就是只有12个数组直接存block指针,其余的用来做间接索引(EXT2_IND_BLOCK),二级间接索引(EXT2_DIND_BLOCK)和三级索引(EXT2_TIND_BLOCK)。

这样,一个文件可以使用的空间就指数倍的扩展了。 文件小的时候,都用直接索引,磁盘IO少,性能好。文件大的时候,访问一个block可能得先进行三次的IO,性能略慢,不过有OS层面的页缓存、目录项缓存的加持,也还好。
结论
文件系统是按照块来管理的,所以不管你的文件多小,哪怕只有一个字节,都会消耗掉整整一个块。这个块大小可以通过dumpe2fs等命令来查看。如果想改变这个块大小怎么办?对不起,只能重新格式化。

开发内功修炼之硬盘篇专辑:
- 1.磁盘开篇:扒开机械硬盘坚硬的外衣!
- 2.磁盘分区也是隐含了技术技巧的
- 3.我们怎么解决机械硬盘既慢又容易坏的问题?
- 4.拆解固态硬盘结构
- 5.新建一个空文件占用多少磁盘空间?
- 6.只有1个字节的文件实际占用多少磁盘空间
- 7.文件过多时ls命令为什么会卡住?
- 8.理解格式化原理
- 9.read文件一个字节实际会发生多大的磁盘IO?
- 10.write文件一个字节后何时发起写磁盘IO?
- 11.机械硬盘随机IO慢的超乎你的想象
- 12.搭载固态硬盘的服务器究竟比搭机械硬盘快多少?
我的公众号是「开发内功修炼」,在这里我不是单纯介绍技术理论,也不只介绍实践经验。而是把理论与实践结合起来,用实践加深对理论的理解、用理论提高你的技术实践能力。欢迎你来关注我的公众号,也请分享给你的好友~~~
版权声明
本文为[张彦飞allen]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4746202/blog/4703266
边栏推荐
- A course on word embedding
- 一篇文章带你了解CSS 分页实例
- NLP model Bert: from introduction to mastery (1)
- If PPT is drawn like this, can the defense of work report be passed?
- Jetcache buried some of the operation, you can't accept it
- 6.1.2 handlermapping mapping processor (2) (in-depth analysis of SSM and project practice)
- Python crawler actual combat details: crawling home of pictures
- In order to save money, I learned PHP in one day!
- What is the side effect free method? How to name it? - Mario
- Named entity recognition in natural language processing: tanford core LP ner (1)
猜你喜欢

每个前端工程师都应该懂的前端性能优化总结:

Face to face Manual Chapter 16: explanation and implementation of fair lock of code peasant association lock and reentrantlock

DRF JWT authentication module and self customization

前端都应懂的入门基础-github基础

一篇文章带你了解CSS3圆角知识

至联云解析:IPFS/Filecoin挖矿为什么这么难?

Did you blog today?

git rebase的時候捅婁子了,怎麼辦?線上等……

vue-codemirror基本用法:实现搜索功能、代码折叠功能、获取编辑器值及时验证

Windows 10 tensorflow (2) regression analysis of principles, deep learning framework (gradient descent method to solve regression parameters)
随机推荐
Summary of common algorithms of binary tree
Vite + TS quickly build vue3 project and introduce related features
Recommendation system based on deep learning
Who says cat can't do link tracking? Stand up for me
Thoughts on interview of Ali CCO project team
Skywalking series blog 5-apm-customize-enhance-plugin
Pattern matching: The gestalt approach一种序列的文本相似度方法
合约交易系统开发|智能合约交易平台搭建
Advanced Vue component pattern (3)
Installing the consult cluster
Building and visualizing decision tree with Python
Our best practices for writing react components
Jmeter——ForEach Controller&Loop Controller
Named entity recognition in natural language processing: tanford core LP ner (1)
教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化
百万年薪,国内工作6年的前辈想和你分享这四点
一篇文章带你了解CSS3圆角知识
一篇文章教会你使用Python网络爬虫下载酷狗音乐
[event center azure event hub] interpretation of error information found in event hub logs
If PPT is drawn like this, can the defense of work report be passed?