在Linux上获取机器ID的最佳方法是什么?

39

什么是在 i386 架构的 GNU/Linux 上获取唯一机器ID的最佳实践方式?

除了 mac 地址外,还有什么好的方法吗?


MAC地址并不保证唯一性,因为它可以被更改。 - cEz
4个回答

63

根据你的内核版本,DMI信息可能可以通过sysfs获取。

尝试以下命令:

# cat /sys/class/dmi/id/board_serial
xxxxxxxxxxxxxxx
# cat /sys/class/dmi/id/product_uuid
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

或使用工具

# dmidecode -s baseboard-serial-number
...
# dmidecode -s system-uuid
...

15
在谷歌搜索“/sys/class/dmi/id/board_serial”的可用性时,我发现了http://0pointer.de/blog/projects/ids.html。 - user663896
10
所以,实际上我会使用/var/lib/dbus/machine-id - user663896
4
这似乎不太便携,因为它依赖于dbus等东西。 - Thomas M. DuBuisson
机器ID除了MAC地址外,是否有助于许可证管理? - user4271704
2
/var/lib/dbus/machine-id 可以使用 sudo 更改。 - Ivan Kolev
显示剩余3条评论

31

1
机器 ID 可能在克隆的虚拟机上相同。 - pynexj
1
但这不就是拥有一个“克隆虚拟机”的整个概念吗?它们具有相同的机器标识。在这里,虚拟机软件似乎是真正的问题,因为克隆只是一个过于简化的命令,没有指定克隆用于何种目的。 - Lothar
1
但这不就是拥有一个“克隆虚拟机”的整个概念吗?它们具有相同的机器ID。 在这里,虚拟机软件似乎是真正的问题,因为克隆只是一个过于简化的命令,没有明确指定克隆用于什么目的。 - undefined
@pynexj 在LPIC 1的准备课程中,你会学到克隆一台机器后需要更改三样东西:MAC地址、SSH主机密钥和DBUS机器ID。:-) - undefined

5
你可以使用lshal。在此之前,需要先安装hal(通过apt-get install hal或yum install hal)。这样,您就可以在没有root权限的情况下访问dmidecode的所有信息。 一个非root用户等效的方法是
# dmidecode | grep -i uuid

将会

$ lshal |grep -i system.hardware.uuid

根据您的需求,还可以提供其他相关信息。

8
如果系统上可用 lshal,这意味着已安装 hal,也就是已安装 dbus。因此只需运行 cat /var/lib/dbus/machine-id 即可。 - malat
6
从问题中可以清楚地看出用户想要生成一个永久不变的UUID。即使是"dbus/machine-id"在每次重启后也可能会改变。 - adnan kamili
1
机器ID除了MAC地址外,是否有助于许可证管理? - user4271704

0
一个简单且便携的计算自己的sysid的方法可能是将uname()、gethostid()和一些像/home或应用程序主目录(通过stat()获得)中的inode序列化为一个字符串并对其进行散列处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接