UUID

 创建asm磁盘的几种方式

创建asm方式很多主要有以下几种
1、Faking方式
2、裸设备方式
3、udev方式(它下面有两种方式)
  3.1 uuid方式
  3.2 raw方式(裸设备方式)
4、asmlib方式(oracleasm)

 

UUID:全局唯一标识符。Linux会将系统内所有的设备给予一个第一无二的标识符,可以拿来作为挂载或是使用这个设备或文件系统

使用UUID挂载设备的原因

自动分配的设备名称并非总是一致的,它们依赖于启动时内核加载模块的顺序。如果你在插入了USB盘时启动了系统,而下次启动时又把它拔掉了,
就有可能导致设备名分配不一致。所以,使用UUID对于挂载各种设备非常有好处,它支持各种各样的卡。

采样主要来自oracle asm集群
[root@shdb02 src]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.4 (Santiago)

查看磁盘分区UUID的四种方法

1、使用/dev/disk/by-uuid目录
[root@shdb02 src]# ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 Dec 15 10:55 536d0f3a-b072-466c-a13a-96d09cf4e7ee -> ../../dm-0
lrwxrwxrwx 1 root root 10 Dec 15 10:55 bcea691d-47c4-49d4-b9bc-eb366bc246f0 -> ../../dm-1
lrwxrwxrwx 1 root root 10 Dec 15 10:55 cf0f3592-a2dc-497c-be07-d4f1e0d42253 -> ../../sda1

2、使用blkid命令
[root@shdb02 ~]# blkid -s UUID /dev/sda1
/dev/sda1: UUID="bec50c5d-090c-47ad-83d5-25328b4ab7ec"
3、使用tune2fs命令
[root@shdb02 src]# tune2fs -l /dev/sda1 |grep 'UUID'
Filesystem UUID: cf0f3592-a2dc-497c-be07-d4f1e0d42253
4、使用dumpe2fs命令
[root@shfpdb02 src]# dumpe2fs /dev/sda1 |grep 'UUID'
dumpe2fs 1.41.12 (17-May-2010)
Filesystem UUID: cf0f3592-a2dc-497c-be07-d4f1e0d42253

磁盘的uuid

[root@shdb02 src]# scsi_id -g -u -d /dev/sdaa
369ce37410023334d07db5f9700000019
[root@shdb02 src]# blkid -s UUID /dev/sdaa //为空

 [root@shdb02 src]# blkid -s UUID /dev/sda
 sda sda1 sda2 sdaa sdab sdac sdad
 [root@shdb02 src]# blkid -s UUID /dev/sdab

 

[root@shdb02 src]# scsi_id -g -u -d /dev/sda1  //没有结果
 [root@shdb02 src]# blkid -s UUID /dev/sda1

 /dev/sda1: UUID="cf0f3592-a2dc-497c-be07-d4f1e0d42253"


 [root@shdb02 src]# blkid -s UUID /dev/sda2
 /dev/sda2: UUID="nY2JaS-cCZf-qn6E-f4XS-i6Ph-Bf3Y-DxLWF9"

blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。

[root@shfpdb02 src]# blkid
/dev/mapper/vg_bjfpbdb2-lv_root: UUID="536d0f3a-b072-466c-a13a-96d09cf4e7ee" TYPE="ext4" 
/dev/sda1: UUID="cf0f3592-a2dc-497c-be07-d4f1e0d42253" TYPE="ext4" 
/dev/sdaa: TYPE="oracleasm" 
/dev/sdab: TYPE="oracleasm" 
/dev/sda2: UUID="nY2JaS-cCZf-qn6E-f4XS-i6Ph-Bf3Y-DxLWF9" TYPE="LVM2_member" 
/dev/mapper/vg_bjfpbdb2-lv_swap: UUID="bcea691d-47c4-49d4-b9bc-eb366bc246f0" TYPE="swap" 
/dev/sdb: TYPE="oracleasm"   //对oracle的asm盘并不识别
/dev/sdc: TYPE="oracleasm" 
/dev/sdd: TYPE="oracleasm" 
/dev/sde: TYPE="oracleasm" 
/dev/sdf: TYPE="oracleasm" 
/dev/sdg: TYPE="oracleasm" 
/dev/sdh: TYPE="oracleasm" 
/dev/sdi: TYPE="oracleasm" 
/dev/sdk: TYPE="oracleasm" 
/dev/sdl: TYPE="oracleasm" 
/dev/sdm: TYPE="oracleasm" 
/dev/sdn: TYPE="oracleasm" 
/dev/sdo: TYPE="oracleasm" 
/dev/sdp: TYPE="oracleasm" 
/dev/sdq: TYPE="oracleasm" 
/dev/sdr: TYPE="oracleasm" 
/dev/sds: TYPE="oracleasm" 
/dev/sdt: TYPE="oracleasm" 
/dev/sdu: TYPE="oracleasm" 
/dev/sdv: TYPE="oracleasm" 
/dev/sdw: TYPE="oracleasm" 
/dev/sdx: TYPE="oracleasm" 
/dev/sdy: TYPE="oracleasm" 
/dev/sdz: TYPE="oracleasm" 
/dev/sdac: TYPE="oracleasm" 
/dev/sdad: TYPE="oracleasm" 
//注意利用scsi_id就可以查看sdaa的uuid
[root@shdb02 src]# scsi_id -g -u -d /dev/sdaa
369ce37410023334d07db5f9700000019

 [root@shfpdb02 src]# ls /dev/asm*
 /dev/asm-diskaa /dev/asm-diskb /dev/asm-diskf /dev/asm-diskk /dev/asm-disko /dev/asm-disks /dev/asm-diskw
 /dev/asm-diskab /dev/asm-diskc /dev/asm-diskg /dev/asm-diskl /dev/asm-diskp /dev/asm-diskt /dev/asm-diskx
 /dev/asm-diskac /dev/asm-diskd /dev/asm-diskh /dev/asm-diskm /dev/asm-diskq /dev/asm-disku /dev/asm-disky
 /dev/asm-diskad /dev/asm-diske /dev/asm-diski /dev/asm-diskn /dev/asm-diskr /dev/asm-diskv /dev/asm-diskz

  [root@shdb02 src]# /sbin/scsi_id -g -u -d /dev/asm-diskaa
  369ce37410023334d07db5f9700000019

  上面红色的部分uuid相同

查看指定设备(如/dev/sda1)所采用的文件系统类型

[root@shdb02 src]#  blkid /dev/sda1
/dev/sda1: UUID="cf0f3592-a2dc-497c-be07-d4f1e0d42253" TYPE="ext4" 

[root@shfpdb02 disk]# lsblk -f | grep sda
sda
├─sda1 ext4 cf0f3592-a2dc-497c-be07-d4f1e0d42253 /boot
└─sda2 LVM2_member nY2JaS-cCZf-qn6E-f4XS-i6Ph-Bf3Y-DxLWF9
sdaa oracleasm
sdab oracleasm
sdac oracleasm
sdad oracleasm

查看系统中的 UUID

[root@shdb02 src]# blkid -s UUID
/dev/mapper/vg_bjfpbdb2-lv_root: UUID="536d0f3a-b072-466c-a13a-96d09cf4e7ee"
/dev/sda1: UUID="cf0f3592-a2dc-497c-be07-d4f1e0d42253"
/dev/sda2: UUID="nY2JaS-cCZf-qn6E-f4XS-i6Ph-Bf3Y-DxLWF9"
/dev/mapper/vg_bjfpbdb2-lv_swap: UUID="bcea691d-47c4-49d4-b9bc-eb366bc246f0"

//下面查询到的信息是一样的

[root@shdb02 src]# blkid -s UUID /dev/sda1
/dev/sda1: UUID="cf0f3592-a2dc-497c-be07-d4f1e0d42253"

[root@shfpdb02 src]# dumpe2fs /dev/sda1 |grep 'UUID'
dumpe2fs 1.41.12 (17-May-2010)
Filesystem UUID: cf0f3592-a2dc-497c-be07-d4f1e0d42253

[root@shfpdb02 src]# blkid -po udev /dev/sda1
ID_FS_UUID=cf0f3592-a2dc-497c-be07-d4f1e0d42253
ID_FS_UUID_ENC=cf0f3592-a2dc-497c-be07-d4f1e0d42253
ID_FS_VERSION=1.0
ID_FS_TYPE=ext4
ID_FS_USAGE=filesystem

知道设备的 UUID 而想要知道它的设备名

[root@shdb02 src]# blkid -U cf0f3592-a2dc-497c-be07-d4f1e0d42253
/dev/sda1

[root@shfpdb02 disk]# findfs UUID=cf0f3592-a2dc-497c-be07-d4f1e0d42253
/dev/sda1

查看系统分区挂载(boot启动分区)

[root@shdb02 src]# cat /etc/fstab
# /etc/fstab
# Created by anaconda on Tue Aug  9 01:27:51 2016
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_bjfpbdb2-lv_root /                       ext4    defaults        1 1
UUID=cf0f3592-a2dc-497c-be07-d4f1e0d42253 /boot                   ext4    defaults        1 2
/dev/mapper/vg_bjfpbdb2-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults,size=129024M        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

 

 

获取Linux系统uuid

[root@shdb02 disk]# dmidecode -s system-uuid | tr 'A-Z' 'a-z'
# smbios implementations newer than version 2.7 are not
# fully supported by this version of dmidecode.
b7edc800-480c-11e6-9463-1ae02e74e39c

将原有UUID写会到分区

[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sr0
sda
├─sda1 ext4 ccca3795-04f7-4628-83e1-f083ee2a4d9f /boot
├─sda2 swap 10d6b119-b0ca-4a3f-9d35-401570f4ded9 [SWAP]
└─sda3 LVM2_member PSb8Pz-uzQR-P5Oj-VEbd-uRCB-O9pC-98GdWa
└─VolGroup-LogVol00 (dm-0) ext4 c5d5a7ee-1e22-476f-8044-debe57e10ff0 /
[root@localhost ~]# uuidgen | xargs tune2fs /dev/sda2 -U
tune2fs 1.41.12 (17-May-2010)
tune2fs: Bad magic number in super-block while trying to open /dev/sda2
Couldn't find valid filesystem superblock.
You have new mail in /var/spool/mail/root
[root@localhost ~]# tune2fs
tune2fs 1.41.12 (17-May-2010)
Usage: tune2fs [-c max_mounts_count] [-e errors_behavior] [-g group]
[-i interval[d|m|w]] [-j] [-J journal_options] [-l]
[-m reserved_blocks_percent] [-o [^]mount_options[,...]]
[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]
[-M last_mounted_dir] [-O [^]feature[,...]]
[-E extended-option[,...]] [-T last_check_time] [-U UUID]
[ -I new_inode_size ] device

//生成uuid
[root@localhost ~]# uuidgen
baaf8f5f-2060-4599-a982-652a98755b47
//设定
[root@localhost ~]# tune2fs -U baaf8f5f-2060-4599-a982-652a98755b47 /dev/sda2
tune2fs 1.41.12 (17-May-2010)
tune2fs: Bad magic number in super-block while trying to open /dev/sda2
Couldn't find valid filesystem superblock.
[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.4 (Final)


[root@localhost ~]# blkid /dev/sda1
/dev/sda1: UUID="ccca3795-04f7-4628-83e1-f083ee2a4d9f" TYPE="ext4"
You have new mail in /var/spool/mail/root
[root@localhost ~]# blkid /dev/sda2
/dev/sda2: UUID="10d6b119-b0ca-4a3f-9d35-401570f4ded9" TYPE="swap"

//不支持swap,只支持ex3,ext4,不支持lvm
[root@localhost ~]# tune2fs -U baaf8f5f-2060-4599-a982-652a98755b47 /dev/sda1
tune2fs 1.41.12 (17-May-2010)
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sr0
sda
├─sda1 ext4 baaf8f5f-2060-4599-a982-652a98755b47 /boot
├─sda2 swap 10d6b119-b0ca-4a3f-9d35-401570f4ded9 [SWAP]
└─sda3 LVM2_member PSb8Pz-uzQR-P5Oj-VEbd-uRCB-O9pC-98GdWa
└─VolGroup-LogVol00 (dm-0) ext4 c5d5a7ee-1e22-476f-8044-debe57e10ff0 /

 

###boot分区uuid修改
vim /etc/fstab
将:
UUID=8fc1e2f4-a6b4-4c5c-99d9-c6ae545a6d63  /data                    ext4    defaults        1 2
修改为:
UUID=294c8a0c-86e1-441f-8e5a-df5a4fc4585a  /data                    ext4    defaults        1 2

 

 uuidgen 是属于 util-linux包的一部分

内核源码:

E:\linux内核\linux-2.6.38.5\linux-2.6.38.5\drivers\char\random.c

/***************************************************************
 * Random UUID interface
 *
 * Used here for a Boot ID, but can be useful for other kernel drivers.
 ***************************************************************/

/*
 * Generate random UUID
 */
void generate_random_uuid(unsigned char uuid_out[16])
{
    get_random_bytes(uuid_out, 16);
    /* Set UUID version to 4 --- truly random generation */
    uuid_out[6] = (uuid_out[6] & 0x0F) | 0x40;
    /* Set the UUID variant to DCE */
    uuid_out[8] = (uuid_out[8] & 0x3F) | 0x80;
}
EXPORT_SYMBOL(generate_random_uuid);

UUID生成方法小结

[root@localhost ~]# uuidgen  //原理uuidgen是shell,读取/proc/sys/kernel/random/uuid
baaf8f5f-2060-4599-a982-652a98755b47

[root@localhost ~]# cat /proc/sys/kernel/random/uuid | sed 's/-//g'
f6b9f2a028bc430ea2a8e994157f7c4f  //格式1

[root@localhost ~]# cat /proc/sys/kernel/random/uuid
c84537ab-a4f2-49e1-941c-1b60712a40fe //格式2

其他
  linux shell
  Unix/Linux环境中大都有一个名为uuidgen的小工具,运行即可生成一个UUID到标准输出
  读取文件/proc/sys/kernel/random/uuid即得UUID,cat /proc/sys/kernel/random/uuid
  util-linux https://www.kernel.org/pub/linux/utils/util-linux/
  libuuid http://nchc.dl.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz
     具体用法参考http://linux.die.net/man/3/libuuid
  Boost库是一个可移植的开源C++库,实现 uuid
  Windows下提供了函数CoCreateGuid用于生成GUID
  JDK的UUID

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)算法。

 

同时参考一下

SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.0.0.pdf
 IETF RFC4122, A Universally Unique IDentifier (UUID) URN Namespace, The Internet Society, July
https://www.ietf.org/rfc/rfc4122.txt  //uuid的rfc规范(基于命名空间标识符)
为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法

 

posted @ 2022-03-15 10:52  jinzi  阅读(518)  评论(0编辑  收藏  举报