世界杯欧洲区预选赛_世界杯足球几年一次 - chinaacecloud.com



为什么一样的文件可能占用的空间忽大忽小?什么是分配单元/簇(Allocation Unit)?什么是内部碎片?讲解与实践。

文章目录

1. 问题描述2. “文件大小”和“占用空间”2.1 原理2.1.1 那为什么不直接设置分配单元/簇(Allocation Unit)为最小呢?2.1.2 那如果分配单元/簇(Allocation Unit)的大小较大,该怎么节省空间呢?

2.2 实践2.2.1 上面的偏移量是什么?2.2.2 前面磁盘管理发现只有四个分区,为什么这里有五个?

1. 问题描述

前些日子给自己装了一块新的硬盘,于是我重新修改了一下硬盘分区。我将一些数据文件放在了我的移动硬盘里,发现了一个问题。 如图所示,我的D盘储存我的一些数据文稿之类的,我将它们拷贝到了F盘,也就是我的移动硬盘上,但是我将他们拷贝回去的时候发现,D盘所占用的空间远远小于F盘。虽然F盘多了几个文件夹,但是这几个文件夹都是配置文件之类的,不可能会有这么大的差距。 我以为是拷贝文件丢失了,于是我将其中的一个文件夹的属性进行了对比。 发现原来文件不仅会有大小还有占用空间的区分。 如图所示,我们文件的大小是一致的,包含的内容数量也是一致的,区别在于占用空间。 我又检查了其他的几个文件夹,也是一样的情况,所以问题就是在于一样的文件在我两个磁盘的占用空间不同。

2. “文件大小”和“占用空间”

2.1 原理

文件大小:文件实际内容占用了多少字节,它指的是其逻辑大小。 占用空间:文件在磁盘上真正占用的物理空间,受分配单元/簇(Allocation Unit) 的大小的影响。 我们可以把存储空间想象成一个仓库中心,这里有很多仓库,每个仓库就是一个分配单元/簇(Allocation Unit),我们将东西储存在仓库里。一个文件无论多小都会占用一个簇,如果簇的大小是1mb,文件实际大小是1kb,那么储存在这里还是会占用空间1mb,这剩余的没存储的空间无法再存储别的东西,因为难以将一个簇内部分开,这里浪费的空间将近1mb,叫做内部碎片(Internal Fragmentation)。当然如果簇越大,那就是仓库越大,所浪费的空间,也就是内部碎片也可能就越大。我们文件多的话,就需要多个仓库,这就会有更多的内部碎片,也就是更多浪费的空间。 这里我们有3万多个文件,如果一个分配单元/簇大小大概为1mb的话,就会占用大约30gb的空间。 我们刚刚解释了如果一个仓库我们放两个东西,系统就无法准确识别对应的文件到底是仓库里的哪一个,它只会将仓库完全读取出来,所以我们无法将内部碎片再利用起来。那我们如果文件大于一个仓库呢,那文件系统会将文件内容分散存储在多个簇中。可以理解成我们把一个飞机拆成多个零件放在了不同仓库中。每个簇存储文件的一部分,直到文件的全部内容都被存储。 因此我们这个问题的原因是我的移动硬盘(F盘)的分配单元/簇的大小较大,可能是1mb,因此会造成更多的内部碎片,从而出现了这种占用空间远远大于实际大小的情况。而D盘的分配单元/簇的大小较小,因此浪费的空间也较少。

2.1.1 那为什么不直接设置分配单元/簇(Allocation Unit)为最小呢?

将分配单元/簇(Allocation Unit)设置为最小值确实可以减少内部碎片,但这样做也有其缺点。选择簇大小时,需要在存储效率与管理开销之间进行权衡。小簇(如512字节或4KB)可以减少内部碎片,但会增加管理簇的复杂性和处理开销,可能导致更多的磁盘寻道操作,从而影响性能。我们日常使用硬盘读写的时候,其实会有很多时间在寻址上,也就是说我们存储东西的时候,很多时间是在找空闲的仓库,读取文件的时候,很多时间是在找对应的仓库。固态硬盘(SSD)的寻址时间相对于机械硬盘(HDD)来说是非常短的。下面的网站实测了同样的机械硬盘在不同大小的分配单元/簇下的读写速度。 分配单元大小速度影响数据 结果和理论一样簇越小,效率越低,但浪费的空间也小;簇越大,效率越高,浪费的空间也多。其实在绝大数情况,文件系统的默认簇大小已经足够好,能够平衡存储效率和性能需求,我们没必要修改。

2.1.2 那如果分配单元/簇(Allocation Unit)的大小较大,该怎么节省空间呢?

我们可以使用压缩包将这个文件压缩为一个压缩包,这样3万个小文件就会在一起变成1个连续大文件,那这样的浪费就会降低为最后一个簇所剩余的空间了,这样我们就提升了存储空间的利用率,不会产生像我演示的那样的大量储存空间浪费了。

2.2 实践

我们可以右击此电脑然后选择显示更多选项然后点击管理。 在计算机管理界面选择左侧的磁盘管理。 当然我们也可以直接在搜索里搜索磁盘管理从而打开磁盘管理。 我们可以在这里看到磁盘0和磁盘1都是NTFS,而磁盘2是exFAT。 NTFS和exFAT都是文件系统,我们在操作系统中学过这里的相关知识,它们是操作系统在存储设备(硬盘、SSD、U 盘等)上组织、命名、存取、保护文件的一套规则和数据结构。 NTFS是WIndows使用的文件系统,而APFS是Mac使用的文件系统,这也是我们再使用u盘和移动硬盘在这两种设备时需要注意的点,否则文件无法被另一种文件系统读取。当然也有文件系统能横跨这两种设备,那便是exFAT。 NTFS的默认储存单元/簇大小为4kb,而exFAT的默认大小会根据分区大小有不同的值。 下面是对比表格。

分区大小NTFS 默认簇exFAT 默认簇浪费对比8 GB4 KB32 KBexFAT 浪费 ×864 GB4 KB128 KBexFAT 浪费 ×32512 GB4 KB256 KBexFAT 浪费 ×641 TB+4 KB512 KB~1 MBexFAT 浪费 ×128~256

我的这块移动硬盘是1TB的,很有可能默认储存单元/簇大小为1mb。

我们可以查看现在这个硬盘的分配单元/簇(Allocation Unit)的大小,我们打开运行,输入diskpart后按下回车就会打开命令行的磁盘分区工具。

diskpart

然后我们分别输入以下命令。

sel disk X

list partition

sel partition Y

filesystems

这里X是磁盘几,Y是分区几,如刚刚在磁盘管理中,我们的这块移动硬盘是磁盘2,因此X是2,然后这个磁盘只有1个分区,上面显示出来了是分区1,所以Y是1。 这里我们可以看到exFAT下它的分配单元大小是1024K,也就是1MB,和我们前面的理论符合。 我们再验证一下前面的D盘的分配单元/簇大小。 4096B也就是4KB,与前面的理论符合。

这里我们其实还可以发现两个问题。

2.2.1 上面的偏移量是什么?

偏移量(Offset):从磁盘 0 号字节开始,到这个分区真正开始的位置之间隔了多少字节。 每个磁盘最前面0-1023KB这1024KB(1MB)空间通常存放分区表 / 启动扇区 / 厂商工具。因此我们可以看到这两个磁盘的第一个分区都是1024KB偏移量。然后后面就更好理解了,第一个分区使用了100MB,所以第二个分区从101MB开始,再下一个分区101+16=117,所以偏移量是117MB。

2.2.2 前面磁盘管理发现只有四个分区,为什么这里有五个?

因为系统盘会自动包含MSR分区、EFI分区、恢复分区和C盘。其中MSR(Microsoft Reserved Partition)默认被隐藏,其没有文件系统,没有盘符,不显示大小。 其是用作给 Windows 将来做动态磁盘、BitLocker、恢复环境等预留空间,默认 16 MB。

顺便说一句,恢复分区705 MB是微软从 Win11 开始的新标准,早期版本是 450 MB,现在变大是为了容纳更多恢复工具。EFI是系统的启动钥匙,存放 Windows 启动加载器(bootmgfw.efi)、驱动程序、BitLocker 密钥、恢复环境等文件。电脑开机时,UEFI 固件先到这里找文件,再加载操作系统;没有它,系统无法启动。