因为原来是500G的机械硬盘,实际使用才几G。所以打算换成容量小的固态硬盘,或者镜像虚拟化云化改造,虚拟磁盘小。
网上搜索的教程,基本上是不支持迁移到小硬盘的,都得比源盘一样大或者更大。

收集源磁盘相关信息

此步骤很重要,后面需要在新的磁盘创建相同的分区表。

fdisk -l

记住红框内和箭头指向的内容,后面需要用到。

启动CentOS安装盘,按步骤进入命令行

可在官网下载相同大版本的系统安装盘,Minimal或者NetInstall版本都可以。


添加新的虚拟磁盘并挂载(或者挂载U盘、移动硬盘等)

注:新的虚拟磁盘或者U盘都是作为中转磁盘使用。
虚拟磁盘需要格式化(ext4),U盘或者移动硬盘等格式OK只需要挂载。

下面以添加新的虚拟磁盘为例:

fdisk -l                                         #查看一下新添加的磁盘是哪个,本机是/dev/sdb
mkfs.ext4 /dev/sdb                               #输入y回车确定格式化
mkdir /data && mount /dev/sdb /data                #挂载/dev/sdb到/data
mkdir /sda1 /sda2 /centos-root                   #根据原盘分区创建对应文件夹,准备挂载
mount /dev/sda1 /sda1                            #挂载/dev//sda1到//sda1
mount /dev/sda2 /sda2                            #挂载/dev/sda2到/sda2
vgchange -ay centos                              #激活VG卷组centos
mount /dev/centos/root /centos-root              #挂载VG卷组centos-root到/centos-root 

备份文件到中转的磁盘

cp -aur /sda1/* /data/sda1/                              #复制sda1的数据到中转盘
cp -aur /sda2/* /data/sda2/                              #复制sda2的数据到中转盘
xfsdump -f /data/centos-root.dump /centos-root            #使用xfsdump创建原盘根目录镜像到中转盘
 ============================= dump label dialog ==============================
please enter label for this dump session (timeout in 300 sec)
 -> centos-root   #指定备份会话标签,此处需要手动输入
session label entered: "centos-root"
 --------------------------------- end dialog ---------------------------------

 ============================= media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
 -> sda3       #指定设备标签,就是对要备份的设备做一个描述
media label entered: "sda3"
 --------------------------------- end dialog ---------------------------------

xfsdump: Dump Status: SUCCESS

备份完成后,执行init 0关机

移除原始盘,添加新磁盘,按原盘进行分区

移除原始盘防止文件分区错乱,也防止误删误格式化原盘。
开机,重新进入到Live CD的SHELL命令行中

#因本文环境中原盘使用的是GPT分区,故需要使用parted来创建GPT分区
parted /dev/sda   #注意查看新的磁盘是否是sda
mklabel gpt   #然后输入yes确定创建GPT
quit   #退出
fdisk /dev/sda   #使用fdisk继续创建分区
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): n      #创建分区
Partition number (1-128, default 1):       #回车
First sector (34-125829086, default 2048):       #回车
Last sector, +sectors or +size{K,M,G,T,P} (2048-125829086, default 125829086): +200M      #创建200M,根据原盘大小确定
Created partition 1

Command (m for help): n      #创建分区
Partition number (2-128, default 2):        #回车
First sector (34-125829086, default 411648):        #回车
Last sector, +sectors or +size{K,M,G,T,P} (411648-125829086, default 125829086): +1024M      #创建1024M,根据原盘大小确定
Created partition 2

Command (m for help): n      #创建分区
Partition number (3-128, default 3):        #回车
First sector (34-125829086, default 2508800):        #回车
Last sector, +sectors or +size{K,M,G,T,P} (2508800-125829086, default 125829086):        #使用剩下空间,直接回车
Created partition 3

Command (m for help): t      #修改分区类型
Partition number (1-3, default 3): 1      #选择第一分区
Partition type (type L to list all types): 1      #根据原盘,选择修改为EFI分区
Changed type of partition 'Linux filesystem' to 'EFI System'

Command (m for help): t      #修改分区类型
Partition number (1-3, default 3): 2      #选择第二分区
Partition type (type L to list all types): 11      #根据原盘,选择修改为Microsoft basic分区
Changed type of partition 'Linux filesystem' to 'Microsoft basic data'

Command (m for help): t      #修改分区类型
Partition number (1-3, default 3): 3      #选择第三分区
Partition type (type L to list all types): 31      #根据原盘,选择修改为Linux LVM分区
Changed type of partition 'Linux filesystem' to 'Linux LVM'

Command (m for help): p      #显示分区表
Disk /dev/sdb: 64.4 GB, 64424509440 bytes, 125829120 sectors
Disk label type: gpt
Disk identifier: 20B7D567-3D8C-45D4-9BBF-E0911D5EA883

#         Start          End    Size  Type            Name
 1         2048       411647    200M  EFI System      
 2       411648      2508799      1G  Microsoft basic 
 3      2508800    125829086   58.8G  Linux LVM 

Command (m for help): w      #确定分区无误,输入w保存退出
The partition table has been altered!

根据原盘分区格式,格式化分区

mkfs.vfat /dev/sda1
mkfs.xfs /dev/sda2

创建根目录和swap使用的逻辑卷,并挂载

pvcreate /dev/sda3      #创建PV卷
vgcreate centos /dev/sda3      #创建VG卷
lvcreate -L 48G -n root centos      #创建根目录lv卷,注意修改容量大小,不能超过sda3的大小,需要留一部分空间给swap使用
lvcreate -l 100%FREE -n swap centos      #使用剩下空间创建swap lv卷
mkfs.xfs /dev/centos/root      #格式化根目录分区
mkswap  /dev/centos/swap      #格式化swap交换分区

挂载新磁盘和中转磁盘

mkdir /centos-root /sda1 /sda2 /data
mount /dev/sdb /data
mount /dev/sda1 /sda1
mount /dev/sda2 /sda2
mount /dev/centos/root /centos-root

还原文件和镜像到新磁盘

cp -aur /data/sda1/ /sda1/*                              #复制中转盘的sda1数据到新磁盘
cp -aur /data/sda2/ /sda2/*                              #复制中转盘的sda2数据到新磁盘
xfsrestore -f /data/centos-root.dump /centos-root            #使用xfsrestore还原根目录镜像到新磁盘

修改fstab文件磁盘标识方式UUID

blkid          #获取磁盘的UUID
vi /centos-root/etc/fstab          #对应修改然后保存

修复系统引导

注意系统引导方式是BIOS还是UEFI

#CD下的SHELL更新方法:
grub-mkconfig -o /sda1/boot/grub/grub.cfg        #BIOS引导
grub-mkconfig -o /sda1/EFI/centos/grub.cfg       #UEFI引导
init 0     #关机
#进入系统后的SHELL更新方法:
grub-mkconfig -o /boot/grub/grub.cfg                 #BIOS引导
grub-mkconfig -o /boot/efi/EFI/centos/grub.cfg       #UEFI引导

扫尾工作,处理网卡UUID问题

移除中转磁盘,调整系统引导方式。
开机后发现网卡UUID有变更,对应修改即可。

nmcli con          #查看网卡的UUID信息,记下UUID值
cd /etc/sysconfig/network-scripts/
vim ifcfg-eth0        #修改对应地方,然后重启网络
systemctl restart network