前言:
在磁盘空间进制计算上,我看到某乎上有一个提问:“计算机中K到底是1000还是1024?”
当我看完后感到十分好笑。但作为一个学习linux的初学者,有必要严谨的明白Linux关于磁盘存储换算进制问题。特此,本期讲述磁盘换算进制问题。
特别说明,本文部分引用了这篇文章,在此非常感谢。
原文链接:https://blog.csdn.net/Luckiers/article/details/119151536
问题分析:
1000提问者说的单位是GiB这个单位,单位以10为底数的指数。
而1024说的单位是GB这个单位,单位是以2为底数的指数。
正之所以有这个问题被提出,是因为买硬盘或者电脑的时候,硬盘空间或者买的电脑的磁盘空间宣传报的空间要比实际检测出的空间要小一些。比如说新买的16G+1TB电脑打开发现只有实际空间16G+931G。特此可能会有些人会认为这是商家虚标宣传空间。在此说明,这是正常现象。
分析原因:
硬盘制造商通常使用十进制单位(GB)来标注硬盘容量,而操作系统和软件则使用二进制单位(GiB)来报告实际可用的容量,因此检测到的实际结果通常会比标出的容量小一些。
具体的对比关系如下:
在计算机领域,我们以前常说的KB,MB和GB跟KiB,MiB和GiB是完全一样的。
KiB,MiB和GiB,这三个标志是标准的计算机领域的术语,中间的i取自binary,表示二进制幂的计数:
1KiB = 1024 Byte
1MiB = 1024 KiB = 1048576 Byte
1GiB = 1024 MiB
1TiB = 1024 GiB
1999年,国际电工委员会(IEC)公布了修正2:“IEC 60027-2:电工技术应用的字母符号 — 第二部分:通信和电子。”
这个标准,在1998年通过,介绍了词头“kibi-”、“mebi-”、“gibi-”、“tebi-”、“pebi-”、“exbi-”,作为二进制乘幂的计数方法。要读懂这段规定。其内涵是定义了符号的规范用法。Mi、Ki、Gi代表的是二进制乘幂的计数方法。反过来讲,就是规范了一个标准,只要出现上述标志的,意味着这种使用是规范的。而我们日常使用的MB、KB等用法存在着很多歧义。这种硬性规定是出于学术上的考虑的。在实际使用中,MB的意义和MiB应该是等同的。
不过在通信领域,活在日常口语中,KB,MB和GM就不一定是二进制幂的表示。K就是1000,M就是1000*1000这样。
还要注意一个细节,一般B大写指Byte,b小写指bit。B一般都是大写的。
知识与应用:
GiB(Gibibyte)是信息或计算机硬盘存储的一个单位
1KiB = 1024 Byte
1MiB = 1024 KiB = 1048576 Byte
1GiB = 1024 MiB
1TiB = 1024 GiB
GB(gigabyte)是十进制的容量单位
1KB=1000Byte
1MB=1000KB
1GB=1000MB
1TB=1000GB
目前linux系统中查看磁盘容量大小的工具如parted、fdisk都是以内核读取的磁盘块数量再进行换算而来,具体磁盘块数量查看命令:
[root@localhost /]# cat /sys/block/sda/size
1218663424
可以通过该块数量去换算成GiB和GB:
1218663424*512/1024/1024/1024=581.1040GiB
与fdisk显示一致。
同理换算GB过程:
1218663424*512/1000/1000/1000=623.9557GB
与parted显示一致。
注:parted显示的是GB单位,fdisk是显示的GiB单位。
分区误差解析:
在安装linux系统进行自动全盘分区后会出现磁盘末端分区位置不是磁盘最后块位置,具体如上fdisk查看磁盘信息图所示。
原因有如下:
在获取磁盘具体数量后会进行四舍五入运算显示以GiB和GB为单位的数值,最终显示磁盘大小比实际偏大,如上parted显示的磁盘容量就比实际的偏大,因为其换算后采用四舍五入操作,因此在安装全盘分区时,会进行舍去末尾小数操作,防止磁盘分区失败,最终分区下来的块位置与磁盘块位置不一致的情况。