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