GPT 或 MBR:我怎么知道?

gol*_*cks 118 hard-disk gpt mbr

如何判断我的硬盘是使用MBR还是GPT格式布局的?

Gra*_*eme 125

您可以使用parted -l来确定分区表的类型。例如:

$ sudo parted -l
Model: ATA TOSHIBA THNSNS25 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  32.2GB  32.2GB  primary  ext4         boot
 2      32.2GB  256GB   224GB   primary  ext4


Model: ATA Hitachi HDT72101 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  32.2GB  32.2GB  primary  ext4            boot
 2      32.2GB  996GB   964GB   primary  ext4
 3      996GB   1000GB  4295MB  primary  linux-swap(v1)
Run Code Online (Sandbox Code Playgroud)

Partition Table字段显示我msdos在两个磁盘上都使用了MBR 分区表(Linux 和 Windows 仍然常用的分区表)。从该man页面parted可以创建(并因此有望识别)以下类型的分区表(或更广泛的“磁盘标签”):

bsd
dvh
gpt    - this is a GPT partition table
loop   - this is raw disk access without a partition table
mac
msdos  - this is a standard MBR partition table
pc98
sun
Run Code Online (Sandbox Code Playgroud)

更新

值得添加用于列出单个分区的命令,因为如果没有一些知识,这并不明显,parted如果有多个驱动器,查找所需的数据可能会很痛苦。因为/dev/sda你会这样做:

parted /dev/sda print
Run Code Online (Sandbox Code Playgroud)

  • `parted /dev/sda p` 也可以。 (3认同)

gol*_*cks 41

在 linux 上,您可以通过gdisk任何发行版都可用的工具进行检查。

gdisk -l /dev/sda
Run Code Online (Sandbox Code Playgroud)

这里,/dev/sda是设备节点的物理驱动器的,而不是一个分区(/dev/sda1/dev/sda2等是分区)。

如果您看到包含以下内容的内容:

***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************
Run Code Online (Sandbox Code Playgroud)

你有一个 MBR 风格的磁盘。别担心,这并没有造成任何伤害。

如果您没有看到此警告,则您使用的是 GPT 磁盘或混合 GPT/MBR磁盘。后者主要用于不支持 GPT 的 MS Windows 双启动版本的 Apple 机器。 gdisk将表明这一点:

Found valid GPT with hybrid MBR; using GPT
Run Code Online (Sandbox Code Playgroud)

它们也可用于需要支持两种样式的其他情况。

  • @orion 我不建议这样做,因为诸如 `fdisk` 或 `cfdisk` 之类的某些版本的工具可能支持 GPT,因此不会显示错误。 (2认同)

Ouk*_*uki 19

由于没有指定操作系统,这里是FreeBSD的处事方式。

一切都是通过gpart命令完成的(GEOM 分区器的缩写 - 与 GNU 无关)。

一个简单的方法gpart show会向您显示所有磁盘的所有可用分区,但您可以指定设备以更精确地查看其中一个:

  • 带有MBR(又名“msdos”)和BSD分区方案的旧分区布局(BSD 系统通常需要 2 级分区,除非使用完整磁盘):

    $gpart show

    =>      63  67108801  ada0  MBR  (32G)
            63  67108545     1  freebsd  [active]  (32G)
      67108608       256        - free -  (128k)
    
    =>       0  67108545  ada0s1  BSD  (32G)
             0   2097152       2  freebsd-swap  (1.0G)
       2097152  65011393       1  freebsd-ufs  (31G)
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用GPT 的现代分区布局:

    $gpart show /dev/ada2

    =>       34  976773101  ada2  GPT  (465G)
             34          6        - free -  (3.0k)
             40        128     1  freebsd-boot  (64k)
            168   67108864     2  freebsd-swap  (32G)
       67109032  901775360     3  freebsd-zfs  (430G)
    
    Run Code Online (Sandbox Code Playgroud)

要了解更多信息,一切都在gpart手册中


Rak*_*kib 11

$ sudo fdisk -l 

Disk /dev/sda: 119.2 GiB, 128035676160 bytes, 250069680 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: 0x987c1a05


Device     Boot   Start       End   Sectors   Size Id Type
/dev/sda1  *       2048    999423    997376   487M 83 Linux
/dev/sda2       1001470 250068991 249067522 118.8G  5 Extended
/dev/sda5       1001472 250068991 249067520 118.8G 8e Linux LVM
Run Code Online (Sandbox Code Playgroud)

查看磁盘标签类型: dos。如果它显示 dos,则表示它是 MBR 模式,否则是 GPT 模式


Sté*_*las 9

随着udisksLinux上:

$ sudo /lib/udev/udisks-part-id /dev/sda
using device_file=/dev/sda syspath=/sys/devices/pci0000:00/0000:00:0b.0/ata1/host0/target0:0:0/0:0:0:0/block/sda, offset=0 ao=0 and number=0 for /dev/sda
Entering MS-DOS parser (offset=0, size=500107862016)
MSDOS_MAGIC found
found partition type 0xee => protective MBR for GPT
Exiting MS-DOS parser
Entering EFI GPT parser
GPT magic found
partition_entry_lba=2
num_entries=128
size_of_entry=128
Leaving EFI GPT parser
EFI GPT partition table detected
UDISKS_PARTITION_TABLE=1
UDISKS_PARTITION_TABLE_SCHEME=gpt
UDISKS_PARTITION_TABLE_COUNT=4
Run Code Online (Sandbox Code Playgroud)

上面,我有一个混合 GPT+MS-DOS 分区的驱动器。在这种情况下,Linux 内核会忽略 MS-DOS 分区,这就是udisks将 UDISKS_PARTITION_TABLE_SCHEME 设置为 gpt 的原因。

该 udisks-part-id 工具用于填充 udev 数据库。因此,如果您已经udisks安装,即使作为非特权用户,您也应该能够查询该信息:

$ udevadm info -q property -n sda | grep UDISKS_PARTITION_TABLE_SCHEME
UDISKS_PARTITION_TABLE_SCHEME=gpt
Run Code Online (Sandbox Code Playgroud)

  • 请注意,无论是否存在混合 GPT+MBR,您都会得到类似的输出。GPT 需要一个伪 MBR,其中包含一个类型为“0xee”的完整磁盘分区。在混合中,这是一个带有一个“0xee”分区的普通 MBR(如果 MBR 数据与 GPT 数据不同步,则可能会出现重大问题)。 (2认同)

don*_*sti 1

v. 2.33 及更高版本开始lsblk,可以通过以下方式仅打印分区表类型util-linux

lsblk /dev/nvme0n1 -dno pttype
Run Code Online (Sandbox Code Playgroud)
总蛋白

d省略子项/从属项,n省略标头并o仅打印指定的字段。
它非常方便,因为它不需要对输出进行后处理,也不需要 root 访问权限。