操作系统中的磁盘校验和

7 Jan 2025 | 11分钟阅读

概述

磁盘校验和在操作系统中至关重要,因为它们用于确保数据的真实性。它们是基于驱动器上的数据,使用某种独特定义的算法生成的特定值,被视为数据的一种指纹或签名。此外,这些校验和用于确保数据完整性,通过验证数据是否已损坏或更改,从而在关键任务系统中维护存储数据的可靠性和一致性。

操作系统通常使用不同的校验和技术,例如 CRC、Adler-32、MD5 和 SHA-1,以确保所需的速率、可靠性和检测到的错误数量。它们通常利用操作系统中的文件系统或磁盘管理子系统。

磁盘上的校验和可以检测数据损坏或错误,而在读取操作期间重新计算的校验和与存储的校验和不匹配,可以帮助采取措施。然而,磁盘校验和会带来性能问题,因为它们会占用读写操作的时间。为了实现最小计算开销的目标,通常首选优化技术,如校验和值的缓存或硬件加速。

总而言之,磁盘校验和是操作系统用于数据完整性检查的工具,从而为存储设备提供了额外的可靠性和健壮性。

校验和错误检测是什么意思?

校验和错误检测是一种通过检查和比较校验和值来查找数据损坏的方法。下面是详细说明:

1. 校验和计算

  • 校验和是指定算法(CRC、Adler-32 等)的结果,该算法根据数据内容生成唯一值。
  • 算法处理数据,并生成固定大小的校验和值。

2. 嵌入校验和

  • 通常,计算出的校验和会附加到数据本身,或存储在单独的位置(例如,通过哈希)。

3. 错误检测

  • 在数据传输或存储时,会根据接收到的数据计算校验和。
  • 然后将重新计算的校验和与随数据提供的校验和进行比较。
  • 两个校验和匹配表明数据在传输或存储过程中未被篡改。
  • 如果校验和值与实际数据的值不同,则表示输入数据中存在错误或损坏。

4. 错误处理

  • 校验和不匹配会导致激活错误检测机制。
  • 根据系统的设置,可以考虑不同的可能性,包括要求重新传输数据、通知用户或应用程序、尝试纠正错误或数据恢复。

5. 健壮性和可靠性

  • 具有校验和错误检测功能可为传输和存储系统增加健壮性和容错性。
  • 它用于识别由各种类型的干扰引起的问题,包括传输噪声、电磁干扰、磁盘故障、软件错误或恶意篡改。

什么是校验和算法?

校验和函数是用于派生数据校验和值的数学过程,这些校验和值可用于错误检测或数据完整性验证目的。未定义

1. CRC (循环冗余校验)

  • CRC 算法广泛应用于各个领域,例如网络协议(以太网、Wi-Fi)和数字通信存储(ZIP 文件、硬盘驱动器)。
  • 但是,存在不同的算法,如 CRC-32、CRC-16、CRC-8 等,它们可以以不同的效率检测不同的错误。

2. Adler-32

  • Adler-32 是一种校验和算法,对短数据块效率最高,例如在网络协议和文件系统(如 zlib 压缩数据)中使用。
  • 它根据数据本身生成一个 32 位校验和值。该算法的计算速度比某些其他算法快。

3. MD5 (消息摘要算法 5)

  • MD5 也是一种广泛使用的加密哈希函数,它生成一个 128 位(16 字节)的哈希值,通常表示为 32 个十六进制字符。
  • MD5 最初是为加密应用程序设计的,也用于数据完整性的校验和检查;但是,由于存在漏洞,它在加密方面不安全。

4. SHA (安全哈希算法)

  • SHA 系列算法包括由美国国家安全局 (NSA) 开发的 SHA-1、SHA-256、SHA-384 和 SHA-512。
  • SHA 算法产生不同长度的哈希值(例如,SHA-1 为 160 位,SHA-256 为 256 位)。这就是为什么它们主要用于数据完整性检查、确保签名和加密应用程序。

5. Checksum-8/16/32

  • 这些是简单的校验和算法,能够对字节数据进行求和,并进行按位操作(如果需要),以生成 8 位、16 位或 32 位校验和值。
  • 与 CRC 和加密哈希函数不同,checksum-8/16/32 的健壮性较差。尽管如此,它们仍然广泛应用于更注重简单高效错误检测而非可靠性的应用中。

6. 奇偶校验

  • 奇偶校验是一种检测计算机内存和数字传输过程中错误的简单方法。
  • 在奇偶校验中,将额外的奇偶位附加到每个数据单元,以确保数据单元(包括奇偶位)中“1”的数量为偶数(偶校验)或奇数(奇校验)。
  • 虽然它简单易用,可以检测单个比特错误,但奇偶校验不能真正用于检测多个比特错误或某种类型的错误。

这些是用于各种计算和通信系统中错误检测和数据完整性确认的典型校验和算法。选择算法时需要考虑多个因素:应用程序的要求、所需的错误检测级别、计算性能和安全性。

磁盘校验和在确保数据完整性以及检测磁盘存储上的损坏或错误方面起什么作用?

磁盘校验和是确保数据完整性和发现磁盘存储错误或错误的重​​要工具。

以下是具体方法:

1. 错误检测

磁盘校验和是一种硬件,用于在访问存储数据时识别错误和损坏。当数据写入磁盘时,会通过应用某种特定算法(例如 CRC 或 Adler-32)从数据本身计算出一个校验和值。此校验号代表数据的唯一指纹,以便与其他数据区分开来。

2. 读取操作期间的验证

在读取时,操作系统也会单独重新计算读取数据的校验和。然后将新校验和与已与数据关联的校验和进行比较。

3. 不匹配检测

如果新计算的校验和与磁盘上已存储的校验和匹配,则表示自数据写入磁盘以来未更改或损坏。另一方面,校验和不匹配表示可能出现了一些错误或数据损坏。

4. 数据完整性保证

校验和不匹配的识别是磁盘校验和和存储数据完整性监控的任务。它们作为一种确保从硬盘获取的数据与最初写入的数据相同的方法,从而提供数据的持续性和可靠性。

5. 早期错误通知

当执行读取操作且校验和不匹配时,该过程会启动错误检测方法。此机制的实现取决于系统的配置。它可能会向用户发出警报、尝试修复数据或调用数据恢复程序。

6. 防止数据损坏

磁盘校验和就像审计跟踪,可以保护数据免遭任何损坏。通过错误检测,它们有助于通过紧急干预以最大程度地减少损坏的影响来防止进一步的损坏,例如,通过从备份中恢复数据或修复目标文件。

7. 增强的可靠性

总而言之,磁盘存储增加了校验和,以提供一种容错工具,用于检测数据损坏或错误。它们对于需要最高级别数据完整性的计算机系统(如企业服务器、数据库系统和存档存储设备)来说非常出色。

如何通过校验和检测错误?

校验和检测不复杂。这只是在发送方和接收方双方对数据进行校验和值求和,然后比较这些值。以下是使用校验和检测错误的步骤指南:以下是使用校验和检测错误的步骤指南:

1. 在发送方计算校验和

  • 发送方使用校验和算法将校验和值附加到传输的数据后,有几种标准算法,如 CRC、Adler-32 等。
  • 校验和值通常在数据之后或与数据一起传输。

2. 传输带校验和的数据:2. 传输带校验和的数据

  • 发送方将其信息和由此生成的校验和发送给接收方。

3. 在接收方接收数据:3. 在接收方接收数据

  • 此时接收方收到校验和以及数据。

4. 在接收方计算校验和:4. 在接收方计算校验和

  • 当接收方收到数据时,他会使用发送方使用的相同校验和算法对收到的数据进行计算,以获得自己的校验和值。

5. 比较校验和值

  • “没有人能百分之百免疫,我们不能放松警惕”这句标志性的话强调了公众意识的紧迫性。

6. 检查匹配

  • 如果根据从发送方收到的数据重新计算的校验和值与从发送方收到的校验和值匹配,则表示数据在传输过程中可能没有错误。
  • 当收到的校验和值与预期的值不匹配时,会提醒我们传输或存储过程中可能存在数据错误。

7. 错误检测

  • 如果校验和不匹配,则表明数据包含损坏的文件或错误。
  • 根据具体应用程序和系统预期,接收方可能会应用错误检测机制来解决已检测到的错误、无效传输、通知用户或应用程序、纠错或数据恢复。

8. 可选:纠错

  • 在某些情况下,可能会采用纠错技术来自动纠正检测到的错误,尤其是在设计用于可靠数据传输的系统中,例如 TCP/IP 等通信协议。
  • 通过遵循这些步骤,校验和可以有效地检测传输或存储数据中的错误或损坏,有助于确保各种应用程序(包括网络、文件传输、存储系统等)的数据完整性和可靠性。

校验和错误检测示例

现在,让我们考虑一个使用假设的检查方法,校验和可以检测到一个非常小的错误。假设发送方通过通信通道向接收方发送“HELLO”。在发送消息之前,发送方会运行一个校验和算法来计算消息中的字符数。基于此,计算校验和值并用于检查消息的真实性(例如,将 ASCII 值相加)。以下是分步示例:

Disk Checksum in the Operating System

1. 消息准备

  • 发送方:“HELLO”

2. 校验和计算

  • 发送方通过将消息中字符的 ASCII 值相加来计算校验和
  • “H”的 ASCII 值 = 72
  • “E”的 ASCII 值 = 69
  • “L”的 ASCII 值 = 76
  • “L”的 ASCII 值 = 76
  • “O”的 ASCII 值 = 79
  • 校验和 = 72 + 69 + 76 + 76 + 79 = 372

3. 传输

  • 发送方将消息“HELLO”及其计算出的校验和 (372) 发送给接收方。

4. 接收

  • 接收方收到消息“HELLO”和校验和 (372)。

5. 校验和验证

  • 接收方使用相同的算法(ASCII 值之和)重新计算收到的消息的校验和值。
  • “H”的 ASCII 值 = 72
  • “E”的 ASCII 值 = 69
  • “L”的 ASCII 值 = 76
  • “L”的 ASCII 值 = 76
  • “O”的 ASCII 值 = 79
  • 重新计算的校验和 = 72 + 69 + 76 + 76 + 79 = 372

6. 比较

  • 接收方将重新计算的校验和 (372) 与从发送方收到的校验和 (372) 进行比较。

7. 错误检测

如果计算出的校验和等于收到的校验和 (372),接收方认为消息在传输过程中没有错误。当校验和不同时,这表明在传输或接收过程中可能出现了错误;这会导致调用错误检测机制。

例如,在传输过程中,消息“HELLO”中的一个字符出现了意外损坏,导致收到的消息变为“H*LLO”。在这种情况下,如果校验和是伪造的,接收方重新计算的校验和将不匹配收到的校验和,这意味着存在校验和错误,必须立即处理。

解释在读写操作过程中计算和验证磁盘校验和的过程。

1. 写操作期间的校验和计算

  • 在连续存储时,操作系统会为给定的数据计算一个校验和。此校验和的计算是通过使用校验和算法(如 CRC(循环冗余校验)、Adler-32)进行的,该算法可能由操作系统子系统或您的文件系统选择。
  • 校验和算法按照特定过程处理数据,根据初始数据生成预定义长度的校验和值。
  • 然后将计算出的校验和与打算存储在磁盘上的数据一起保存。例如,包括将校验和添加到数据本身,或者如果不支持某种实现,则将其单独存储在数据之外。

2. 存储带校验和的数据

  • 在计算校验和时,数据在写入磁盘时会嵌入其中,而不仅仅是校验和部分。目的是将校验和与相关数据关联起来,然后后者可用于验证读取操作的正确性。

3. 读取操作期间的校验和验证

  • 每当从磁盘加载数据时,无论是由操作系统进行还是由客户端进行,校验和值也会被加载。
  • 在读取数据时,操作系统会使用与写操作相同的校验和函数重新计算读取数据的校验和值。
  • 最后一步是将重新计算的校验和与与数据一起收集的存储校验和进行比较。

4. 比较和错误检测

  • 如果重新计算的校验和与存储的校验和匹配,则表示数据在从磁盘检索到计算内存记录之间没有中断和干扰。这表明数据已正确读取,并且在读取操作过程中没有发生任何变化或故障。
  • 相反,如果校验和之间存在差异,则表示数据存在某种损坏,这可能发生在存储或传输过程中。这会触发检测功能,该功能可能会将数据标记为已泄露或损坏。

5. 错误处理

  • 操作系统可以在硬件层面通过控制器卡在控制器卡级别提供所需的动作,具体取决于系统设置。这可能包括通知用户或应用程序事件,并启动以下任何操作:修复数据、重新传输或恢复数据。

结论

磁盘校验和在操作系统中对于保持数据有序和确保数据完整至关重要。它们是使用 CRC、Adler-32、MD5 和 SHA-1 等算法生成的唯一校验和,它们充当签名或指纹。这些验证将用于将新检索的数据与存储的数据进行比较,以便检测任何可能的错误或数据损坏。它有助于及时检测错误并及时选择纠正措施。另一方面,磁盘校验和可能是可行但成本高昂的方法,因为它对计算资源有影响。缓存校验和值或硬件加速只是减少运行时间的优化技术的一些例子。最终,磁盘校验和在关键系统中起着重要作用,以提高存储系统的弹性和可靠性。