天天看點

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}'

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

繼續閱讀