小型設備上的centos7 xfs lmv複製
我將重新提出一個一周前在 stackoverflow 上發布的問題,如果有人發現了這個垃圾郵件,我很抱歉,但我仍然需要幫助來解決這個問題。我認為它對其他人也可能有用。首先,我有一個基於 Centos7 的伺服器,它在不符合公司策略的硬體上執行,我只需要支持容錯。
我正在與一個看似簡單的事情發生衝突。
我需要將我的伺服器放在 RAID 控制器之後,這意味著我需要將我的 CentOS 7 安裝移動到連接到它的設備上(3ware 控制器 9650se-2lp,電腦是 HP 商務級,DC7600 Convertible Minitower)。
我的麻煩始於採用的文件系統,是無法通過設計減少的 XFS。我需要減少它,因為控制器看到的同一個磁碟看起來更小,因為控制器將韌體儲存在其中。
我的系統是帶有 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
現在我需要減少我的整個佈局,我將從 sda2 減少“家”lvm。我計劃新安裝到 130G 而現在是 148,56G,所以我想減少 18,56G 的“家”。
首先 fdisk 到新磁碟創建新的兩個卷,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 複製了 sdb1 上的 sda1 而不重寫分區表,並從命令行安裝了邏輯卷以複製數據。我不能使用我知道最好的簡單 dd,因為 dd 也會複製空白空間並且新家會減少。
# 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
完成後,我關閉了電腦,我沒有連接 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 的幾個問題。登錄完成後,無論是從遠端還是從本地,無論是否是 ssh,它都會讓我不斷反彈。當然,從 livecd 很容易將 SELinux 設置為許可,但這是一個生產伺服器,它託管用於開發的服務,例如 mediawiki 和 git。我無法開始使用複製的驅動器,將新數據放在幾乎有問題的系統上,我不明白我做錯了什麼。我嘗試重新安裝 SELinux 相關的軟體包,但純粹是隨機的,不知道可能出了什麼問題。我錯過了什麼嗎?
感謝您的回答,問候。
以下所有步驟(除了引導載入程序安裝)都將在正在執行的系統上完成。
1.在sdb上創建分區
就像您在 sdb 上創建分區一樣。確保 sdb1 與 sda1 具有相同的開始值和結束值。像之前一樣創建 sdb2(即不是驅動器的整個其餘部分)
2.複製sda1到sdb1
以只讀模式重新掛載 /dev/sda1
mount -o remount,ro /boot
並複製分區dd if=/dev/sda1 of=/dev/sdb1
。
- 交換驅動器並確保 sdb 啟動
交換 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
- 複製你的 /home
在 sda2 上為 /home 創建一個新卷,將其掛載到某處並使用 xfsdump 和 xfsrestore 複製內容
lvcreate --size 77,50G --name new_home centos /dev/sda2 mount /dev/centos/new_home /mnt xfsdump -J /home | xfsrestore -J /mnt
- 確保 selinux 標籤被轉移
檢查
ls -Z /home
並ls -Z /mnt
匹配7.重命名家庭卷
解除安裝兩個主卷並相應地重命名它們
umount /home umount /mnt lvrename centos/home centos/old_home lvrename centos/new_home centos/home mount /home
您現在已經安裝了複製的較小的 /home。卷 centos/old_home 是最後一個仍在 sdb2 上的捲。此時,您的系統應該可以輕鬆啟動和執行,但您仍然需要擺脫 sdb。
- 清理
重新啟動並確保一切仍按預期工作後,您可以使用
lvremove centos/old_home
. 當您查看輸出時,pvs
您應該注意到 sdb2 應該完全未使用。此時您可以
vgreduce centos /dev/sdb2
,pvremove /dev/sdb2
因此“舊”驅動器不再是您的捲組的一部分。您現在可以關閉盒子並移除舊驅動器。