我将在一周前重新发布一个在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相关的软件包,但是纯粹随机的不知道什么是错的。 我错过了什么吗?
感谢您的答复,问候。
以下所有步骤(引导加载程序安装除外)都将在正在运行的系统上完成。
就像你在sdb上创build分区一样。 确保sdb1具有与sda1相同的开始和结束值。 像以前一样创buildsdb2(即不是整个驱动器的其余部分)
使用mount -o remount,ro /boot
以只读模式mount -o remount,ro /boot
dd if=/dev/sda1 of=/dev/sdb1
并克隆分区dd if=/dev/sda1 of=/dev/sdb1
。
交换sda和sdb。 在新的 sda上安装引导加载程序,并确保当新的sdb(即原始驱动器)未连接时,引导加载程序仍然加载内核。 启动会恐慌,因为没有根卷,但你现在知道它可以启动。 重新安装sdb
。
将新的sda2添加到您的卷组中,如下所示: pvcreate /dev/sda2
和vgextend centos /dev/sda2
以下命令将不会将您的卷克隆到新驱动器上。 然而,意志会停留在同一个卷组中
pvmove -n swap /dev/sdb2 /dev/sda2 pvmove -n root /dev/sdb2 /dev/sda2
在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
检查ls -Z /home
和ls -Z /mnt
匹配
卸下这两个家庭卷,并相应地重命名
umount /home umount /mnt lvrename centos/home centos/old_home lvrename centos/new_home centos/home mount /home
你现在已经克隆了更小的/家装。 卷centos / old_home是仍然在sdb2上的最后一个。 在这一点上,你的系统应该启动,没有任何麻烦,但你仍然需要摆脱sdb。
重新启动后,确保所有设备都能正常工作,您可以使用lvremove centos/old_home
删除旧的家庭音量。 当你看到pvs
的输出时,你应该注意到sdb2应该是完全不用的。
此时可以使用vgreduce centos /dev/sdb2
和pvremove /dev/sdb2
以便“旧”驱动器不再是卷组的一部分。
您现在可以closures该框并删除旧的驱动器。
问题是您的克隆过程没有复制selinux文件标签。
在宽容模式下启动, touch /.autorelabel
,重新启动。 系统将使用策略中的默认标签标记所有文件(这可能不是100%准确,但仍然会比现在好得多)。
之后,您应该能够再次启动到强制模式。
只是要记下我所做的事情。 只要注意一下:
1)fdisk / dev / sdb并执行:
2)mount -o remount,ro / boot
3)dd if = / dev / sda1 = / dev / sdb1
4)重新启动
5)chroot我的根
6)安装bootloader
7)关机
8)交换驱动器
9)validation所有运行正常
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标签
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
完。