我在跑Ubuntu,并想找出UUID
特定文件系统(不是分区)的。我知道我可以使用e2label /dev/sda1
来找出文件系统标签,但似乎没有类似的方法来查找UUID
。
答案1
另一个可能可用并且效果很好的命令是'块'。它是 e2fsprogs 包的一部分。其用法示例:
查找数据/dev/sda1:
topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
显示所有分区的 UUID 数据:
topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"
以更易于阅读的格式显示所有分区的 UUID 数据:(注意:在较新的版本中,blkid -L
具有不同的含义,blkid -o list
应改用)
topher@crucible:~$ sudo blkid -L
device fs_type label mount point UUID
-------------------------------------------------------------------------------
/dev/sda1 ext3 / 727cac18-044b-4504-87f1-a5aefa774bda
/dev/sdc ext3 /home 467c4aa9-963d-4467-8cd0-d58caaacaff4
仅显示 /dev/sda1 的 UUID,不显示其他任何内容:
topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
答案2
仅适用于 GPT 分区磁盘
在 GPT 格式的磁盘上,每个分区都分配有一个 GUID,这是 UUID 的一种形式,尽管可能不是原始发帖人所指的。因此,这个答案对原始提问者来说可能没什么帮助。不过,我认为有一个重要的区别需要注意。
获取 GPT 格式磁盘上分区 1 的 GUID/dev/sda,以及它的分区标签等等:
sudo sgdisk -i 1 /dev/sda
或全部:
ls -l /dev/disk/by-partuuid
要使用位于特定分区上的文件系统根目录进行引导,您可以使用以下 Linux 内核参数语法:
root=PARTUUID=87654321-4321-4321-abcd-123456789012
在这种情况下,您可以仅指定 UUID 的开头 — 足以保证唯一性。此参数更原始,内核可以在其启动过程的早期理解。
它们之间在语义上有区别:
磁盘包含分区,分区包含文件系统,文件系统包含目录和文件。对于某些设置和操作系统,还有更多层。
GUID UUID 和相关标签指的是分区,而不是分区的内容。同一磁盘上的新分区或新磁盘上的分区将具有新的 GUID UUID。同一分区可能在某一天保存一个文件系统,而在另一天保存另一个文件系统。它只存在于 GPT 格式的磁盘中,而不存在于旧式分区磁盘中。这里通常没有比指定root=/dev/sda1
或更多的实用功能root=8:1
。
其他当前答案指的是文件系统在某些包含分区中。如果将文件系统作为一个整体复制到另一个分区或硬盘,该值保持不变。此 UUID 可用于查找移动的文件系统。因此,这可能对大多数人来说更有意义。Linux 内核参数root=UUID=87654321-4321-4321-a567-123456789012
指的是此。
我相信root=LABEL=
并由root=UUID=
早期的用户空间实现,前几天我在系统上看到的 init 代码将这些参数转换为/dev/disk/by-uuid和/dev/disk/按标签(我相信链接是由udev在我的系统的用户空间中)。
答案3
执行此操作的脚本清理方式适用于任何类型的文件系统,方法是:
lsblk -no UUID <device-containing-FS>
或者,给定挂载点(或其内的任何文件):
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
输出是 UUID、整个 UUID 以及仅 UUID。
答案4
这似乎对我有用:
sudo dumpe2fs /dev/sda1 | grep UUID