it-swarm.cn

如何找到文件系统的UUID

我正在运行Ubuntu,并且想找出特定文件系统(而不是分区)的UUID。我知道我可以使用e2label /dev/sda1来查找文件系统标签,但是似乎没有类似的方法来找到UUID

135
Brad Gilbert

另一个可用的命令对此也很好用,它是“ blkid”。它是e2fsprogs软件包的一部分。用法示例:

在/ dev/sda1上查找数据:

[email protected]:~$ Sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

显示所有分区的UUID数据:

[email protected]:~$ 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应该改为使用)

[email protected]:~$ 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,而不显示其他任何内容:

[email protected]:~$ Sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
169
Christopher Cashell

仅适用于GPT分区磁盘

在GPT格式化的磁盘上,每个分区都分配了一个GUID,这是UUID的一种形式,尽管可能不是原始张贴者所指的。因此,此答案可能对原始发问者没有太大帮助。尽管如此,我相信还是有一个重要的区别。

要获取GPT格式化的磁盘/ dev/sda上分区1的GUID=,以及其分区标签,依此类推:

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。如果将文件系统整体复制到另一个分区或硬盘,则该值保持不变。此UUID在查找移动的文件系统时很有用。因此,这对大多数人而言可能更相关。 Linux内核参数root=UUID=87654321-4321-4321-a567-123456789012是指此。

我相信 root=LABEL=root=UUID=是由早期的用户空间实现的,前几天我在系统上看到的初始化代码将这些参数转换为/ dev/disk/by-uuid和/ dev/disk/by-label(我相信这些链接是由udev在用户空间中创建的在我的系统上)。

[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n18

11
John S Gruber

在任何类型的文件系统上都可以使用的脚本清洁方式是:

lsblk -no UUID <device-containing-FS>

或者,给定安装点(或其中的任何文件):

lsblk -no UUID $(df -P <file> | awk 'END{print $1}')

输出是UUID,整个UUID,仅是UUID。

8
Tom Hale

对ext2/ext3/ext4执行此操作的最简单方法是:

/sbin/tune2fs -l /dev/sda1
5
Eddie

推荐的方法是这样做

Sudo vol_id -u /dev/sda2

有关使用UUID的更多信息,请参见 本文 (来自ubuntu帮助,但适用于使用UUID的任何Linux发行版)。

如对此问题的注释中所述,vol_id可能不在您的路径中。在ubuntu上,它在/ sbin中,因此上面的方法可以正常工作。对于Fedora,它似乎需要

Sudo /lib/udev/vol_id -u /dev/sda2

如果其他发行版在其他地方有vol_id,请发表评论,然后将其添加到此答案中。

3
Hamish Downer

这似乎为我工作:

Sudo dumpe2fs /dev/sda1 | grep UUID
3
Marcus Junius Brutus

假设您想要sda1的UUID,可以尝试执行以下操作:

for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done

相应地调整sda1。要获取所有分区的UUID,请删除粗线和剪切点,例如:

for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" ; done

我的桌面上sda1的示例输出:

[[email protected] ~]$ for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sdb3 | cut -d\: -f2 | cut -d/ -f5 ; done
dc8c49f1-e2dc-46bc-ba02-013f26c85f70

编辑:请注意,此解决方案虽然比udev-> vol_id更人为设计,但是not需要root特权,它可以在任何2005年以后的内核上运行,并且依赖于任何现有的工具Linux发行版,默认情况下在任何用户的路径中。

2
Mihai Limbăşan

您还可以使用它来打印所有UUID:

for disk in /dev/disk/by-uuid/*; do 
    basename "$(readlink "$disk")"
    basename "$disk"
    echo
done

或更简单的命令,替换sda1与您要搜索的设备:

disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;

第二种方法的修改,以打印所有UUID:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;
1
kiri
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'

多年来,以上似乎适用于大多数(我发现的所有)Linux系统。我不知道它可能有缺陷。我希望获得序列号,但是...这是根文件系统的UUID。

如果有人能够获得序列号而不必是root(就像我一样)并且不安装在不同版本的Unix中不同的“异常”软件包,我将不胜感激-总是可以学到一些东西。而且我知道我正在混用东西-它是根文件系统UUID,而不是磁盘。

BTW的目的是在每台机器上生成一个无法修改的唯一编号(例如磁盘序列号和很早以前的MAC地址)。

它用于将软件编码到单个计算机上。在允许他们进行虚拟化之前,MAC地址是可以的……有些卑鄙的客户只是简单地将其MAC地址设置为一个常数(当然是在不同的网络上),而不必付钱给我。

在AIX中,只有一个调用,以获得一个标识机器的号码。它不在乎硬件是否发生更改或软件更新是否发生,因此我不知道它们的操作方式。如果主板发生更改,则数字发生了更改,因此我认为他们将其隐藏在那里。这是罕见的。

1
Eric Eberhard

您可以使用以下命令获取特定驱动器的UUID,

Sudo vol_id -u /dev/sda1

或者您可以使用它列出附加媒体的所有UUID,

ls /dev/disk/by-uuid
0
Rich Adams