今天在VMware® Workstation 12 Pro虛擬機上克隆了一台Linux虛擬機,無意中發現兩台虛擬機blkid一模一樣。
[root@stau64 ~]# blkid
[root@stau65 ~]# blkid
有沒有什么辦法改變blkid里的UUID呢?網上查找了很多關於如何實現改變UUID的方法,都不怎么好使。最后我實際操作,終於找到一條可以真正改變blkid里UUID的方法,實驗步驟如下:
1.准備。為了不與其它系統卷組名稱相同從而導致無法被掛載啟動。這里我先修改邏輯卷和卷組名稱
[root@stau65 ~]# lvrename /dev/centos/root lvroot
[root@stau65 ~]# vgrename centos VolGroup65
2.把系統關機,查看虛擬磁盤文件名稱
[root@stau65 ~]# shutdown -h now
2.另起一台虛擬機,添加剛剛查看的虛擬磁盤文件
3.開機,如果無法開機,使用光盤進入rescue修復模式進行修復
[root@stau63 ~]# df -hT
正常啟動后如圖可以看到我們添加虛擬磁盤,此處顯示的/dev/sdb就是需要修改blkid里UUID的磁盤。
[root@stau63 ~]# ll /dev/sd*
4.查看當前所有卷組vgdisplay
[root@stau63 ~]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 12.00 GiB
PE Size 4.00 MiB
Total PE 3072
Alloc PE / Size 3072 / 12.00 GiB
Free PE / Size 0 / 0
VG UUID d5xxJl-gMyV-Y1Gj-v57D-fDqY-GvWL-ih6DaL
--- Volume group ---
VG Name VolGroup65
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 21.99 GiB
PE Size 4.00 MiB
Total PE 5630
Alloc PE / Size 5630 / 21.99 GiB
Free PE / Size 0 / 0
VG UUID b4If34-7E1r-rvMN-WpKE-2Kmg-22Ts-auTm1i
查看uuid
[root@stau63 ~]# blkid
5.如果卷組沒有激活,需要先激活一下
[root@stau63 ~]# vgchange -ay VolGroup65
-a: activate
-y: yes 激活
-n: no 不激活
6.生成新UUID
6.1XFS系統:
6.1.1改變根分區UUID。
要改變根分區UUID,因為系統采用的是lvm邏輯卷管理,我暫未發現針對lvm類型修改UUID的命令與方法。所以這里我采用備份根分區然后還原的方式。步驟如下:
a.查看卷組剩余空間,發現沒有剩余PE
[root@stau63 ~]# vgdisplay VolGroup65
b.查看磁盤空間
[root@stau63 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc0412435
Device Boot Start End Blocks Id System
/dev/sdb1 2048 1026047 512000 83 Linux
/dev/sdb2 1026048 5220351 2097152 83 Linux
/dev/sdb3 5220352 47163391 20971520 83 Linux
說明:/dev/sdb1 為引導分區
/dev/sdb2 為swap分區
/dev/sdb3 才是我要備份的根分區
c.因為我怕空間不足,所以這里我把swap分區移除掉。(數據無價,刪除任何文件前請確認已經備份好重要數據。刪除前需要先取消掛載。)
c.1確認操作的分區沒有被掛載
[root@stau63 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 10G 7.0G 3.1G 70% /
devtmpfs devtmpfs 224M 0 224M 0% /dev
tmpfs tmpfs 236M 0 236M 0% /dev/shm
tmpfs tmpfs 236M 5.7M 230M 3% /run
tmpfs tmpfs 236M 0 236M 0% /sys/fs/cgroup
/dev/sr0 iso9660 8.8G 8.8G 0 100% /mnt/cdrom
/dev/sda1 xfs 197M 108M 90M 55% /boot
tmpfs tmpfs 48M 0 48M 0% /run/user/0
c.2移除swap分區
[root@stau63 ~]# lvremove /dev/VolGroup65/swap
Do you really want to remove active logical volume VolGroup65/swap? [y/n]: y
Logical volume "swap" successfully removed
[root@stau63 ~]# vgreduce VolGroup65 /dev/sdb2
Removed "/dev/sdb2" from volume group "VolGroup65"
[root@stau63 ~]# pvremove /dev/sdb2
Labels on physical volume "/dev/sdb2" successfully wiped.
d.新建backup-lv,備份根分區
d.1新建磁盤分區。把剩余空間新建一個磁盤分區
[root@stau63 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc0412435
Device Boot Start End Blocks Id System
/dev/sdb1 2048 1026047 512000 83 Linux
/dev/sdb2 1026048 5220351 2097152 83 Linux
/dev/sdb3 5220352 47163391 20971520 83 Linux
Command (m for help): n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e
Selected partition 4
First sector (47163392-83886079, default 47163392):
Using default value 47163392
Last sector, +sectors or +size{K,M,G} (47163392-83886079, default 83886079):
Using default value 83886079
Partition 4 of type Extended and of size 17.5 GiB is set
Command (m for help): n
All primary partitions are in use
Adding logical partition 5
First sector (47165440-83886079, default 47165440):
Using default value 47165440
Last sector, +sectors or +size{K,M,G} (47165440-83886079, default 83886079):
Using default value 83886079
Partition 5 of type Linux and of size 17.5 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
d.2更新磁盤信息
[root@stau63 ~]# partprobe /dev/sdb
[root@stau63 ~]# ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 Feb 4 17:28 /dev/sdb
brw-rw---- 1 root disk 8, 17 Feb 4 17:28 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Feb 4 17:28 /dev/sdb2
brw-rw---- 1 root disk 8, 19 Feb 4 17:28 /dev/sdb3
brw-rw---- 1 root disk 8, 20 Feb 4 17:28 /dev/sdb4
brw-rw---- 1 root disk 8, 21 Feb 4 17:28 /dev/sdb5
d.3新建pv,擴展vg,並查看vg信息
[root@stau63 ~]# pvcreate /dev/sdb5
Physical volume "/dev/sdb5" successfully created.
[root@stau63 ~]# vgextend VolGroup65 /dev/sdb5
Volume group "VolGroup65" successfully extended
[root@stau63 ~]# vgdisplay VolGroup65
--- Volume group ---
VG Name VolGroup65
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 39.50 GiB
PE Size 4.00 MiB
Total PE 10112
Alloc PE / Size 5118 / 19.99 GiB
Free PE / Size 4994 / <19.51 GiB
VG UUID b4If34-7E1r-rvMN-WpKE-2Kmg-22Ts-auTm1i
d.4新建備份lv
[root@stau63 ~]# lvcreate -n backup-lv -l +100%Free VolGroup65
Logical volume "backup-lv" created.
d.5格式化lv
[root@stau63 ~]# mkfs.xfs /dev/VolGroup65/backup-lv
meta-data=/dev/VolGroup65/backup-lv isize=512 agcount=4, agsize=1278464 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5113856, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
d.6掛載
[root@stau63 ~]# mkdir -p /mnt/VolGroup65/lvroot /mnt/VolGroup65/backup-lv
[root@stau63 ~]# mount /dev/mapper/VolGroup65-lvroot /mnt/VolGroup65/lvroot
[root@stau63 ~]# mount /dev/VolGroup65/backup-lv /mnt/VolGroup65/backup-lv
e.備份源lv邏輯卷。此處我使用rsync工具,/boot引導分區因為我需要重建,所以我備份排除此目錄下文件。(備份工具有很多,大家可以擇優選擇。因為我需要改變UUID的值,所以我使用最方便的復制工具rsync.)
[root@stau63 ~]# rsync -avz /mnt/VolGroup65/lvroot /mnt/VolGroup65/backup-lv --exclude=media/* --exclude=sys/* --exclude=proc/* --exclude=mnt/* --exclude=tmp/* --exclude=boot/*
f.移除根分區
[root@stau63 ~]# umount /dev/mapper/VolGroup65-lvroot
[root@stau63 ~]# lvremove /dev/mapper/VolGroup65-lvroot
Do you really want to remove active logical volume VolGroup65/lvroot? [y/n]: y
Logical volume "lvroot" successfully removed
[root@stau63 ~]# vgreduce VolGroup65 /dev/sdb3
Removed "/dev/sdb3" from volume group "VolGroup65"
[root@stau63 ~]# pvremove /dev/sdb3
Labels on physical volume "/dev/sdb3" successfully wiped.
注:如果vgreduce如下失敗,需要先pvmove走
[root@stau63 ~]# vgreduce VolGroup65 /dev/sdb3
Physical volume "/dev/sdb3" still in use
可以移動pvmove到另一磁盤,后者Free PE需要大於前者
[root@stau63 ~]# pvmove /dev/sdb3 /dev/sda3
/dev/sdb3: Moved: 0.00%
/dev/sdb3: Moved: 14.65%
/dev/sdb3: Moved: 30.27%
/dev/sdb3: Moved: 75.20%
/dev/sdb3: Moved: 100.00%
到此除了包含備份文件的/dev/sda5,根分區已經備份和移走了,其它分區可以重新分區或者格式化了。
g.重建根分區及還原數據
我選擇了重新分區,分區后別忘了partprobe /dev/sdb刷新下分區表
[root@stau63 ~]# partprobe /dev/sda
[root@stau63 ~]# partprobe /dev/sdb
[root@stau63 ~]# ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 Feb 6 16:36 /dev/sdb
brw-rw---- 1 root disk 8, 17 Feb 6 16:36 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Feb 6 16:36 /dev/sdb2
brw-rw---- 1 root disk 8, 19 Feb 6 16:36 /dev/sdb3
brw-rw---- 1 root disk 8, 20 Feb 6 16:36 /dev/sdb4
brw-rw---- 1 root disk 8, 21 Feb 6 16:36 /dev/sdb5
g.1新建PV和新建vg
[root@stau63 ~]# pvcreate /dev/sdb2 /dev/sdb3
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
[root@stau63 ~]# vgcreate VG65 /dev/sdb{2,3}
Volume group "VG65" successfully created
g.2新建lv
[root@stau63 ~]# lvcreate -L 2G -n swap VG65
Logical volume "swap" created.
[root@stau63 ~]# lvcreate -l 100%Free -n lvroot VG65
Logical volume "lvroot" created.
g.4格式化
引導分區因為必須為標准分區格式,所以直接格式化就好
[root@stau63 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=76800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
格式化lv
[root@stau63 ~]# mkfs.xfs /dev/mapper/VG65-lvroot
meta-data=/dev/mapper/VG65-lvroot isize=512 agcount=4, agsize=1323008 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5292032, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2584, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
格式化swap分區
[root@stau63 ~]# mkswap /dev/mapper/VG65-swap
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=2ab4424a-e95d-489a-96f1-c967bc6a7c0c
g.5掛載並還原數據
[root@stau63 ~]# mkdir /mnt/vg65
[root@stau63 ~]# mount /dev/VG65/lvroot /mnt/vg65
[root@stau63 ~]# rsync -avz /mnt/VolGroup65/backup-lv/lvroot/* /mnt/vg65/ --exclude=media/* --exclude=sys/* --exclude=proc/* --exclude=mnt/* --exclude=tmp/* --exclude=boot/*
e.修改/mnt/vg65/etc/fstab
e.1查看新UUID
[root@stau63 vg65]# blkid
/dev/sda1: UUID="a8b7ce70-f1c1-4f73-b13f-d5daf168096f" TYPE="xfs"
/dev/sda2: UUID="kjXpdZ-5Rpy-7tg0-KqiV-9FRg-0OXX-q37J3B" TYPE="LVM2_member"
/dev/sdb1: UUID="ccb49fe1-c127-4e1c-ae0d-996cc17a624e" TYPE="xfs"
/dev/sdb3: UUID="vgZOV0-I24e-xRvb-GIdH-Q5o9-v7Fq-beBFYw" TYPE="LVM2_member"
/dev/sr0: UUID="2018-05-07-12-53-47-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="7041be13-c88f-4221-b5c2-6d3e55a1c3f2" TYPE="xfs"
/dev/mapper/centos-swap: UUID="0562ef7b-0b3c-4da5-8414-1d13d44dc7f0" TYPE="swap"
/dev/sdb5: UUID="Yfucop-iXE0-vIQh-L0QJ-AUY4-8uAK-FASfAj" TYPE="LVM2_member"
/dev/mapper/VolGroup65-backup--lv: UUID="8a8fa0d6-7de0-44a5-a24d-5b97ef7a89b7" TYPE="xfs"
/dev/sda3: UUID="vRTH1r-wMfx-htsk-wQoe-fGLB-2169-nftTLt" TYPE="LVM2_member"
/dev/sdb2: UUID="1NKilr-tNwd-US1g-I1k1-1ATI-bFkg-0dtjWm" TYPE="LVM2_member"
/dev/mapper/VG65-lvroot: UUID="8d661a87-3eee-4025-9714-064774cada00" TYPE="xfs"
/dev/mapper/VG65-swap: UUID="2ab4424a-e95d-489a-96f1-c967bc6a7c0c" TYPE="swap"
e.2修改掛載文件
[root@stau63 vg65]# vim etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Dec 15 20:32:13 2018
#
# 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/VG65-lvroot / xfs defaults 0 0
UUID=ccb49fe1-c127-4e1c-ae0d-996cc17a624e /boot xfs defaults 0 0
/dev/mapper/VG65-swap swap swap defaults 0 0
UUID=2018-05-07-12-53-47-00 /mnt/cdrom iso9660 defaults 0 0
f.修復grub2
f.1掛載/dev/sdb1到/boot分區
[root@stau63 ~]# mount /dev/sdb1 /boot
f.2 重新安裝內核
[root@stau63 ~]# rpm -ivh /mnt/cdrom/Packages/kernel-3.10.0-862.el7.x86_64.rpm --force
Preparing... ################################# [100%]
Updating / installing...
1:kernel-3.10.0-862.el7 ################################# [100%]
f.3 grub2安裝
[root@stau63 ~]# grub2-install /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.
f.4 grub配置文件生成
[root@stau63 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
g.完成。
把63關機,65開機。可能有多個菜單可以vim /boot/grub2/grub.cfg刪除多余的菜單
h. 其它
一些可以生成新UUID的方法
XFS文件系統
EXT文件系統
[root@stau63 ~]# uuidgen |xargs -i tune2fs -U {} /dev/mapper/VolGroup65-lvroot
[root@stau63 ~]# pvchange -u /dev/sda3 #為pv(/dev/sda3)隨機產生一個新的uuid號
[root@stau63 ~]# vgchange -u test #為vg(test) 隨機產生一個新的uuid號
修復XFS文件系統