操作系统 引导块和坏块
操作系统负责磁盘管理的几个其他特性,例如磁盘初始化、引导块或从磁盘引导,以及坏块。引导块是硬盘、软盘、光盘或其他数据存储设备上的一个区域,它包含由计算机系统内建固件加载到随机存取内存(RAM)中的机器码。
而坏块是计算机磁盘驱动器或闪存内存上无法使用的扇区,原因是磁盘表面的物理损坏或闪存内存晶体管故障。
操作系统中的引导块是什么
当计算机启动或重新启动以获取一个实例时,它需要一个初始程序来运行。这个初始程序被称为 引导程序 ,它必须初始化系统的所有方面,例如:
- 首先,初始化CPU寄存器、设备控制器、主内存,然后启动操作系统。
- 引导程序在磁盘上找到操作系统内核并加载到内存中运行。
- 最后跳转到初始地址开始操作系统的执行。
引导程序存储在只读存储器(ROM)中。这个位置很方便,因为ROM不需要初始化,并且固定在处理器上启动或重置时可以开始执行的位置。由于ROM是只读存储器,它无法受到计算机病毒的感染。问题在于改变此引导代码需要改变ROM和硬件芯片。这就是为什么系统在引导ROM中存储一个小型引导加载程序的原因,它的工作是从磁盘中引入一个完整的引导程序。
完整的引导程序可以很容易地更改,新版本会写入磁盘。完整的引导程序存储在磁盘上一个固定位置的 “引导块” 中。具有引导分区的磁盘称为 引导磁盘 或 系统磁盘 。
在引导ROM中,代码指示磁盘控制器将引导块读入内存(此时没有加载设备驱动程序),然后开始执行该代码。完整的引导程序比引导ROM中的引导加载程序更复杂,因为它可以从磁盘上的非固定位置加载整个操作系统,并启动操作系统运行。
引导块的工作原理是什么
让我们通过Windows 2000中的引导过程的示例来理解这个问题。
Windows 2000将其引导代码存储在硬盘的第一个扇区中。下图显示了Windows 2000中的从磁盘引导。
- 此外,Windows 2000允许将硬盘分成一个或多个分区。这一个分区被标识为 引导分区 ,其中包含操作系统和设备驱动程序。
- 在Windows 2000中,启动过程是通过运行存储在系统ROM内存中的代码开始的。
- 这段代码允许系统直接从主引导记录或MBR中读取代码。
- MBR还包含了列出硬盘分区的表,以及指示从系统启动的分区的标记。
- 一旦系统确定了引导分区,它会从内存中读取第一个扇区,也称为 引导扇区 。随后继续加载各种系统服务的过程。
操作系统中的坏块是什么
坏块是存储介质上一个不再可靠用于存储和检索数据的区域,因为它已经完全损坏或损坏。坏块也被称为 坏扇区 。
我们知道磁盘有活动部件并且有很小的公差。它们容易发生故障。当故障完全时,需要更换磁盘,并将其内容从备份介质恢复到新磁盘。更频繁地,一个或多个扇区变为有缺陷。
坏块的类型
操作系统中有两种类型的坏块,如下所述:
- 物理坏块: 是由存储介质的损坏引起的。
- 逻辑坏块: 当操作系统无法从扇区中读取数据时发生。
例如,当循环冗余检查(CRC)或纠错代码(ECC)与磁盘读取的数据不匹配时,就会发生逻辑坏块。
坏块的原因
存储驱动器在出厂时可能带有在制造过程中形成的缺陷块。在离开工厂之前,带有坏块的设备被标记为有缺陷。这些坏块会被映射到可用的额外存储单元。
设备的物理损坏也会导致坏块,因为操作系统无法从损坏设备中访问数据。将笔记本电脑摔落、灰尘和自然磨损也会损坏硬盘驱动器的盘片。
当存储器晶体管故障时,会对固态驱动器造成损害。存储单元也可能随着时间变得不可靠,因为一个单元中的NAND闪存基底在一定数量的编程-擦除循环之后变得无法使用。
固态驱动器(SSD)上的擦除过程需要通过闪存芯片传输许多电荷。这会使将浮动栅晶体管与闪存硅衬底分离的氧化层退化,并增加位错误率。驱动器的控制器可以使用错误检测和纠正机制来修复这些错误。但是,在某个点上,错误可能会超过控制器的纠正能力,导致单元变得不可靠。
软件问题会引起软坏扇区。例如,如果计算机意外关机,硬盘在写入块的过程中也会关闭。由于这个原因,该块可能包含的数据与CRC检测错误代码不匹配,然后被识别为坏扇区。
坏块的工作原理
这些坏块有多种处理方式,但具体取决于 磁盘 和 控制器 。对于某些带有IDE控制器或简单磁盘的磁盘,坏块是手动处理的。
- 第一种策略是在格式化磁盘时 扫描磁盘 来查找坏块。任何发现的坏块都会被标记为不可用,以便文件系统不分配它们。如果块在正常操作过程中出现问题,必须手动运行特殊程序(Linux坏块命令)来搜索坏块并将其标记为不可用。
- 更高级的磁盘能够更智能地恢复坏块。控制器的工作是 维护坏块列表 。该列表在出厂时通过低级格式化初始化,并在磁盘寿命期间进行更新。
低级格式化保留了对操作系统不可见的备用扇区。最后,控制器会逻辑上用备用扇区替换每个坏扇区。这个过程也被称为 扇区替代和转发 。
示例
在操作系统中,典型的坏块事务遵循以下步骤:
- 假设操作系统要读取逻辑块80。
- 现在,控制器将计算EEC,假设它发现块是坏的,然后向操作系统报告请求的块是坏的。
- 每当系统下次重新启动时,使用特殊命令,它将告诉控制器要用备用扇区替换此扇区。
- 将来,每当请求块80时,控制器会将请求转换为替换扇区的地址。
坏块的替换
控制器的重定向可能会使操作系统的磁盘调度算法的任何优化失效。因此,大多数磁盘被格式化为在每个柱面和备用柱面提供几个备用扇区。每当坏块重新映射时,控制器会尽可能使用同一柱面的备用扇区。否则,还会使用备用柱面。
一些控制器使用备用扇区来替换坏块。还有另一种技术来替换坏块,即 扇区滑移 。
例如, 假设逻辑块20变为损坏,并且第一个可用的备用扇区跟在扇区200之后。然后扇区滑移开始重新映射。所有从20到200的扇区,都向下移动一格。将扇区200复制到备用区域,然后将扇区199复制到扇区200,然后将扇区198复制到扇区199,依此类推,直到将扇区21复制到扇区22。通过这种方式,滑移扇区释放出了扇区21的空间,以便将扇区20映射到它。
坏块的替换不是自动的,因为坏块中的数据通常会丢失。在软件错误触发的过程中,会复制块数据,并将该块 转移或滑移 。无法恢复的硬件错误将导致您的所有数据丢失。使用该块的任何文件必须进行修复,这需要手动干预。
坏块管理
修复受坏块影响的HDD文件的最佳方法是覆盖原始文件。这将导致硬盘重新映射坏块或修复数据。
坏块管理对于提高NAND闪存驱动器的可靠性和耐用性至关重要。所有更改都必须写入新块,原始块中的数据必须标记为删除。
- 一旦闪存驱动器填满,控制器必须在写入新数据之前清除标记为删除的块。此后,它通过将好的数据复制到新的块来 consolida 好数据。这个过程需要额外的写入来 consolida 好数据,导致写放大,实际的写入次数超过了请求的次数。写放大可以降低闪存驱动器的性能和寿命。
- 闪存供应商使用许多技术来控制写放大。其中之一,被称为垃圾回收,涉及通过释放先前写入的块来主动 consolida 数据。这些重新分配的扇区可以减少每次写操作需要擦除整个数据块的需要。
- 供应商还使用数据压缩和数据重复等数据减少技术,以最小化在驱动器上写入和擦除的数据量。此外,固态硬盘的接口可以帮助减少写放大。串行ATA的TRIM命令和SAS的UNMAP命令可以识别不再使用的数据块并擦除。这种方法最大程度地减少了垃圾回收,并释放了驱动器的空间,从而提高了性能。