[分享]UUID

为当前最终发行版之前的所有版本提供支持
回复
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28
送出感谢: 0
接收感谢: 0

[分享]UUID

#1

帖子 flyinflash » 2007-07-25 14:36

Ubuntu下的UUID问题

UUID,全称Universally Unique Identifier

它是一个128位,16字节的值,并确保在时间和空间上唯一。它把硬件地址、时间以及随机数结合在一下起来确保其唯一性的。一般情况下,生成算法用计算机网卡的地址和一个60位的timestamp生成,时间是以100ns为时间间隔。例如,一台300PL 6862的计算机,主板集成的网卡的MAC地址为00-04-AC-2E-B7-DC,而UUID的最后六个字节也会是0004AC2EB7DC。

Ubuntu现在默认使用UUID值表示硬盘分区,在/etc/fstab中我们很容易看到:

代码: 全选

    # /etc/fstab: static file system information.
    #
    #
    proc /proc proc defaults 0 0
    # /dev/hda1
    UUID=6286feb3-3037-4893-b0f1-8c9edba3c447 / ext3 defaults,errors=remount-ro 0 1
    # /dev/hda5
    UUID=45bdb727-57db-46c2-8b33-e2dc813c0e18 /media/mydoc ext3 defaults 0 2
    # /dev/hda7
    UUID=1bfc17a2-b39c-451b-8ce8-2b3bc13bf6e8 none swap sw 0 0
    /dev/hdd /media/cdrom0 udf,iso9660 user,noauto 0 0
    /dev/ /media/floppy0 auto rw,user,noauto 0 0
在GRUB启动项中也有这样的表示,

代码: 全选

    kernel /boot/vmlinuz-2.6.20-14-generic root=UUID=6286feb3-3037-4893-b0f1-8c9edba3c447 ro 
quiet splash locale=zh_CN

与以前使用hda*相比,使用UUID的好处是只要分区大小没有调整,它的UUID值就是固定的,也就是说,即使把其他分区全删掉,也不影响这一分区的挂载。

那么,如果分区改变了怎么办?有时侯需要调整分区大小,这样它的UUID值也就发生了变化,此时需要在/etc/fstab中将该分区的UUID值修改为当前值,否则无法自动挂载。

查询分区UUID值可以使用下面的命令:

代码: 全选

    ls -al /dev/disk/by-uuid
结果是如下的形式:

总用量 0

代码: 全选

    drwxr-xr-x 2 root root 100 2007-04-06 20:09 .
    drwxr-xr-x 5 root root 100 2007-04-06 20:09 ..
    lrwxrwxrwx 1 root root 10 2007-04-06 20:09 1bfc17a2-b39c-451b-8ce8-2b3bc13bf6e8 -> ../../sda6
    lrwxrwxrwx 1 root root 10 2007-04-06 20:09 6286feb3-3037-4893-b0f1-8c9edba3c447 -> ../../sda1
    lrwxrwxrwx 1 root root 10 2007-04-06 20:09 8c6640b5-9c65-44d7-8f09-771b8c589922 -> ../../sda5
这是我的硬盘分区的UUID,可见,sda5调整大小后,UUID发生了变化,将fstab中对应的部分该掉,OK。



参考资料:
1. http://www.usbuse.com/Html/ittxmcsy/103948184.html
2. viewtopic.php?t=29692
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28
送出感谢: 0
接收感谢: 0

#2

帖子 flyinflash » 2007-07-25 14:38

代码: 全选

import java.util.UUID;
public class javaTest {
  public static void main(String[] args) {
    UUID uuid = UUID.randomUUID();
    System.out.println (uuid);
  }
}

代码: 全选

root@LF824-alice:~# javac uuidTest.java 
root@LF824-alice:~# java uuidTest
c23344a1-8181-4f76-a120-91a212fb0c2a
root@LF824-alice:~# 
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市
送出感谢: 2 次
接收感谢: 0

#3

帖子 Nile » 2007-07-25 15:34

不太明白
主板集成的网卡的MAC地址为00-04-AC-2E-B7-DC,而UUID的最后六个字节也会是0004AC2EB7DC。
那么UUID的最后几位是不是应该一样了?
事实上好像不一样啊? :?:
Thinkpad T400
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28
送出感谢: 0
接收感谢: 0

#4

帖子 flyinflash » 2007-07-25 16:23

Nile 写了:不太明白
主板集成的网卡的MAC地址为00-04-AC-2E-B7-DC,而UUID的最后六个字节也会是0004AC2EB7DC。
那么UUID的最后几位是不是应该一样了?
事实上好像不一样啊? :?:
不是所有UUID的产生都和MAC地址有关。你没有看慬,或者是这篇文章没有写好。请你用GOOGLE搜索吧。
回复

回到 “老旧版本支持”