- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MBR 分区表中偏移量为 8 字节的字段用于存储分区开头的 LBA 地址。当没有足够的 CHS 坐标时,引入 LBA 寻址来寻址更大的磁盘。但是在引入 MBR 支持时,这样的磁盘还不存在。因此问题来了:偏移量为 8 字节和 12 字节的字段最初包含什么?它们是为进一步的结构开发保留的还是有其他目的?
我也对 LBA-48 的实现感兴趣。 MBR中分配了32位用于存储LBA地址,那么48位地址如何存储在32位中?
最佳答案
两篇维基百科文章提供了有用的细节:https://en.wikipedia.org/wiki/Master_boot_record和 https://en.wikipedia.org/wiki/Logical_block_addressing .其他有用的来源是 The Starman's "All the Details of many versions of both MBR" .
在 MBR 中有 "Partition table entries" ;对于与 LBA 兼容的条目,它们具有 CHS(3 字节)和 LBA(4 字节)地址。 CHS 给出了两个地址,一个用于分区的第一个扇区,另一个用于分区的最后一个扇区。 LBA地址是第一个扇区的LBA地址和该分区的扇区总数。所以这两种类型的地址都不是针对字节而是针对扇区,并且Wikipedia says “过去认为扇区大小固定为 512 (29) 字节”。
使用 4 个字节,我们可以将最大 2 TB 的磁盘大小编码为 4294967295(2 的 32 次幂减 1)乘以每个扇区 512 字节(2147483647.5 千字节)。
LBA-48 不能存储在官方支持的 MBR 分区条目中,因为 48 位是 6 个字节,而 MBR(和第 5 个逻辑分区的 EBR)只有 4 个字节来存储 LBA 开始和结束扇区地址。 LBA-48 与 GUID GPT 一起使用- https://en.wikipedia.org/wiki/Logical_block_addressing#LBA48
The current 48-bit LBA scheme was introduced in 2003 with the ATA-6 standard,[4] raising the addressing limit to 2^48 × 512 bytes, which is exactly 128 PiB or approximately 144.1PB. ... However, the common DOS style Master Boot Record (MBR) partition table only supports disk partitions up to 2 TiB in size. For larger partitions this needs to be replaced by another scheme, for instance the GUID Partition Table (GPT) which has the same 64-bit limit as the current INT 13h Extensions.
(在一些类似 wiki 的随机站点中有 proposed incompatible MBR format for LBA48,但它不适用于大多数期望正确的经典 MBR 的操作系统。)
LBA 于 1996 年引入,“在 Windows 95B 和 DOS 7.10 中以支持大于 8 GB 的磁盘”,如 the Wikipedia 所述. 1999 年授予的相关 IBM 专利(可能在 2019 年 10 月到期):Address offset feature for a hard disk drive, US6415383
关于 MBR 的前 LBA 时代知之甚少,但在 DOS 2.0分区表的总大小为 64 字节,有 4 个分区,每个分区 16 字节。它是编码在 MBR parsing code in DOS2 中的大小:
An Examination of the Assembly Code
062C 83C610 ADD SI,+10 ; Checking the next entry...
; (10h = 16 bytes per entry)
即使是 Starman 的 MBR 资源也没有关于为什么为每个分区表条目分配 16 个字节的原因的信息。
我发现了 AST Research(现已转让给三星)1990-1992 年的早期专利,System for multiple access hard disk partitioning, US5136711A它给出了图 2(图 3)中的分区表布局,听起来非常像 LBA:
Each of the partition identifier segments 133, 134, 135, and 136 comprises 16 bytes of disk space making up a partition table 140 (FIG. 3) containing identification information for the corresponding disk partition.
分区表 140 在图像中定义为:
而在AST 1992专利分区表的正文中描述为:
The partition table 140 comprises a boot indicator byte 141 to identify whether the corresponding partition segment P4 is a bootable partition or a non-bootable partition. Only one partition of P4, P3, P2, and P1 may be bootable at a given time. The partition table further comprises a physical starting head number byte 142, a physical starting cylinder and physical starting sector segment 144, a system indicator byte 148 which identifies the type of operating system, a physical ending head number byte 150, a physical ending cylinder and physical ending sector segment 152, a boot sector address segment 154, and a sector number segment 156 which indicates the number of sectors in the partition P4 as is well understood in the art.
因此,在我的假设中,字段 +8 可能用于指向分区的引导扇区(它可能不在第一个扇区?),而 +12 可能用于检查分区大小计算。但是在DOS2 code没有实际读取 +8 和 +12 字段。它们可能只是保留在 IBM MBR 中,并在 AST 专利中重用,用于某些类似 LBA 的用途。
1991 年的 PCMag (PC Mag 10 Sep 1991, page 410) 还说 4 字节字段已经用于类似 LBA 的扇区地址:
Each record in the partition table is 16 bytes, including 4 each for the starting sector and the number of sectors. In addition, one byte is reserved for the partition byte.
与 1992 年 Mark Minasi 的书“硬盘生存指南”相同,至少最后一个 +12 字段(分区大小),第 279 页(谷歌书籍中有一些片段):
Getting this number to fix a boot record is simple: It is in the MBR. The last four bytes of each partition table entry is the partition length in secotrs.
关于filesystems - MBR组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59761244/
我尝试从我的树莓派中提取 MBR(在 SDCARD 上加载了 raspbian),就像我在任何 Linux 机器上所做的那样。 dd if=/dev/ of=mbr.bin bs=512 count=
我搜索了很多主题: http://www.developsigner.com/blog/2009/05/28/multi-bitrate-live-streaming-with-fmle-adobe-
我正在尝试构建我自己的 C 程序,它基本上像 fdisk vdisk 'p' 命令一样工作。我只想读取磁盘的前 512 个字节,查找分区的开头 (0x1BE),然后读取分区类型、名称、大小等。我不确定
我有这段代码,它是项目源代码的一部分。此代码查找 MBR 类型:GRUB 或 LILO,并相应地设置一个标志。 奇怪的是在SLES 10-SP1(SUSE Linux Enterprise Serve
对于一个项目,我想直接从 DOS 调用第一个硬盘上的 MBR。我编写了一个小型汇编程序,该程序将 MBR 加载到内存中的 0:7c00h 处,并进行远跳转。我已将实用程序放在 (DOS) 可启动软盘上
维基百科对 Memory Data Registers 给出了类似的定义和 Memory Buffer Registers . 然而,其有关处理器寄存器的页面区分了两者,但没有说明是什么使它们不同(
我是 C 语言新手,正在尝试创建一个取证工具。到目前为止我有这个。它读取一个 dd 文件,该文件是 fat16 MBR 的转储。我能够正确读取某些字节,但不能正确读取某些字节。 我需要帮助的是 Siz
我有一个现有的 SQL 查询,它使用 lat, lng 和大圆公式来计算特定房源周围 1 公里半径内的所有房源。 它工作得很好,但我试图使用 MySQL 地理空间扩展并使用 MBR 矩形而不是圆形来加
我获得了一个 3.8GB 的 SD 卡镜像,可以将其刷入 4GB SD 卡,以便在 RaspBerry PI 开发板上启动自定义版本的 Raspian 操作系统。它有一个 FAT32 主分区,其中
我已经使用 MBRWithin 函数很多次了。突然我在谷歌地图上注意到这个 POINT(101.11857 4.34475) 超出了我指定的地理围栏,但它仍然在 mysql 中给出 1 的值,是否需要
概述 Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Li
我试图了解 vmware bios 如何在加载之前找到 MBR。 在物理硬盘中这很容易 - MBR 位于第一个扇区。 但是 .. 在 VM 中会发生什么? 我创建了 2 个 VM - 在第一个 vmd
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
我正在帮助一位 friend 为他的操作系统编写引导加载程序。我已经为他写了一个引导参数 block 。这似乎是有效的,但是,当我使用 DD 将它刻录到 1.44MiB 软盘镜像的第一个扇区时,它不能
内存缓冲寄存器(MBR)和指令寄存器(IR)有什么区别?据我所知,两者都存储从内存中获取的指令,并且都是特殊用途寄存器。 最佳答案 不同之处在于它们在计算机处理器指令周期的取指部分工作。 MBR 存储
有没有人有任何示例代码显示如何识别系统启动硬盘,以及在 windows xp 和 vista 中从硬盘读取/写入 mbr? 我知道可以使用 createfile。但我不知道如何正确识别哪个设备是引导设
我浏览了 CreateFile 文档...仍然想知道我应该如何使用 P/Invoke 来调用 CreateFile 并读取引导扇区,以显示 .MBR? 这部分有引用代码吗?提前致谢! 最佳答案 要扩展
我在调用 DeviceIoControl 函数读取可移动设备的 MBR 时出错。错误代码为 5。这意味着访问被拒绝!我使用的是 windows xp sp2。 #include "stdafx.h"
我开发应用程序并用 Java 编写。我的应用程序需要访问 USB 闪存的 MBR 及其扇区的内容。我想过使用 JNI:在 Java 中调用方法,它们的实现是在 C++ 中,只使用标准 C 函数,没有
尝试使用 将 MBR 转换为 GPT mbr2gpt 在 Windows 10 build 1703 中引入,但失败了 mbr2gpt: Too many MBR partitions found,
我是一名优秀的程序员,十分优秀!