leafee98-blog/content/essays/disk-uuid-partuuid-ptuuid.md
2022-12-30 11:44:29 +08:00

59 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "磁盘的 UUID, PARTUUID and PTUUID"
date: 2022-11-18T21:58:06+08:00
tags: []
categories: []
weight: 50
show_comments: true
draft: false
---
在 Linux 中使用 `fdisk``blkid` 可以看到磁盘的几种 UUID如 UUID、PARTUUID、PTUUID下面将介绍每一种 UUID 的意义。
<!--more-->
```
# fdisk --list-details /dev/sda
Disk /dev/sda: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: WDC WD22EJRX-89B
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: BC266CC5-E480-164A-853B-875A82D7882B
First usable LBA: 2048
Last usable LBA: 3907029134
Alternative LBA: 3907029167
Partition entries starting LBA: 2
Allocated partition entries: 128
Partition entries ending LBA: 33
Device Start End Sectors Type-UUID UUID Name Attrs
/dev/sda1 4096 3907028991 3907024896 0FC63DAF-8483-4772-8E79-3D69D8477DE4 B967BEF5-A7A2-334C-A564-1360313A9BC8
# blkid --probe /dev/sda
/dev/sda: PTUUID="bc266cc5-e480-164a-853b-875a82d7882b" PTTYPE="gpt"
# blkid --probe /dev/sda1
/dev/sda1: LABEL="WDP" UUID="b9ea8994-e79c-4e79-92ea-2c97ca669023" UUID_SUB="87bbaa99-549b-43b9-98fd-55a8e896c195" BLOCK_SIZE="4096" TYPE="btrfs" USAGE="filesystem" PART_ENTRY_SCHEME="gpt" PART_ENTRY_UUID="b967bef5-a7a2-334c-a564-1360313a9bc8" PART_ENTRY_TYPE="0fc63daf-8483-4772-8e79-3d69d8477de4" PART_ENTRY_NUMBER="1" PART_ENTRY_OFFSET="4096" PART_ENTRY_SIZE="3907024896" PART_ENTRY_DISK="8:0"
```
上述输出的 UUID 可以分为以下几类:
1. 分区表唯一标识
2. 特定分区的入口标识(记录在分区表中)
3. 分区类型标识
4. 文件系统唯一标识
| UUID | 程序输出 | 作用 | 保存位置 | 备注 |
| --- | --- | --- | --- | --- |
| 分区表唯一标识 | Disk identifier 和 PTUUID | 唯一标记一块磁盘 | 分区表 | 一块磁盘只会在分区时得到这样一个标记。|
| 分区的入口标记 | `fdisk` 的 UUID 和 `blkid` 的 PART_ENTRY_UUID | 唯一标记一个分区 | 分区表 | 所以无需对文件系统格式的支持就可以获取。如使用 UUID 通过 fstab 挂载分区或通过 Linux 启动参数指定根目录时,都是使用此标记。|
| 分区类型标识 | Type-UUID 和 PART_ENTRY_TYPE | 记录了分区的类型,或者只是提示了此分区的用途 | 分区表 | 如 swap 和 Linux file system。|
| 文件系统唯一标识 | `blkid` 的 UUID | 唯一标记一个文件系统 | 文件系统的元数据中 | 需要进入分区并支持目标文件系统才能读取。如使用多块磁盘的 Btrfs 文件系统,多个磁盘分区下的此文件系统唯一标识是一致的。|
## 参考
1. https://unix.stackexchange.com/questions/375548/what-is-uuid-partuuid-and-ptuuid
2. https://en.wikipedia.org/wiki/GUID_Partition_Table