当前位置:首页 » 服务存储 » 文件是如何被分块存储在磁盘上的
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

文件是如何被分块存储在磁盘上的

发布时间: 2023-07-10 22:55:21

⑴ 电脑怎么分盘

电脑分盘具体步骤:

1、打开电脑,然后右键单击桌面的计算机,在弹出的对话框选择管理。

(1)文件是如何被分块存储在磁盘上的扩展阅读

硬盘分区之后,会形成3种形式的分区状态;即主分区、扩展分区和非DOS分区。

非DOS分区

在硬盘中非DOS分区(Non-DOS Partition)是一种特殊的分区形式,它是将硬盘中的一块区域单独划分出来供另一个操作系统使用,对主分区的操作系统来讲,是一块被划分出去的存储空间。只有非DOS分区的操作系统才能管理和使用这块存储区域。

主分区

主分区则是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。其中的主引导程序是它的一部分,此段程序主要用于检测硬盘分区的正确性,并确定活动分区,负责把引导权移交给活动分区的DOS或其他操作系统。此段程序损坏将无法从硬盘引导,但从软驱或光驱引导之后可对硬盘进行读写。

扩展分区

而扩展分区的概念是比较复杂的,极容易造成硬盘分区与逻辑磁盘混淆;分区表的第四个字节为分区类型值,正常的可引导的大于32mb的基本DOS分区值为06,扩展的DOS分区值是05。如果把基本DOS分区类型改为05则无法启动系统 ,并且不能读写其中的数据。

⑵ 扇区、磁盘块、页。磁盘是如何存储数据的:磁盘的物理结构

扇区,sector

硬盘的读写以扇区为基本单位。磁盘上的每个磁道被等分为若干个弧段,这些弧段称之为扇区。硬盘的物理读写以扇区为基本单位。通常情况下每个扇区的大小是 512 字节。linux 下可以使用 fdisk -l 了解扇区大小:

$ sudo /sbin/fdisk -l

Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x7d9f5643

其中 Sector size,就是扇区大小,本例中为 512 bytes。

注意,扇区是磁盘物理层面的概念,操作系统是不直接与扇区交互的,而是与多个连续扇区组成的磁盘块交互。由于扇区是物理层面的概念,所以无法在系统中进行大小的更改。

磁盘块,IO Block

文件系统读写数据的最小单位,也叫磁盘簇。扇区是磁盘最小的物理存储单元,操作系统将相邻的扇区组合在一起,形成一个块,对块进行管理。每个磁盘块可以包括  2、4、8、16、32 或 64 个扇区。磁盘块是操作系统所使用的逻辑概念,而非磁盘的物理概念。磁盘块的大小可以通过命令 stat /boot 来查看:

$ sudo stat /boot

  File: /boot

  Size: 4096        Blocks: 8          IO Block: 4096   directory

Device: 801h/2049d  Inode: 655361      Links: 3

Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2019-07-06 20:19:45.487160301 +0800

Modify: 2019-07-06 20:19:44.835160301 +0800

Change: 2019-07-06 20:19:44.835160301 +0800

Birth: -

其中 IO Block 就是磁盘块大小,本例中是 4096 Bytes,一般也是 4K。

为了更好地管理磁盘空间和更高效地从硬盘读取数据,操作系统规定一个磁盘块中只能放置一个文件,因此文件所占用的空间,只能是磁盘块的整数倍,那就意味着会出现文件的实际大小,会小于其所占用的磁盘空间的情况。

test2.txt是一个只包含一个字母的文本文档。它的理论大小是一个字节,但是由于系统的磁盘块大小是4KB(文件的最小存储大小单位),所以test2.txt占据的磁盘实际空间是4KB

操作系统不能对磁盘扇区直接寻址操写,主要原因是扇区数量庞大,因此才将多个连续扇区组合一起操作。磁盘块的大小是可以通过blockdev命令更改的。

页,page

内存的最小存储单位。页的大小通常为磁盘块大小的 2^n 倍,可以通过命令 getconf PAGE_SIZE 来获取页的大小:

$sudo getconf PAGE_SIZE

4096

本例中为 4096 Bytes,与磁盘块大小一致。

总结两个逻辑单位:

页,内存操作的基本单位

磁盘块,磁盘操作的基本单位

命令索引

扇区大小,fdisk -l

磁盘块大小,stat /boot

内存页大小,getconf PAGE_SIZE

硬盘是如何存储数据的:硬盘的物理结构

提示:硬盘分为机械硬盘和固态硬盘这2种。这里只讲解机械硬盘,固态硬盘的存储另当别论。

要想知道硬盘是如何存储数据的,就先明白硬盘的物理结构。

1、名称机械硬盘,由于信息载体为磁性物质,故又称磁盘。 2、硬盘主要结构在硬盘盒里面其实是由许许多多的圆形盘片、机械手臂、磁头与主轴马达所组成的。 3、工作情形实际的数据都是写在具有磁性物质的盘片上,而读写主要是通过在机械手臂上的磁头(head)来达成。实际运行时, 主轴马达让盘片转动,然后机械手臂可伸展让磁头在盘片上头进行读写的动作。

4、各主要部件说明(1)盘片和主马达主马达就是一个小电机,作用是让盘片转动起来。通常数据写入当然就是以圆圈转圈的方式读写啰!

对于机械硬盘,最重要的结构是这些两面涂有磁性材料的盘片,在工作时会以每分钟7200转的速度旋转。盘片的作用是记录数据,在盘片上有序的排列了很多的小颗粒材料,它们都是磁性物质,可以被永久磁化和改变磁极,这两个磁极就分别表示了计算机二进制中的0和1。由于盘片是转动后读写数据的,所以,当初设计就是在类似盘片同心圆上面切出一个一个的小区块,这些小区块整合成一个圆形,让机器手臂上的磁头去存取。这个小区块就是磁盘的最小物理储存单位,称之为扇区 (sector),那同一个同心圆的扇区组合成的圆就是所谓的磁道(track)。 扇区容量:原本硬盘的扇区都是设计成 512Byte(即0.5KB) 的容量,但因为近期以来硬盘的容量越来越大,为了减少数据量的拆解,所以新的大容量硬盘已经有 4KByte(即4KB)的扇区设计! 由于单一盘片的容量有限,因此有的硬盘内部会有两个以上的盘片喔!由于磁盘里面可能会有多个盘片,因此在所有盘片上面的同一个磁道可以组合成所谓的柱面 (cylinder)。 数据存储在盘片上的一个个扇区中。

1)1个扇区(磁道)可存储512Bytes的数据量;

2)一个平面中同一半径下的多个扇区共同组成了1个磁道;

3)一个盘片有2个盘面,每个盘面都对应一个磁头,负责读写数据;

4)一个硬盘可以有多个盘片;

5)同一半径下的多个磁道共同组成了1个柱面。

(2)磁头和机械手臂机械手臂的作用是控制来回磁头移动。磁头的作用是在盘片上读写数据。磁头通过改变盘片上小颗粒磁性物质的磁极方向来完成写入数据的功能,通过感知盘片上磁性物质的磁极方向来完成读取数据的功能。

5、扇区中是如何表示01数据的?

硬盘是在硬质盘片(一般是铝合金,以前 IBM 也尝试过使用玻璃)上涂敷薄薄的一层铁磁性材料。这些磁粉被划分成称为磁道的若干个同心圆,在每个同心圆的磁道上就好像有无数的任 意排列的小磁铁,它们分别代表着0和1的状态。当这些小磁铁受到来自磁头的磁力影响时,其排列的方向会随之改变。利用磁头的磁力控制指定的一些小磁铁方 向,使每个小磁铁都可以用来储存信息。写入时,磁头线圈上加电,在周围产生磁场,磁化其下的磁性材料;电流的方向不同,所以磁场的方向也不同,可以表示 0 和 1 的区别。读取时,磁头线圈切割磁场线产生感应电流,磁性材料的磁场方向不同,所以产生的感应电流方向也不同。

================================优美的分割线===================================

延伸:固态硬盘的存储原理(微观)

接下来来讲固态硬盘,相比较于机械硬盘里面的各种机械结构,固态硬盘就没有太多的机械机构;它主要是靠FLASH芯片来作为储存数据的介质;由主控芯片来承担数据的中转,还有调配数据储存在闪存芯片上面

FLASH芯片储存数据的方式也不是太难理解,就是FLASH芯片里面分出了很多储存单元,这些储存单元里面有电子的位置;当一颗电子的位置里面没有存放电子,它就是0;如果存放了电子,它就是1 参考:

https://zhuanlan.hu.com/p/117375905 https://www.cnblogs.com/andy9468/p/11091115.html

⑶ 数据存储在磁盘上,其原理是什么

文件在磁盘上的存储就像是一个链表,表头是文件的起始地址,整个文件并不一定是连续的,而是一个节点一个节点的连接起来的。要访问某个文件时,只要找到表头就行了。删除文件时,其实只是把表头删除了,后面的数据并没有删除,直到下一次进行写磁盘操作需要占用节点所在位置时,才会把相应的数据覆盖掉。数据恢复软件正是利用了这一点。所以,就算你误删了文件之后又进行了其他写磁盘操作,只要没有覆盖掉那些数据,都是可以恢复的。

文件之所以能被恢复,须从文件在硬盘上的数据结构和文件的储存原理谈起。新买回的硬盘需分区、格式化后才能安装系统使用。一般要将硬盘分成主引导扇区、操作系统引导扇区、文件分配表(FAT)、目录区(DIR)和数据区(Data)五部分。
在文件删除与恢复中,起重要作用的是“文件分配表”的“目录区”,为安全起见,系统通常会存放两份相同的FAT;而目录区中的信息则定位了文件数据在磁盘中的具体保存位置——它记录了文件的起始单元(这是最重要的)、文件属性、文件大小等。
在定位文件时,操作系统会根据目录区中记录的起始单元,并结合文件分配表区知晓文件在磁盘中的具体位置和大小。
实际上,硬盘文件的数据区尽管占了绝大部分空间,但如果没有前面各部分,它实际上没有任何意义。

人们平常所做的删除,只是让系统修改了文件分配表中的前两个代码(相当于作了“已删除”标记),同时将文件所占簇号在文件分配表中的记录清零,以释放该文件所占空间。因此,文件被删除后硬盘剩余空间就增加了;而文件的真实内容仍保存在数据区,它须等写入新数据时才被新内容覆盖,在覆盖之前原数据是不会消失的。恢复工具(如FinalData等)就是利用这个特性来实现对已删除文件的恢复。
对硬盘分区和格式化,其原理和文件删除是类似的,前者只改变了分区表信息,后者只修改了文件分配表,都没有将数据从数据区真正删除,所以才会有形形色色的硬盘数据恢复工具。
那么,如何让被删除的文件无法恢复呢?很多朋友说,将文件删除后重新写入新数据,反复多次后原始文件就可能找不回啦。但操作起来比较麻烦,而且不够保险。
因此,最好能借助一些专业的删除工具来处理,可以自动重写数据N次,让原始数据面貌全非 .

⑷ 简述磁盘文件目录的结构和种类

文件目录结构包含:文件名、文件内部标识、文件的类型、文件存储地址、文件的长度、访问权限、建立时间和访问时间等内容。

文件目录分为一级目录、二级目录和多级目录。多级目录结构也称为树形结构,在多级目录结构中,每一个磁盘有一个根目录,在根目录中可以包含若干子目录和文件,在子目录中不但可以包含文件,而且还可以包含下一级子目录,这样类推下去就构成了多级目录结构。

(4)文件是如何被分块存储在磁盘上的扩展阅读

文件目录是为实现“按名存取”,必须建立文件名与辅存空间中物理地址的对应关系,体现这种对应关系的数据结构称为文件目录。每一个文件在文件目录中登记一项,作为文件系统建立和维护文件的清单。

一个计算机系统中有成千上万个文件,为了便于对文件进行存取和管理,计算机系统建立文件的索引,即文件名和文件物理位置之间的映射关系,这种文件的索引称为文件目录。

采用多级目录结构的优点是用户可以将不同类型和不同功能的文件分类储存,既方便文件管理和查找,还允许不同文件目录中的文件具有相同的文件名,解决了一级目录结构中的重名问题。Windows、UNIX、Linux和DOS等操作系统采用的是多级目录结构。

⑸ 文件存储空间管理

  上篇文章介绍了文件的物理结构并介绍了文件分配的三种方式——连续分配、链接分配和索引分配。
  本文介绍操作系统对文件存储空间的管理。
本文内容

  存储空间的划分: 将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)
  在存储空间初始化时,需要将各个文件卷划分为目录区、文件区。

  有些系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷。

  空闲表法:即用一张表记录磁盘中空闲的盘块。空闲表的表项由 空闲盘的起始块号 空闲盘块数 组成。如下图所示

  如何分配磁盘块:与内存管理中的动态分区分配类似,为一个文件分配连续的存储空间。同样可以采用 首次适应算法、最佳适应算法、最坏适应算法,临近适应算法 来决定要为文件分配哪些区间。
   空闲表法适用于连续分配方式。
  例如,如果新创建的文件请求3个块,按照首次适用算法,从10号块开始有5个连续的块可以满足需求,所以把10、11、12三个块分配给文件,分配后的空闲盘块表如下

  这里以回收区前后都是空闲区为例,磁盘是第一幅图的状态,如果回收21、22号磁盘块,那么回收后的空闲盘块表如下图所示。

  空闲链表法分为两种: 空闲盘块链和空闲盘区链

  下图分别表示空闲盘块链和空闲盘区链。

  操作系统保存着 链头、链尾指针。
  如何分配:如过某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针。
  如何回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针。
  下图表示分配了3个盘块

  从上面可以看出,空闲盘块法适用于 离散分配 的物理结构。为文件分配多个盘块时可能要重复多次操作。

  操作系统保存着 链头、链尾指针
  如何分配:若某文件申请K个盘块,由于空闲盘区链将连续的盘块组成一个盘区,所以若某个盘区大小满足可以实现一次分配,同样可以采用首次适用、最佳适用等算法,从链头开始检索,按照一定的规则找到一个大小符合要求的空闲盘区分配给文件。若没有合适的连续空闲块,也可以将不同的盘区的盘同时分配给一个文件,同样分配后也需要修改相应的指针链和盘区大小等数据。

  如何回收:若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收区作为一个单独的一个空闲盘区挂到链尾。同样也需要修改链表指针和盘区大小等信息。
  下图表示按照首次适用算法分配3个盘区

  从上面可以看出,空闲盘区链对 离散分配、连续分配 都适用。为一个文件分配多个盘块时 效率更高

  位示图:磁盘内存被划分为一个个磁盘块,可以用二进制位对应一个盘块。“0”代表盘块空闲,“1”代表盘块已分配。位示图一般用连续的“字”来表示,下图中一个字的字长是16位,字中的每一位对应一个盘块。因此可以用(字号,位号)对应一个盘块号。

  如何分配:若文件需要K个块,①顺序扫描位示图,找到K个相邻或不相邻的“0”;②根据字号、位号算出对应的盘块号,将相应的盘块分配给文件;③将相应的位设置为“1”。

  如何回收:①根据回收的盘块号计算出对应的字号、位号;②将相应的二进制位设置为“0”。

  从上面可以看出:位示图法对 连续分配和离散分配 都适用。

  空闲表法、空闲链表法不适用大型文件系统,因为空闲表或空闲联保可能过大。UNIX系统中采用了 成组链接法 对磁盘空闲块进行管理。这是将上述两种方法相结合的而形成的一种空闲管理方法。
  文件卷的目录区中专门用一个磁盘块作为 超级块 ,当系统启动时需要将 超级块读入内存 。并且要保证与外存中的“超过块”的数据一致。

  内存的分配过程:分配过程是从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格,若该盘块号已是栈底(即第一个盘块),这是当前栈中最后一个可分配的盘块号。由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此,不能直接将它分配掉,需要将它记录的下一组信息保存下来,所以比须调用磁盘读过程,将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。然后,再分配一相应的缓冲区(作为该盘块的缓冲区)。最后,把栈中的空闲盘块数减1 并返回。

  下面举例说明
  如果此时新建一个文件需要一个磁盘块,那么此时第一组有100个空闲块,所以是足够分配的,将栈顶的盘块号即201号盘块对应的盘块分配出去,如下图

  如果此时又创建一个新的文件,需要99个磁盘块,就需要将剩下的99个盘块全部分配出去,但是此时300号盘块记录了下一组信息,如果分配出去,信息就是丢失,所以需要将300号盘块从外存(磁盘)读入内存,将300号盘块记录的信息,写入空闲盘块号栈,然后才能将这99块空闲块分配出去。具体过程如下图所示

  
  内存的回收过程:在系统回收空闲盘块时,须调用盘块回收过程进行回收。它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加 1 操作。当栈中空闲盘块号数目已达 100 时,表示栈已满,便将现有栈中的100 个盘块号记入新回收的盘块中,再将其盘块号作为新栈底。

  以分配的第一个图为例,201盘块被分配出去了,如果此刻有个文件被删除了,其占用的盘块是199号,系统需要回收这个盘块,发现此时空闲盘块号栈中记录空闲块数为99,直接将盘块号记录栈顶,将空闲盘块数加1即可。

  如果此时又有一个文件被删除了,其占用的盘块是190,此时空闲盘块号数已经达到100了,就需要将现在空闲盘块栈中信息记入新回收的块中。