我一直认为 GPT 是将分区表写入磁盘的方式,您可以随意执行此操作。但是当我调用
fdisk -l
对于我的外部驱动器(通过 USB 端口连接),所有分区都被删除,它显示警告
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdb: 500.1 GB, 500074283008 bytes
255 heads, 63 sectors/track, 60797 cylinders, total 976707584 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
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 976707583 488353791+ ee GPT
如您所见,它显示System = GPT
。我想:好吧,可能是我在玩分区时没有完全删除 GPT 分区/dev/sdb
。所以我使用创建了一个新的 MBR 分区fdisk
(fdisk 说“分区 1 类型为 Linux,大小为 465.7 GiB”),fdisk -l
再次调用并得到
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdb: 500.1 GB, 500074283008 bytes
60 heads, 62 sectors/track, 262555 cylinders, total 976707584 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
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 976707583 488352768 83 Linux
这是我不明白的。fdisk
创建了旧式非 GPT 分区,但仍将驱动器视为 GPT 类型。
这是什么意思?这是否意味着 GPT 也是磁盘硬件的某些属性?
答案1
在此背景下,主引导记录 (MBR)和GUID 分区表 (GPT)是两种不同类型的分区表-- 保存分区信息的数据结构 -- 可以存储在磁盘上。(“MBR” 也可用于指 BIOS 模式引导加载程序或磁盘上的第一个扇区,但这些含义与您的问题无关。)您的问题大部分与 MBR 与 GPT 使用的数据布局有关:
- MBR 使用磁盘的第一个扇区,并且如果存在扩展分区和逻辑分区,则使用可以位于磁盘上任何位置的附加扇区。
- GPT 使用磁盘的前 34 个扇区和磁盘的最后 33 个扇区(假设扇区为 512 字节并且分区表大小为默认;如果不满足这些假设,则使用的扇区数可能会有所不同)。
因此,GPT 使用的磁盘空间比 MBR 多得多(但与现代磁盘的总容量相比,这仍然是微不足道的磁盘空间),并且 GPT 使用 MBR 的关键第一个扇区。因此,GPT 的一部分是保护性 MBR,它看起来很像常规 MBR;但保护性 MBR 由单个 type-0xEE 分区组成,该分区覆盖整个磁盘或 2TiB(以较小者为准)。保护性 MBR 的理念是让不支持 GPT 的工具认为整个磁盘都在使用中,以防止使用较旧的仅支持 MBR 的分区工具意外破坏磁盘。
您使用的Linux 版本fdisk
并不完全支持 GPT —— 它知道足够的信息来查找 GPT 数据结构并在找到时向您发出警告。但它对 GPT 的了解程度不足以准确报告 GPT 数据结构,而只是保护性 MBR。 的较新版本可以更彻底地处理 GPT 磁盘。其他工具也可以,例如 libparted( 、 GParted 和其他一些工具fdisk
的核心)和我自己的 GPT fdisk( 、和)。parted
gdisk
sgdisk
cgdisk
您从 GPT 磁盘开始。然后您从磁盘中删除了分区;但这并没有删除 GPT 数据结构——它只是创建了将磁盘标识为空的数据结构。由于fdisk
不理解 GPT 数据结构,它无法区分充满有效 GPT 分区的磁盘和具有 GPT 数据结构但没有定义分区的磁盘。使用fdisk
创建新的 MBR,然后用定义(在您的情况下)单个 Linux 分区的 MBR 替换 GPT 的保护性 MBR。但请注意,这会使 GPT 数据结构的 66 个扇区保持完整。(不过,其中 33 个扇区位于您定义的分区的末尾,因此它们可能会被文件系统数据结构或文件内容覆盖。)由于fdisk
查找这些 GPT 数据结构,它继续抱怨检测到 GPT。
从 GPT 转换为 MBR 时,最好使用基于 libparted 的工具;此工具足以清除旧的 GPT 数据结构。或者,您可以使用我的gdisk
,它将 MBR 数据结构转换为 GPT 等效结构。fdisk
您使用的旧版本显然不会这样做。(我不知道新fdisk
版本会做什么。)Windows 的工具(如旧版fdisk
)会留下旧的 GPT 数据。
目前,从技术上讲,您的磁盘是合法的 MBR 磁盘。但是,有些工具会对此提出异议fdisk
,Mygdisk
会询问您是否要将其视为 MBR 或 GPT。这是为了在有人意外擦除保护性 MBR 时帮助恢复;但如果您不知道自己在做什么,它可能会导致问题。其他一些工具可能会以未知的方式出现故障。为了避免问题,您可以考虑fixparts
在磁盘上使用 My。此程序安装在大多数 Linux 发行版的gdisk
或gptfdisk
包中,它可以擦除不需要的 GPT 数据结构。但是,有一个重要的警告:由于您的新分区与磁盘末尾的 GPT 数据结构重叠,因此fixparts
将擦除之内分区,如果运气不好,可能会导致文件或文件系统损坏。更好的选择可能是从末尾缩小文件系统(少 33 个扇区),然后然后运行fixparts
它。
除非您有令人信服的理由使用 MBR,否则我建议现在使用 GPT。较旧的操作系统(如 DOS 和 Windows XP)需要 MBR,但大多数或所有现代操作系统(包括 Windows 7 及更高版本)、任何甚至是最新的 Linux、大多数或所有当前 BSD 以及在基于 Intel 的 Mac 上运行的任何 OS X/macOS 都支持 GPT。GPT 比 MBR 具有适度的优势,例如备份数据结构、用于检测错误的校验和以及命名分区。从 GPT 转换为 MBR(如您所做)表明,进行这种切换可能会导致问题,或者至少是混乱。当然,为了获得最大的兼容性,MBR 更胜一筹,这在某些可移动媒体上可能很重要;但一般来说,GPT 是更优越的分区表。