我正在运行Ubuntu,并且想找出UUID
特定文件系统(而非分区)的。我知道我可以使用它e2label /dev/sda1
来查找文件系统标签,但是似乎没有类似的方法来查找UUID
。
我正在运行Ubuntu,并且想找出UUID
特定文件系统(而非分区)的。我知道我可以使用它e2label /dev/sda1
来查找文件系统标签,但是似乎没有类似的方法来查找UUID
。
Answers:
另一个可用的命令对此也很好用,它是“ blkid”。它是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
blkid
,就可以准确地得到我想要的东西,但不能完全满足我的要求。(无论如何,我都接受它,因为我确信我会经常使用它)
blkid -L
现在的等价命令是blkid -o list
; 该-L
选项已更改为-L label
查找使用指定标签的设备。
blkid
。感谢您提及。
blkid
;我一直都做完ls -l /dev/disk/by-uuid
。在Gentoo blkid
上sys-apps/util-linux
仅适用于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=
是由早期用户空间实现的,前几天我在系统上看到的init代码将这些参数转换为/ 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#n183
-i1
或。-i 1
-i:1
在任何类型的文件系统上都可以使用的脚本清洁方式是:
lsblk -no UUID <device-containing-FS>
或者,给定安装点(或其中的任何文件):
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
输出是UUID,整个UUID,仅是UUID。
blkid
@ christopher-cashell的答案要好,因为您不需要成为root。对于挂载点或文件,最好执行以下操作:lsblk -no UUID $(findmnt -n -o SOURCE --target <file>)
。
findmnt -n -o SOURCE --target ~
给出:/dev/mapper/vg_svelte-home[/@home]
lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)
应删除存在的子卷。
对ext2 / ext3 / ext4执行此操作的最简单方法是:
/sbin/tune2fs -l /dev/sda1
Couldn't find valid filesystem superblock.
推荐的方法是
sudo vol_id -u /dev/sda2
有关使用UUID的更多信息,请参阅本文(来自ubuntu帮助,但适用于使用UUID的任何Linux发行版)。
如对此问题的注释中所述,vol_id可能不在您的路径中。在ubuntu上,它在/ sbin中,因此上面的方法可以正常工作。对于软呢帽,它似乎需要
sudo /lib/udev/vol_id -u /dev/sda2
如果其他发行版在其他地方有vol_id,请发表评论,然后将其添加到此答案中。
/sbin/vol_id
到/lib/udev/vol_id
这似乎为我工作:
sudo dumpe2fs /dev/sda1 | grep UUID
假设您想要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的示例输出:
[mihailim@home ~]$ 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更人为设计,但它不需要root特权,可在任何2005以后的内核上运行,并且依赖于任何Linux发行版中的工具,这些工具默认情况下在任何用户的路径。
您还可以使用它来打印所有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' \;
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中,只有一个调用,以获得一个标识机器的号码。它不在乎硬件是否发生更改或软件更新是否发生,因此我不知道它们的操作方式。如果主板发生更改,则数字发生了更改,因此我认为他们将其隐藏在那里。这是罕见的。