centos7 xfs lmv克隆在较小的设备上

我将在一周前重新发布一个在stackoverflow上发布的问题,如果有人发现这个垃圾邮件,我很抱歉,但是我仍然需要帮助来解决这个问题。 我认为这对其他人也有用。 首先,我有一台基于Centos7的服务器,在非兼容硬件上运行,作为公司策略,我只需要支持容错。

我正在碰撞一个显然很简单的事情。

我需要把我的服务器放在RAID控制器的后面,这意味着我需要把我的CentOS 7安装在一台连接到它的设备上(一台3ware控制器9650se-2lp,这台计算机是惠普商务级的DC7600 Convertible Minitower)。

我的烦恼是从采用的文件系统开始的,是一个不能被devise减less的XFS。 我需要减less它,因为控制器看到相同的磁盘看起来更小,因为控制器存储固件。

我的系统是带有LVM卷的CentOS 7的默认安装。 在设备映射器工作了一周之后,我得到了一个名为“centos”的卷组和称为“root”,“home”和“swap”的逻辑卷。 简单。

# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 148,56g 64,00m # vgs VG #PV #LV #SN Attr VSize VFree centos 1 3 0 wz--n- 148,56g 64,00m # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home centos -wi-ao---- 96,50g root centos -wi-ao---- 50,00g swap centos -wi-ao---- 2,00g 

现在我需要减less我的整个布局,我会实现这个从sda2减less“家”lvm。 我计划新安装到130G,而现在是148,56G,所以我想减less18,56G的“家”。

首先fdisk到新build的磁盘上创build新的两个卷sdb1和sdb2,之后我开始处理逻辑卷。

 # pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created. # vgextend centos /dev/sdb2 Volume group "centos" successfully extended # pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 148,56g 64,00m /dev/sdb2 centos lvm2 a-- 130,00g 130,00g # lvcreate --size 77,50G --name home1 centos Logical volume "home1" created. # mkfs.xfs /dev/centos/home1 meta-data=/dev/centos/home1 isize=512 agcount=4, agsize=5079040 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=20316160, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=9920, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # lvcreate --size 50,00G --name root1 centos # mkfs.xfs /dev/centos/root1 # lvcreate --size 2G --name swap1 centos # mkswap /dev/centos/swap1 

之后,从livecd Clonezilla我克隆了sda1 sdb1没有重写分区表,并从命令行我已经挂载逻辑卷复制数据。 我不能用简单的dd,我知道是最好的,因为dd也会复制空格,新的家会减less。

 # mkdir /mnt/home # mkdir /mnt/home1 # mount -o ro /dev/centos/home /mnt/home # mount /dev/centos/home1 /mnt/home1 # cd /mnt/home # find . -mount -print | cpio -pdm /mnt/home1 5885177 blocks # cd / # umount home # umount home1 # mkdir /mnt/root # mkdir /mnt/root1 # mount -o ro /dev/centos/root /mnt/root # mount /dev/centos/root1 /mnt/root1 # cd /mnt/root # find . -mount -print | cpio -pdm /home/root1 43415372 blocks 

做到这一点,我已经closures了电脑,我已经打开了SDA磁盘,并将sdb移动到我的主板上的第一个SATA端口。 现在sda从布丁手中是安全的。 最好的还在后头。

我已经从Clonezilla再次启动,而不需要复制任何东西,我已经清理并重命名了我的逻辑卷。

 # vgreduce --removemissing --force centos WARNING: Device for PV 0tJwU5-KA41-LEJa-hhFG-SIzx-RGq3-fJNzkm not found or rejected by a filter. WARNING: Removing partial LV centos/swap. Logical volume "swap" successfully removed WARNING: Removing partial LV centos/home. Logical volume "home" successfully removed WARNING: Removing partial LV centos/root. Logical volume "root" successfully removed Wrote out consistent volume group centos. # lvrename /dev/centos/root1 /dev/centos/root Renamed "root1" to "root" in volume group "centos" # lvrename /dev/centos/home1 /dev/centos/home Renamed "home1" to "home" in volume group "centos" # lvrename /dev/centos/swap1 /dev/centos/swap Renamed "swap1" to "swap" in volume group "centos 

最后我安装了grub2:

 # mount /dev/centos/root /mnt # mount /dev/sda1 /mnt/boot # mount --bind /dev /mnt/dev && mount --bind /dev/pts /mnt/dev/pts && mount --bind /proc /mnt/proc && mount --bind /sys /mnt/sys # chroot /mnt # grub2-install /dev/sda # grub2-install --recheck /dev/sda # grub2-mkconfig -o /boot/grub2/grub.cfg 

我在grub2-mkconfig上修正了一个警告,它取代了grub1的update-grub,启用了一个我以前从未使用过的新服务lvm2-lvmetad

 # grub2-mkconfig -o /boot/grub2/grub.cfg WARNING: Failed to connect to lvmetad. Falling back to device scanning. WARNING: Failed to connect to lvmetad. Falling back to device scanning. Found linux image: /boot/vmlinuz-3.10.0-514.21.2.el7.centos.plus.x86_64 Found initrd image: /boot/initramfs-3.10.0-514.21.2.el7.centos.plus.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-6f6078afdaf94da59deb321bd428dfdf Found initrd image: /boot/initramfs-0-rescue-6f6078afdaf94da59deb321bd428dfdf.img WARNING: Failed to connect to lvmetad. Falling back to device scanning. WARNING: Failed to connect to lvmetad. Falling back to device scanning. done # systemctl enable lvm2-lvmetad.service # systemctl enable lvm2-lvmetad.socket # systemctl start lvm2-lvmetad.service # systemctl start lvm2-lvmetad.socket 

当然,服务开始没有从livecd工作,我知道。

一旦重新启动我的系统,我遇到了SELinux的几个问题。 一旦login完成,它会一直弹回我,无论是从远程本地,SSH或不。 当然,从livecd很容易设置SELinux宽容,但这是一个生产服务器,它承载开发的服务,如mediawiki和GIT。 我无法开始使用克隆的驱动器,将新的数据放在几乎被窃听的系统上,我不明白我的错误。 我尝试重新安装SELinux相关的软件包,但是纯粹随机的不知道什么是错的。 我错过了什么吗?

感谢您的答复,问候。

以下所有步骤(引导加载程序安装除外)都将在正在运行的系统上完成。

1.在sdb上创build分区

就像你在sdb上创build分区一样。 确保sdb1具有与sda1相同的开始和结束值。 像以前一样创buildsdb2(即不是整个驱动器的其余部分)

2.将sda1复制到sdb1

使用mount -o remount,ro /boot以只读模式mount -o remount,ro /boot dd if=/dev/sda1 of=/dev/sdb1并克隆分区dd if=/dev/sda1 of=/dev/sdb1

3.交换驱动器并确保sdb引导

交换sda和sdb。 在新的 sda上安装引导加载程序,并确保当新的sdb(即原始驱动器)未连接时,引导加载程序仍然加载内核。 启动会恐慌,因为没有根卷,但你现在知道它可以启动。 重新安装sdb

3.扩展您的卷组

将新的sda2添加到您的卷组中,如下所示: pvcreate /dev/sda2vgextend centos /dev/sda2

4.移动交换和根卷

以下命令将不会您的卷克隆到新驱动器上。 然而,意志会停留在同一个卷组中

 pvmove -n swap /dev/sdb2 /dev/sda2 pvmove -n root /dev/sdb2 /dev/sda2 

5.克隆你的/家

在sda2上为/ home创build一个新卷,将其挂载到某处并用xfsdump和xfsrestore克隆内容

 lvcreate --size 77,50G --name new_home centos /dev/sda2 mount /dev/centos/new_home /mnt xfsdump -J /home | xfsrestore -J /mnt 

6.确保selinux标签被转移

检查ls -Z /homels -Z /mnt匹配

7.重命名主卷

卸下这两个家庭卷,并相应地重命名

 umount /home umount /mnt lvrename centos/home centos/old_home lvrename centos/new_home centos/home mount /home 

你现在已经克隆了更小的/家装。 卷centos / old_home是仍然在sdb2上的最后一个。 在这一点上,你的系统应该启动,没有任何麻烦,但你仍然需要摆脱sdb。

8.清理

重新启动后,确保所有设备都能正常工作,您可以使用lvremove centos/old_home删除旧的家庭音量。 当你看到pvs的输出时,你应该注意到sdb2应该是完全不用的。

此时可以使用vgreduce centos /dev/sdb2pvremove /dev/sdb2以便“旧”驱动器不再是卷组的一部分。

您现在可以closures该框并删除旧的驱动器。

问题是您的克隆过程没有复制selinux文件标签。

在宽容模式下启动, touch /.autorelabel ,重新启动。 系统将使用策略中的默认标签标记所有文件(这可能不是100%准确,但仍然会比现在好得多)。

之后,您应该能够再次启动到强制模式。

只是要记下我所做的事情。 只要注意一下:

1)fdisk / dev / sdb并执行:

  • 创build一个新的空的DOS分区表
  • 添加一个新的分区,1启动像sda1,ID 83和相同的开始和结束
  • 添加一个新的分区,2为LVM,ID 8E和135G,小于sda2,因为我需要减less
  • 切换分区1上的可启动标志

2)mount -o remount,ro / boot

3)dd if = / dev / sda1 = / dev / sdb1

4)重新启动

5)chroot我的根

  • mount / dev / centos / root / mnt / root /
  • mount / dev / sdb1 / mnt / root / boot /
  • mount –bind / dev / / mnt / root / dev / && mount –bind / dev / pts && mount –bind / proc / && mount –bind / sys / mnt / root / sys
  • chroot / mnt / root /

6)安装bootloader

  • grub2-install / dev / sdb
  • grub2-install –recheck / dev / sdb
  • grub2-mkconfig -o /boot/grub2/grub.cfg

7)关机

8)交换驱动器

9)validation所有运行正常

  • 我目前正在使用从sda(新驱动器)和从sdb(旧驱动器)的根启动,

10)pvcreate / dev / sda2

11)vgextend centos / dev / sda2

12)pvmove -n swap / dev / sdb2 / dev / sda2

13)pvmove -n root / dev / sdb2 / dev / sda2

14)yum安装xfsdump

15)lvcreate –size 80G –name new_home centos / dev / sda2

16)mkfs.xfs / dev / centos / new_home

17)mount / dev / centos / new_home / mnt / root /

18)xfsdump -J – / home | xfsrestore -J – / mnt / root /

19)validation相同的Selinux标签

  • ls -Z / home /
  • ls -Z / mnt / root /

20)umount / mnt / root /

21)lvrename / dev / centos / home / dev / centos / old_home

22)lvrename / dev / centos / new_home / dev / centos / home

23)mount / home /

  • 有错误卸下家,但安装在家我猜新的运行良好

24)重新启动,一切运行正常

25)lvremove / dev / centos / old_home

26)vgreduce centos / dev / sdb2

27)pvremove / dev / sdb2

28)closures并断开sdb

完。