关于磁盘对拷的一系列trick
关于LVM分区
LVM分区有一大好处,可以随意地进行大小的扩大或减小,这对于大量使用磁盘对拷机的情形下十分有利(从一个小磁盘拷贝到一个大磁盘,然后再扩大物理磁盘的大小)
但是,LVM分区结构较为复杂,有若干层的虚拟,故设置起来比一般的分区要复杂。
如何缩小物理分区的大小
部分对拷机会跳过为空的扇区,考虑到linux的特性,我们可以缩小磁盘的大小,来增加为空的扇区数量,进而提高磁盘对拷机器的拷贝速度
下面是一个例子,讲述了如何缩小LVM分区所在的物理分区的大小。
1 #由于LVM的特性导致,需要先缩小PV,且缩小到比实际的目标磁盘的大小略小 2 pvresize --setphysicalvolumesize 25.5G /dev/sda3 3 parted /dev/sda 4 #在界面内输入下面的内容 5 resizepart 3 6 #我们需要分区的大小是26GiB,那么总的扇区数量就是增加54525952个,加上已有部分的6397952再减去1,得到60923903 7 60923903s 8 # 如果需要确认,则可以输入print 9 # 保存输入的是quit
如何使用Linux命令执行分区的对拷
我们可以使用dd命令,进行分区对分区级别的对拷。
下文中展示了一个情形,即如何使用dd命令直接完成一块磁盘的对拷。
这里不是文件级别的拷贝,会把所有的扇区都拷贝一遍(和磁盘对拷机一样)
1 dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress 2 dd if=/dev/sda2 of=/dev/sdb2 bs=4M status=progress 3 dd if=/dev/sda3 of=/dev/sdb3 bs=4M status=progress
但是, 相比于使用磁盘对拷机,由于这种级别的对拷是将分区拷贝到了另外一个磁盘上,而不是带着分区表一起拷贝。
这个在linux的引导上就会存在一个问题,即UUID出现了变化导致引导失效,故需要重建引导。
除了这个问题以外,使用dd命令进行拷贝,也会出现一个问题,即LVM分区一开始没有被激活,需要手动进行激活。
故额外的操作步骤如下:
1. 重新扫描lvm分区,依次输入pvsan vgscan 和vghange -ay 去激活出新的LVM分区(操作完毕后可以看到两个LVM分区,新的叫做ubuntu-vg1) 2. 更新grub的信息(采用mount新的LVM分区,然后mount大量的分区,然后进去update-grub后grub-install 3. 修改fstab,系统盘修改为新的路径。
如何缩小LVM分区
注意:缩小LVM分区前,必须确保umount!!!
所以,当你缩小主SSD时,建议额外插多一块磁盘作为系统盘,对待操作的磁盘进行操作
# 必须先运行一个命令
e2fsck -f /dev/mapper/ubuntu--vg-ubuntu--lv 39G
# 缩小文件系统大小,缩小到比目标的LVM分区略小
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 39G # 缩小LVM分区大小 lvreduce -L 40G /dev/mapper/ubuntu--vg-ubuntu--lv # 重新扩大文件系统的大小,为LVM分区的大小 resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
如何扩大LVM分区
由于磁盘对拷机会以分区为单位进行拷贝(一个分区内不管有没有东西都会完整拷贝),且对拷机支持从小的磁盘拷贝到大的磁盘。
因此,默认情况下,母源的大小都是被极致缩小的,当拷贝到大的磁盘后,需要进行分区的扩大。下面是如何扩大的教程。
扩大LVM分区之前,需要先扩大磁盘物理分区,可以使用parted去进行扩展。扩展的时候,由于使用了磁盘对拷机,可能会有下列提示:
GPT PMBR size mismatch (234441647 != 468877311) will be corrected by write. The backup GPT table is not on the end of the device.
可以通过在parted的时候,输入fix来解决。
在第一步的分区过程中,使用下列命令解决。(注意,在进行reziepart的时候,显示的结束点大小可能和你期望的大小不一样,这是因为磁盘对拷机的特性所导致)
使用parted 直接resizepart 3 100% 然后enter 再按下q退出既可
随后,需要扩展PV巻,命令如下:
pvresize /dev/sda3
当PV巻被扩展后,就执行逻辑卷的的扩展,最后执行文件系统的扩展,命令如下:
lvextend -l +100%FREE /dev/mapper/ubuntu--vg1-ubuntu--lv resize2fs /dev/mapper/ubuntu--vg1-ubuntu--lv