<a target="_blank"></a>
<code>dd</code> 指令用于複制一個裝置/分區,原樣輸出到另外一個檔案/裝置/分區。
<code>dump</code> 指令用于備份 ext2 或者 ext3 檔案系統。可将目錄或整個檔案系統備份至指定的裝置,或備份成一個大檔案。
<code>restore</code> 指令是 <code>dump</code> 指令的逆過程,用于還原 <code>dump</code> 指令生成的備份檔案。
首先要求有一個可以正常啟動的分區,然後要有剩餘空間!(這裡有兩種情況:一個是某分區,一個是新磁盤。兩者類似,為了友善本文使用的是新磁盤的方式。)
使用虛拟機模拟了伺服器的真實情況:<code>/dev/sda1</code> 是正常系統啟動分區、<code>/dev/sdb1</code> 是新的磁盤分區。(必須注意 <code>/dev/sdb1</code> 的容量大于 <code>/dev/sda1</code>)
虛拟機設定及分區情況:

<code>dd if=/dev/sda1 of=/mnt/lvm/mbr.bin bs=512 count=1</code>
首先解除安裝 <code>/dev/sdb1</code>,然後在其上用 <code>pvcreate</code> 建立實體卷和 <code>vgcreate</code> 建立卷組 vgtest:
<code>umount /dev/sdb1 pvcreate /dev/sdb1</code>
<code>vgcreate vgtest /dev/sdb1</code>
卷組建立好之後,可以用 <code>vgs</code> 指令檢視卷組。
用 <code>lvs</code> 指令檢視邏輯卷,這個時候我們還沒有任何邏輯卷。開始建立邏輯卷和檔案系統:
<code>lvcreate -l 25g -n lvtest vgtest</code>
<code>mkfs.ext4 /dev/mapper/vgtest-lvtest</code>
首先備份 / 目錄。在 <code>dump</code> 指令前後輸入的 <code>date</code> 指令是為了檢視備份使用的時長。
<code>date && dump -0f /mnt/lvm/rootfs-20160824.bak / && date</code>
保險起見我們也備份一下 <code>/boot</code> 目錄:
<code>date && dump -0f /mnt/lvm/boot-20160824.bak /boot && date</code>
<code>restore -rf rootfs-20160828.bak boot-20160824.bak</code>
注意:這裡根分區(啟動分區)需要更改成實際要啟動的磁盤。否則不更改的話系統會出現應該使用<code>/dev/sdb1</code> lvm ,卻使用了原來的 <code>/dev/sda1</code> 的情況!
首先通過 <code>blkid</code> 檢視分區的 uuid:
<code>blkid</code>
然後修改 <code>/mnt/lvm/etc/fstab</code> 檔案(切換了跟分區之後将變成 <code>/etc/fstab</code>)中的根分區指向:
<code>vim /mnt/lvm/etc/fstab</code>
chroot 到新的分區裡面,然後檢查相應的分區設定。
<code>chroot /mnt/lvm</code>
注意:要 <code>chroot</code> 進入目錄檢視是否正确!并且确定防火牆 selinux 等的設定,最最最重要的是 openssh 要打開的!
<code>dd if=./mbr.bin of=/dev/mapper/vgtest-lvtest </code>
這樣可以讓新磁盤可以脫離源磁盤的引導。
chroot 進入新磁盤。并重建 /boot 目錄:
<code>chroot /mnt/lvm ls /boot/ rm -rf /boot/* yum install grub -y</code>
然後輸入:
<code>root (hd1,0)</code>
<code>setup (hd1)</code>
<code>quit</code>
這樣就将 grub 引導指向了新的磁盤。
重新開機可以看看是否有問題。
原文釋出時間為:2016-08-26
本文來自雲栖社群合作夥伴“linux中國”