UUID

简介:

转自  http://blog.chinaunix.net/uid-26495963-id-3150576.html   

获取设备的UUID的方法(Linux系统中):

1)# blkid /dev/sda1 (不是root用户需要sudo)
/dev/sda1: LABEL="/axs3" UUID="298d198d-aa60-48af-a9f4-638f8f274afa" SEC_TYPE="ext2" TYPE="ext3"

2) # tune2fs -l /dev/sda1 |grep 'UUID'
298d198d-aa60-48af-a9f4-638f8f274afa

3)# ls -l /dev/disk/by-uuid/ |grep sda1 |awk '{print $8}'
298d198d-aa60-48af-a9f4-638f8f274afa

4)#scsi_id -p 0x80/0x83 -s /block/sda1    应该只对SCSI设备有效。

5)# dumpe2fs /dev/sda1 |grep 'UUID'
dumpe2fs 1.39 (29-May-2006)
Filesystem UUID:       298d198d-aa60-48af-a9f4-638f8f274afa
这个命令不建议使用,要是分区比较大,耗时还是比较长的

6)# vol_id /dev/sda1 |grep 'UUID'
ID_FS_UUID=298d198d-aa60-48af-a9f4-638f8f274afa
ID_FS_UUID_ENC=298d198d-aa60-48af-a9f4-638f8f274afa
 

UUID是什么?


UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标 准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在 生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没 有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长

A universally unique identifier (UUID) is an identifier standard used in software construction, standardized by the Open Software Foundation (OSF) as part of the Distributed Computing Environment (DCE). The intent of UUIDs is to enable distributed systems to uniquely identify information without significant central coordination. In this context the word unique should be taken to mean "practically unique" rather than "guaranteed unique". Since the identifiers have a finite size it is possible for two differing items to share the same identifier. The identifier size and generation process need to be selected so as to make this sufficiently improbable in practice. Anyone can create a UUID and use it to identify something with reasonable confidence that the same identifier will never be unintentionally created by anyone to identify something else. Information labeled with UUIDs can therefore be later combined into a single database without needing to resolve name conflicts.

A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation's (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.

 上面说的到在grub中写到的UUID的的好处是什么呢?

这样做和使用/dev/sda5这种直接引用分区的方法的一个优点就是,当硬盘中增加了新的分区,或者分区的顺序改变后,仍然能够保证系统加载分区到正确的加载点。

这 对于swap分区尤为重要,如果硬盘分区顺序改变,而fstab对swap分区编号做响应的调整,是不是会把其他分区给作为swap哪?结果是很可怕的, 这个分区上的数据恐怕就要不保了。通过在/dev/disk/uuid,这里的uuid列表实际上是一些symbol link文件,系统可以保证针对每一个分区生成一个唯一的编码,增加了系统的稳定性。


UUID具有以下涵义:

    经由一定的算法机器生成
为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。UUID的复杂特性在保证了其唯一性的同时,意味着只能由计算机生成。

    非人工指定,非人工识别
UUID是不能人工指定的,除非你冒着UUID重复的风险。UUID的复杂性决定了“一般人“不能直接从一个UUID知道哪个对象和它关联。

    在特定的范围内重复的可能性极小
UUID的生成规范定义的算法主要目的就是要保证其唯一性。但这个唯一性是有限的,只在特定的范围内才能得到保证,这和UUID的类型有关(参见UUID的版本)。

UUID是16字节128位长的数字,通常以36字节的字符串表示,示例如下:

3F2504E0-4F89-11D3-9A0C-0305E82C3301

其中的字母是16进制表示,大小写无关
GUID(Globally Unique Identifier)是UUID的别名;但在实际应用中,GUID通常是指微软实现的UUID。

UUID的版本

UUID具有多个版本,每个版本的算法不同,应用范围也不同。
首先是一个特例--Nil UUID--通常我们不会用到它,它是由全为0的数字组成,如下:
00000000-0000-0000-0000-000000000000

UUID Version 1:基于时间的UUID
基 于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与 此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替 MAC地址--Java的UUID往往是这样实现的(当然也考虑了获取MAC的难度)。

UUID Version 2:DCE安全的UUID
DCE(Distributed Computing Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID在实际中较少用到。

UUID Version 3:基于名字的UUID(MD5)
基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。

UUID Version 4:随机UUID
根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的,但狗屎运通常会在不经意中到来。

UUID Version 5:基于名字的UUID(SHA1)
和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。

UUID的应用

从 UUID的不同版本可以看出,Version 1/2适合应用于分布式计算环境下,具有高度的唯一性;Version 3/5适合于一定范围内名字唯一,且需要或可能会重复生成UUID的环境下;至于Version 4,我个人的建议是最好不用(虽然它是最简单最方便的)。
通常我们建议使用UUID来标识对象或持久化数据,但以下情况最好不使用UUID:
    映射类型的对象。比如只有代码及名称的代码表。
    人工维护的非系统生成对象。比如系统中的部分基础数据。
对 于具有名称不可重复的自然特性的对象,最好使用Version 3/5的UUID。比如系统中的用户。如果用户的UUID是Version 1的,如果你不小心删除了再重建用户,你会发现人还是那个人,用户已经不是那个用户了。(虽然标记为删除状态也是一种解决方案,但会带来实现上的复杂 性。)



本文转自 wdy198622 51CTO博客,原文链接:http://blog.51cto.com/weimouren/1792906

相关文章
|
6月前
|
人工智能 容灾 专有云
阿里云亮相2025可信云大会,获中国信通院多项权威认证
2025年7月22-23日,由中国信息通信研究院、中国通信标准化协会联合主办的“2025可信云大会”在北京举行。本届大会以“云智融合,可信未来”为主题,汇聚业内专家、头部企业、行业代表等超300人参会,共同探讨人工智能与云计算融合发展的新趋势。 作为国内云计算领域的技术引领者,阿里云在本届大会获得多项权威认证及行业认可,并全面分享在智算服务、一云多芯、可运营云等领域的创新实践,为政企客户打造AI时代的智能化新引擎。
672 0
|
8月前
|
SQL 监控 安全
网站安全管理的必要性与实践
在数字化浪潮席卷全球的今天,网站已成为企业展示形象、开展业务的重要窗口。然而,随着网络技术的飞速发展,网站安全问题也日益凸显,遭受攻击、数据泄露、服务中断等安全事件频发,给企业带来巨大的经济损失和声誉风险。
122 2
|
9月前
|
Kubernetes 调度 异构计算
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
485 85
|
消息中间件 人工智能 弹性计算
《文档智能 & RAG让AI大模型更懂业务》解决方案评测
一文带你了解《文档智能 & RAG让AI大模型更懂业务》解决方案的优与劣
407 13
|
存储 Kubernetes Ubuntu
使用 ezctl 工具部署和管理 Kubernetes 集群
使用 ezctl 工具部署和管理 Kubernetes 集群
1584 0
使用 ezctl 工具部署和管理 Kubernetes 集群
|
JSON API 数据格式
App Inventor 2 天气预报App开发 - 第三方API接入的通用方法
通过调用第三方天气api,填入必要的参数,通过Web客户端请求url。返回json格式的数据结果,使用AppInventor2解析json结果,显示到App上即可。
521 5
|
存储 安全 编译器
跟着iLogtail学习无锁化编程
锁是解决这些问题的传统方法,而无锁化编程是一种更高级但复杂的技术,它能够在某些情况下提供更优的性能和可扩展性。正确选择和实现适合应用场景的并发策略,是高效多线程编程的关键。本文由作者带着大家一起学习无锁化编程。
|
机器学习/深度学习 数据采集 存储
全自动化机器学习建模!效果吊打初级炼丹师! ⛵
全自动化机器学习建模!效果吊打初级炼丹师!本文汇总了常见开源库,PyCaret、H2O AutoML、TPOT、Auto-sklearn、FLAML、EvalML、AutoKeras、Auto-ViML、AutoGluon、MLBox,一起用起来吧!
3188 1
全自动化机器学习建模!效果吊打初级炼丹师! ⛵
|
自然语言处理 JavaScript 前端开发
MFTCoder 重磅升级 v0.3.0 发布,支持 Mixtral 等更多模型,支持收敛均衡,支持 FSDP
今天,我们对MFTCoder进行重磅升级,比如对Mixtral这个开源MoE的SOTA的多任务微调的支持;再比如我们提供了之前论文中提到的收敛均衡技术:Self-Paced Loss。 MFTCoder已适配支持了更多的主流开源LLMs,如Mixtral、Mistral、Deepseek、 Llama、CodeLlama、Qwen、CodeGeeX2、StarCoder、Baichuan2、ChatGLM2/3、GPT-Neox等。以Deepseek-coder-33b-base为底座,使用MFTCoder微调得到的CodeFuse-Deepseek-33B在HumaneEval测试中pass
340 0