1. 程式人生 > >lvm的備份還原及修改UUID

lvm的備份還原及修改UUID

掛載文件 修復grub 3.1 its lazy alt log roo 直接

今天在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文件系統

lvm的備份還原及修改UUID