linux下如何获取系统UUID

说实话,我在Linux环境下折腾UUID的时候最麻烦的就是搞不清哪个UUID是严重的。
你提到的这两种方法各有其奇妙的用途。
让我详细告诉你我的经历。

我们先来说一下dmidecode。
记得有一次,我在旧机器上安装系统时,硬盘是新的,但UUID不匹配。
纠结了半天,发现dmidecode读取的BIOS UUID是错误的。
该命令确实需要 sudo 权限,但幸运的是,直接读取硬件信息比编写随机 UUID 可靠得多。
但请注意,如果运行的是虚拟机,比如运行在KVM上,有时dmidecode读取到的UUID是虚拟层创建的,与物理机无关。
我当时正在测试容器场景,所以就踩了这个坑,最后改用了blkid。

内核随机UUID的技巧非常有趣。
之前我有一个项目需要动态磁盘挂载。
我没有在每次启动时修复 UUID,而是使用 cat /proc/sys/kernel/random/uuid 来生成它。
该命令的优点是非常简单,不需要root权限,普通用户可以随便使用。
但缺点也很明显。
每次生成时都会发生变化。
如果你写了一个脚本,你必须保存它,否则它每次都会挂起。
一个小技巧是使用 tr 'A-Z' 'a-z' 将其转换为小写。
许多系统组件都识别这种格式。

对于文件系统UUID,我推荐使用blkid命令。
比如我上次调试/etc/fstab时,发现挂载点不正确。
我直接执行了blkid,输出中包含了磁盘分区UUID,一目了然。
或者直接看/dev/disk/by-uuid/目录,ln链接就给你做好了,非常省事。

这两种方法选择哪一种完全取决于您的需求。
如果要对软件进行授权,必须使用dmidecode读取硬件UUID。
即使更换硬盘并安装系统也可以做到这一点。
但如果你正在构建一个分布式集群,比如 Kubernetes,那么使用内核随机 UUID 就非常适合。
随着节点的加入和离开,UUID 会发生变化并变得更健康。

但说实话,我最近发现很多新系统都开始使用UUID-ASCII,这是用uuidgen -r生成的纯字母版本。
这个东西看上去比十六进制字符串好很多,但是兼容性可能会差一些。
为了安全,建议使用旧格式。

我自己没有运行过这个,但我记得数据在X左右,但我建议你验证一下。

linux 中文件有uuid吗

等等,去年冬天我们办公室的一台旧戴尔服务器停电了。
更换新的后,我重新启动系统,突然发现系统的UUID发生了变化。
/etc/fstab 中用于挂载硬盘的 UUID 不再正确。
经过长时间的斗争,我最终不得不手动更改fstab中的UUID。
这让我想起了 UUID。
尽管UUID看起来是简单的字符串,但它们实际上与硬件和时间相关。
例如,在我的戴尔上,更换电源板后,我的系统时间也跳了。
这真的很有趣。
UUID是如何改变的?

linux查看UUID

有一次,我在一台旧服务器上安装新软件,需要配置外部硬盘。
记得那是一个下午,服务器在机房里,周围很安静。
我坐在电脑前,手指在键盘上飞快地打字。

突然遇到一个问题:我需要知道硬盘的UUID,但又不想重启系统去检查。
我有点紧张,因为我还有其他任务要完成。
等等,我想到了一个不用重启的办法。

我打开终端并输入命令 blkid -s UUID,屏幕上立即显示一长串 UUID。
仔细找了一会,找到了我想要的硬盘UUID。
然后输入 ls -l /dev/disk/by-uuid 果然看到了对应的硬盘设备。

当时我松了一口气,因为我知道了硬盘的UUID,可以继续安装软件了。
然而我突然想到,如果以后再遇到同样的情况,我能把这些命令写下来吗?这样,如果以后遇到问题,可以更快地解决。