2010年5月27日 星期四

[Linux] 什麼是UUID

瀏覽數
來源: http://blog.xuite.net/cpshisc/blog/22037044

首先先解釋一下什麼是UUID
UUID,Universally Unique Identifier,通用唯一識別碼。
這是有點類似md5、或者hash(雜湊)的東西,是用來對某一組資料作數學運算,而求得由英文與數字,搭配連接號所產生的唯一可以辨識這組資料的字串。

從 前的Grub (或其他開機引導程式,目前Windows的Boot Manager就是這樣用),是利用磁碟內的的Jumper和分割區順序來判斷由哪個分割區啟動。ex: (hd0,1) = 編號零的硬碟中編號一的分割區,但是這樣會有個小問題,如果新接了一顆硬碟,而更動了Jumper,這樣硬碟的順序就會改變,而bootloader不知 道你已經改了它,所以還是會傻傻的從錯誤的地方開機,導致開機失敗,雖然這種問題不難修,但是久了也會惹人厭,於是就產生了用 UUID 識別分割區的辨識方法,這邊的應用,就是使用硬碟分割區的特徵 (比方說容量大小、建立日期等等),產生出唯一可正確辨識該分割區的字串組。

在 Linux內用一個資料夾 (也就是/dev/disk/by-uuid),以 UUID 為連結名稱,再經由 軟連結 (Soft Link) 的方式,連結至真正的硬碟,這樣因為這組資訊是獨一無二的,只要開機時對分割區再進行一次演算,就可以知道真正的開機碟是哪一個,而不會發生因為 Jumper更動,而開機失敗的情況。

查看 UUID
方法1:
blkid -s UUID
/dev/sda1: UUID="4ED009FFD009EE51"
/dev/sda5: UUID="1B29-07E3"
/dev/sdb1: UUID="6b7b02b8-f551-4b17-87a6-b693470a5401"
/dev/sdb5: UUID="9fea1110-86d2-46d6-bf47-f09b25680416"
方法2:
ls -l /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 10 2010-05-26 19:47 1B29-07E3 -> ../../sda5
lrwxrwxrwx 1 root root 10 2010-05-26 19:47 4ED009FFD009EE51 -> ../../sda1
lrwxrwxrwx 1 root root 10 2010-05-26 19:47 6b7b02b8-f551-4b17-87a6-b693470a5401 -> ../../sdb1
lrwxrwxrwx 1 root root 10 2010-05-26 19:47 9fea1110-86d2-46d6-bf47-f09b25680416 -> ../../sdb5

變更 UUID
Ext2/Ext3/Ext4
要設定 UUID 可以使用命令「tune2fs -U UUID 裝置檔案」,例如把 /dev/sda1 的UUID重設:
tune2fs -U 51f7e9a4-5154-4e29-a7a6-208417290b85 /dev/sda1

-U 的參數如果為 random 表示直接產生一個隨意的新 UUID:
tune2fs -U random /dev/sda1

-U 的參數如果為 time 表示直接依當前時間產生一個新的 UUID:
tune2fs -U time /dev/sda1

-U 的參數如果為 clear 表示清除檔案系統的 UUID:
tune2fs -U clear /dev/sda1

 

沒有留言: