AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 3132
Accepted
Brad Gilbert
Brad Gilbert
Asked: 2009-05-03 07:47:13 +0800 CST2009-05-03 07:47:13 +0800 CST 2009-05-03 07:47:13 +0800 CST

如何找到文件系统的 UUID

  • 772

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

linux partition command-line-interface
  • 12 12 个回答
  • 293573 Views

12 个回答

  • Voted
  1. Best Answer
    Christopher Cashell
    2009-05-05T11:11:48+08:002009-05-05T11:11:48+08:00

    '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
    
    • 185
  2. John S Gruber
    2014-06-24T13:55:35+08:002014-06-24T13:55:35+08:00

    仅适用于 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/sda1or更多的实用程序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#n183

    • 11
  3. Tom Hale
    2017-12-31T05:29:15+08:002017-12-31T05:29:15+08:00

    适用于任何类型的文件系统的脚本清洁方法是:

    lsblk -no UUID <device-containing-FS>
    

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

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

    输出是 UUID、整个 UUID,除了 UUID 什么都没有。

    • 9
  4. Eddie
    2009-05-03T07:57:07+08:002009-05-03T07:57:07+08:00

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

    /sbin/tune2fs -l /dev/sda1
    
    • 5
  5. Hamish Downer
    2009-05-03T08:53:09+08:002009-05-03T08:53:09+08:00

    推荐的方法是这样做

    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
  6. Marcus Junius Brutus
    2014-09-19T13:08:02+08:002014-09-19T13:08:02+08:00

    这似乎对我有用:

    sudo dumpe2fs /dev/sda1 | grep UUID
    
    • 3
  7. Mihai Limbăşan
    2009-05-03T08:22:27+08:002009-05-03T08:22:27+08:00

    假设您想要 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,请删除 greps 和 cut,例如:

    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 发行版中默认存在的工具任何用户的路径。

    • 2
  8. kiri
    2013-12-01T15:09:08+08:002013-12-01T15:09:08+08:00

    您还可以使用它来打印所有 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
  9. Eric Eberhard
    2017-03-24T17:11:50+08:002017-03-24T17:11:50+08:00
    ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'
    

    多年来,上述内容似乎适用于大多数(我发现的所有)Linux 系统。它可能有缺陷,我不知道。我更愿意获取序列号,但是……这是根文件系统的 UUID。

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

    顺便说一句,目的是为每台机器生成一个无法修改的唯一编号(就像磁盘序列号和很久以前的 MAC 地址一样)。

    它用于将软件编码到单台机器上。MAC地址很好,直到他们允许他们成为虚拟......一些低俗的客户只是将他们的MAC地址设置为一个常数(当然在不同的网络上)并避免付钱给我。

    在 AIX 中,只需一次调用即可获得一个标识机器的号码。它不关心是否发生硬件更改或软件更新,所以我不知道他们是如何做到的......如果主板改变,那么数字就会改变,所以我认为他们把它藏在那里。这是非常罕见的。

    • 1
  10. asmath
    2021-01-04T03:17:06+08:002021-01-04T03:17:06+08:00

    查找文件系统的 UUID 的最简单和最好的方法

    [root@server ~]# blkid /dev/sda1
    
    • 1

相关问题

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 是否有充分的理由在 Windows 上对磁盘进行分区?

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve