Centos7

小型設備上的centos7 xfs lmv複製

  • January 8, 2020

我將重新提出一個一周前在 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/sda1mount -o remount,ro /boot並複製分區dd if=/dev/sda1 of=/dev/sdb1

  1. 交換驅動器並確保 sdb 啟動

交換 sda 和 sdb。在新的 sda上安裝引導載入程序,並確保在新的 sdb(即原始驅動器)未連接時引導載入程序仍然載入核心。啟動會因為沒有根捲而出現恐慌,但您現在知道它可以啟動。重新連接sdb

  1. 擴展您的捲組

像這樣將新的 sda2 添加到您的捲組中: pvcreate /dev/sda2vgextend centos /dev/sda2

  1. 移動你的交換和根卷

以下命令不會將的捲*複製到新驅動器上。*但是,將保留在同一卷組中

pvmove -n swap /dev/sdb2 /dev/sda2
pvmove -n root /dev/sdb2 /dev/sda2
  1. 複製你的 /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
  1. 確保 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

您現在已經安裝了複製的較小的 /home。卷 centos/old_home 是最後一個仍在 sdb2 上的捲。此時,您的系統應該可以輕鬆啟動和執行,但您仍然需要擺脫 sdb。

  1. 清理

重新啟動並確保一切仍按預期工作後,您可以使用lvremove centos/old_home. 當您查看輸出時,pvs您應該注意到 sdb2 應該完全未使用。

此時您可以vgreduce centos /dev/sdb2pvremove /dev/sdb2因此“舊”驅動器不再是您的捲組的一部分。

您現在可以關閉盒子並移除舊驅動器。

引用自:https://serverfault.com/questions/861522