遠端:有一台 CentOS 7 的 Linux Server
近端:有一台新的 Server,未安裝作業系統,要做成跟遠端的 Server 一樣。
要將遠端的Server完整複製到近端。
[方法]
- 在近端 Server 用 Live CD 開機 (我使用 Arch Linux)。
- 使用 Live CD,將近端的新硬碟分割、format、mount。
- 使用 rsync,將遠端各掛載區資料複製到近端新硬碟。
- 近端 chroot 到掛載的新硬碟。
- 修改新硬碟的 /etc/fstab 掛載設定。
- 產生新的 GRUB 設定檔,並將 GRUB 寫入新硬碟的開機磁區。
[步驟]
- 因為我想將近端的分割區規劃弄得跟遠端一樣,所以先查看遠端 Server 的分割區資訊。
若想自行重新規畫的話,可不用管遠端 Server 的分割區設定,
根據自己喜好設定好新硬碟分割區後,可直接跳到複製資料的步驟(步驟12)。
只須注意新硬碟分割區的可用容量不要比遠端 Server 資料量小,避免空間不夠複製即可。 - 登入遠端 server。用 fdisk -l 查看遠端 Server 分割區資訊,可得知
有兩個分割區:/dev/sda1、/dev/sda2
LVM 有三個 Logical volume:/dev/mapper/centos-swap、/dev/mapper/centos-root、/dev/mapper/centos-home[root@localhost ~]# fdisk -l Disk /dev/sda: 499.6 GB, 499558383616 bytes, 975699968 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組 Disk label type: dos 磁碟識別碼:0x00097c5f 所用裝置 開機 開始 結束 區塊 識別號 系統 /dev/sda1 * 2048 1026047 512000 83 Linux /dev/sda2 1026048 975699967 487336960 8e Linux LVM Disk /dev/mapper/centos-swap: 8396 MB, 8396996608 bytes, 16400384 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組 Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組 Disk /dev/mapper/centos-home: 436.9 GB, 436945813504 bytes, 853409792 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組
- 使用 df -h 查看遠端 Server 掛載資訊、已用空間,可得知
/dev/mapper/centos-root 掛載在 /,已用 5.3 G
/dev/mapper/centos-home 掛載在 /home,已用 118M
/dev/sda1 掛載在 /boot,已用 159M
(tmpfs 是系統暫存所以不處理)
[root@localhost ~]# df -h 檔案系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 50G 5.3G 45G 11% / devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 92K 7.8G 1% /dev/shm tmpfs 7.8G 25M 7.8G 1% /run tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/mapper/centos-home 407G 118M 407G 1% /home /dev/sda1 497M 159M 339M 32% /boot
- 使用 cat /etc/fstab 查看遠端 Server 掛載資訊、分割區種類,可得知
/dev/mapper/centos-root 掛載在 /,種類為 xfs
/dev/mapper/centos-home 掛載在 /home,種類為 xfs
UUID=3cd1f4e1-f0dd-4087-baa7-8a7e9e9066e5 掛載在 /boot (使用 blkid 查看所有UUID,可知此為 /dev/sda1 的 UUID),種類為 xfs
/dev/mapper/centos-swap 掛載在 swap,種類為 swap[root@localhost ~]# cat /etc/fstab /dev/mapper/centos-root / xfs defaults 1 1 UUID=3cd1f4e1-f0dd-4087-baa7-8a7e9e9066e5 /boot xfs defaults 1 2 /dev/mapper/centos-home /home xfs defaults 1 2 /dev/mapper/centos-swap swap swap defaults 0 0
- 使用 pvdisplay -m 查看遠端 Server 的 LVM 設定。
Physical volume(物理卷、PV)、Logical volume(邏輯卷、LV)、Volume group(卷組、VG)可得知:
/dev/sda2 為 Physical volume。
一個 Volume group(centos) 裡面有三個 Logical volume(swap、home、root)[root@localhost ~]# pvdisplay -m --- Physical volume --- PV Name /dev/sda2 VG Name centos PV Size 464.76 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 118978 Free PE 0 Allocated PE 118978 PV UUID Obj4fL-KTYB-rymB-vKdo-hCB1-qeys-suKqcU --- Physical Segments --- Physical extent 0 to 2001: Logical volume /dev/centos/swap Logical extents 0 to 2001 Physical extent 2002 to 106177: Logical volume /dev/centos/home Logical extents 0 to 104175 Physical extent 106178 to 118977: Logical volume /dev/centos/root Logical extents 0 to 12799
- 由前面的資料,可總結出遠端 server 硬碟分割區的情況
/dev/sda1,Linux,xfs,設定為可開機(bootable)
/dev/sda2,Linux LVM,xfs,/dev/sda2 為 Physical volume,一個 Volume group(centos),三個 Logical volume(swap、home、root) - 用可開機光碟開機後,使用硬碟分割工具(cfdisk 或 fdisk)建立兩個分割區,如下
/dev/sda1,Linux,設定為可開機(bootable)
/dev/sda2,Linux LVM
註:若新硬碟須要先選 GPT、DOS、SGI、SUN 格式(disk labels),我是選 DOS - 新增物理卷(PV)
分割好硬碟,再來則是在 /dev/sda2 設定 LVM。
先在 /dev/sda2 建立物理卷(PV)pvcreate /dev/sda2
查看設定結果pvdisplay
- 新增卷組(VG)
新增一個名稱為 centos 的 VGvgcreate centos /dev/sda2
查看設定結果vgdisplay
- 新增邏輯卷(LV)
在 centos 新增名稱為 swap 的 LV,加上 "-C y" 參數,表示 contiguouslvcreate -C y -L 1G centos -n swap
在 centos 新增名稱為 home 的 LVlvcreate -L 500M centos -n home
在 centos 新增名稱為 root 的 LVlvcreate -l +100%FREE centos -n root
查看設定結果lvdisplay
- 格式化
mkfs.xfs /dev/sda1 mkfs.xfs /dev/centos/root mkfs.xfs /dev/centos/home mkswap /dev/centos/swap
(其他 swapon -va 沒用到) - 複製遠端 server 根目錄 "/" 掛載區的內容到近端新硬碟
將 dev/centos/root 掛載在 /mnt/ 底下mount /dev/centos/root /mnt
使用 rsync 複製遠端 server 裡面根目錄"/"掛載區的內容(-e "ssh -p 7000" 指定使用 ssh 傳輸,ssh port為 7000)rsync -xa -e "ssh -p 7000" root@遠端IP:/ /mnt/
- 複製完根目錄,應該會發現 /mnt/boot/、/mnt/home/ 兩個掛載區都是空的,這是因為不同的掛載區須分別複製。
先將 dev/centos/boot 掛載在 /mnt/boot/ 底下mount /dev/sda1 /mnt/boot
使用 rsync 複製遠端 server 裡面"/boot/"掛載區的內容rsync -xa -e "ssh -p 7000" root@遠端IP:/boot/ /mnt/boot/
將 dev/centos/home 掛載在 /mnt/home/ 底下mount /dev/centos/home /mnt/home
使用 rsync 複製遠端 server 裡面"/home/"掛載區的內容rsync -xa -e "ssh -p 7000" root@遠端IP:/home/ /mnt/home/
- chroot 到 /mnt,用複製回來的環境操作
arch-chroot /mnt
- 修改 /etc/fstab,改為新硬碟的設定
雖然,前面已經將分割區設定,設成跟遠端主機硬碟一樣,但複製回來的遠端主機 fstab 檔,裡面有 UUID 設定,須改成近端新硬碟分割區的 UUID(可使用 blkid 查看 UUID),或改成傳統的寫法 /dev/sda1,
編輯 /etc/fstabcp /etc/fstab /etc/fstab.bak vi /etc/fstab
將UUID=3cd1f4e1-f0dd-4087-baa7-8a7e9e9066e5 /boot xfs defaults 1 2
改成/dev/sda1 /boot xfs defaults 1 2
- 將 GRUB 寫入開機磁區
備份cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
產生新 grub 設定/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
寫入開機磁區/usr/sbin/grub2-install /dev/sda
註:
若沒產生新的grub設定,應該會出現 error no such device:....(一串UUID)....,可能還是可以開機,這是因為 /boot/grub2/grub.cfg 裡面也記錄了舊的 UUID=3cd1f4e1-f0dd-4087-baa7-8a7e9e9066e5 - 完成,即可使用新硬碟開機。
- 若有用 SeLinux,可能會沒辦法登入,須照忘記密碼處理方式重設root密碼。
註1:另一種可能沒很乾淨的複製方式。
近端先裝跟遠端相同版本的作業系統,登入近端後,將近端 /etc/fstab 備份起來。
然後複製遠端的 /、/home 資料到近端,但不要複製 /boot 和暫存資料,複製回來後,再將備份的 /etc/fstab 覆蓋回來,即可。
參考:
Copy running Linux systems to other machines over network
How to fix the UUID in Grub after restore from another machine?
在CentOS/RHEL 7上如何借助系统存储管理器管理LVM卷?
Linux有问必答:如何扩展XFS文件系统
LVM (简体中文) - ArchWiki
儲存空間管理與動態擴充-LVM
lvcreate
您好 請教一下個問題,關於arch-chroot 這指令沒辦法使用的問題
回覆刪除是否使用arch linux光碟開機,預設並沒有這指令可以用嗎?
您好,是顯示找不到指令嗎?
刪除可以找一下放指令的資料夾看有沒有,如果有,嘗試用打完整路徑執行看看。
我也是用光碟開機,有此指令可用。