Day2 资料储存 - block storage基础

Block storage是最基本的储存系统,所以让我们从这里开始

我们都知道数据是以1和0储存在某个"介质"上面,例如机械式硬碟(HDD)利用磁性,而固态硬碟(SSD)利用电子

Block storage是最能与这些硬碟直接打交道的方式,那麽先回答一个问题,软件是如何与硬碟打交道呢?首先,作业系统利用LUN ID识别硬碟,LUN是一个或一组或半个硬碟的逻辑代号,为何有半个呢?例如我们的windows有一个硬碟,把他分成C槽和D槽,那麽他们就是各半个

LUN的概念也方便了让虚拟机挂载硬碟,就不用透过下层的hypervisor识别硬碟了

有了LUN,我们也方便了多台主机共享一个储存设备,为了共享储存设备,储存设备必须是外接式,一般透过SCSI通讯协议与多主机沟通

最後,为什麽叫做block呢?这就要从我们是怎麽从硬碟读取和写入数据说起,一个block是一段固定长度的bytes,或是我们可以称为"虚拟化的扇区”.

Block storage的资料读写方法与HDD的结构有关,如下图所示

https://ithelp.ithome.com.tw/upload/images/20210902/20130271pZT14bYWOo.png

HDD就是用类似光碟的圆盘一个个堆叠出来了,刚刚提到的"扇区"就是上图的sector,代表同个半径下一小块长度,HDD的最小单位就是一个sector,然後block storage最小的单位是一个block,sector是实体地址,block是作业系统上的逻辑地址

这样比喻好了,大家上作业系统课的时候,应该学过虚拟记忆体,意思是实体记忆体与一个虚拟化的记忆体的Mapping关系,实体记忆体的Page就像是硬碟的sector,而虚拟记忆体的Page就像是block. Block就是作业系统最小的逻辑储存单位,常见为4096 bytes. 可以藉由指令stat /boot/ |grep "IO Block" 查询

为何有这样的设计呢?因为sector有点小,传统的硬碟一般是512bytes,如果用block作为最小单位直接读的话,可以一次读多个,当然,这个可以根据需求透过软件控制

总结来说,block storage就是一种最底层让软件和硬碟沟通的方式

另外,本次系列的程序码都放在这了,欢迎自行取用:https://github.com/kaichiachen/python-simple-object-storage


<<:  [Day2] Flutter - 建置环境

>>:  C# 入门之数据类型与运算符

【Day09】数据输入元件 - Upload

元件介绍 Upload 是一个上传元件。帮助我们能够发布文字、图片、影片、档案到後端服务器上。 参考...

CSS微动画 - 倒数计时,绘制圆饼图!

Q: 这个用Svg做吧? A: 如果你的需求跟我这款一样,Css就可以画罗~ 上一篇的时钟给小编这...

Day 15 conda 介绍与使用

当我们在使用 Python 开发专案时,不同专案可能会有不同 Python 版本和不同的 packa...

SEO:关於 Custom Campaign Tracking

最近我公司 ReUbird 开始实行 Custom Campaign,开始仔细 track 所有 t...

什麽是帕累托图?(20/80法则)

我相信您曾经有过这样的经历。当您遇到问题并想解决时,您总是会发现有太多因素会影响该问题。太多了,您根...