Linux系統如何遷移至LVM磁盤


今天遇到一個問題,算是比較嚴重的把。就是要把當前系統轉移到 LVM 卷里面去,下面有一些發生過程介紹。 

不感興趣可以直接跳過,看實戰部分《如何遷移系統至LVM卷》

朋友今天突然找我,說是要把系統的根分區磁盤擴大。接到這個問題,我馬上開始查看下系統情況。是一台 CentOS 6.6 的系統,有倆塊磁盤分別 vda1 是 15G 根,vda2 的 1G swap ,總大小是 21G 的一塊 vda !現在要求去增大 vda1 分區。

后面我給朋友三個方案:

  • 第一個就是將 vda5 隨意作為 home、var 之類的掛載;
  • 第二個就是做快捷方式 ln鏈接到vda1 ,5G 加上 15G 也勉強擴大了;
  • 最后一種也就是最麻煩的,加大 vda、做一個LVM,將數據遷移到LVM、將vda1加入到LVM,最后實現系統的擴容。

朋友選擇了最后一種,我用了很多種辦法。網上說推薦是dd再是tar最后嘗試cpio、backup、dump,然后我沒辦法用了最后一種發現效果遠遠高於dd

本次教程也是從頭再試驗一遍,並且記錄好便己便人。

 警告:本文思路僅供參考!應該根據你的實際情況予以調整。如果在生產服務器上進行,請務必做好整個系統的全盤備份。操作不慎,有可能導致整個系統數據的丟失!本文作者及本站不對任何可能出現的風險承擔任何責任。

 

一、預備知識:

1、了解,什么是dd以及什么是dump?

dd命令用於復制文件並對原文件的內容進行轉換和格式化處理。
  --對於dd命令,僅僅只是 介紹。dd命令比 Windows 的下 ghost 更好,Linux下也是極棒的。
 
dump命令用於備份ext2或者ext3文件系統。可將目錄或整個文件系統備份至指定的設備,或備份成一個大文件。 
   --對於dump命令, 備份用到。dump可以幫助我們將分區進行打包成一個文件。

2、嘗試,備份的需要如何恢復?

restore 命令是 dump 命令的逆過程,用於還原 dump 命令生成的備份文件。
   --這也是很重要的恢復命令。可以將我們的 dump 文件進行恢復。
 
/etc/fstab 文件描述系統中各種文件系統的信息,一般而言,應用程序僅讀取這個文件,而不對它進行寫操作。
  --這個文件需要系統管理員進行更新,確保系統讀取時正確執行。 
 
/boot/grub/grub.conf 文件是 grub 配置文件, grub 才能找到 kernel,系統才能正常啟動。
  --這個文件也是需要我們更改的,制定grub讀取新分區
 

 
首先要求有一個可以正常啟動的分區,然后要有剩余空間!(必須注意 /dev/sdb1 的容量大於  /dev/sda1,且/dev/sdb1應為LVM卷

我用虛擬機模擬了服務器的真實情況:/dev/sda1 是正常系統啟動分區、/dev/sdb1 是新的磁盤分區。

步驟一、用dump備份整個根分區,使用restore恢復

步驟二、更改備份好的系統fstab文件以及更改boot下引導文件

小竅門:Linux自帶的光盤一般都會急救的功能,善於利用!

 

二、環境模擬:

虛擬機設置及分區情況:

這里有兩種情況:一個是某分區,一個是新磁盤。兩者類似,為了方便本文使用的是新磁盤的方式。

 

三、實戰部分:

 
 
注意:我使用的是一個sdb1作為lvm磁盤,sdb2作為boot磁盤(為了方便后面的引導,因為grub不支持lvm磁盤引導boot)

I、創建LVM卷

1、首先要確保系統是安裝lvm組件的,可以使用rpm -qa查詢信息

2、然后卸載  /dev/sdb1,然后在其上用  pvcreate 創建物理卷和  vgcreate 創建卷組 vgtest

pvcreate /dev/sdb1

vgcreate vgtest /dev/sdb1

lvcreate -L 25G -n lvtest vgtest

mkfs.ext4 /dev/mapper/vgtest-lvtest

 

II、備份MBR引導文件。

dd if=/dev/sda1 of=/mnt/grub/mbr.bin bs=512 count=1

 

III、備份 / 目錄和 /boot 目錄

1、備份 / 目錄。在 dump 命令前后輸入的 date 命令是為了查看備份使用的時長。

date && dump -0f /mnt/lvm/rootfs-20160824.bak / && date

2、為了安全引導我們也備份一下 /boot 目錄:

date && dump -0f /mnt/grub/boot-20160824.bak /boot && date

IV、嘗試恢復

1、還原 dump 的備份文件(/boot分區默認已包括在/分區)

date && restore -rf rootfs-20160824.bak && date

 

注意:這里boot文件需要更改成實際要啟動的磁盤。

 

2、還原 MBR 的備份文件

dd if=/mnt/grub/mbr.bin of=/dev/sdb2

 

注意:這里使用dd命令恢復了之前備份的MBR文件。

VI、啟動文件

注意:這里為了體現是chroot的,將主機名改成了NEW。一定要chroot進入目錄查看是否能啟動!並且確定防火牆SELinux的設置,最最最重要的OPENSSH要打開的!

1、首先通過 blkid 查看分區的 UUID:

2、然后同步修改 /etc/fstab 文件以及切換了跟分區之后將變成的 /etc/fstab 中的根分區指向:

3、重啟生效

 

注意:這里我重啟了一下,同時可以看出我的fstab是ok的並且都生效了。 

 
VII、至此:
 
到這里為止,我們已經完成了數據的轉移:在我們嘗試chroot進入系統時就可以查看數據信息是否完整是否有丟失。
 
而下面更為重要的就是如何去恢復GRUB引導:讓新磁盤可以脫離源磁盤的引導。
 
chroot進入新磁盤:

 

輸入:root   (hd1,0)

輸入:setup  (hd1)

再次輸入:quit

備注:如果通過上面的操作還是無法正常進入系統,可以嘗試進入DVD急救模式嘗試其他。

 

tip:這里僅僅只是小建議,可以嘗試使用CentOS自帶的急救模式。也可以選擇CLI完成操作!
 
tip:同上。僅僅為了向大家說明最后最后還需要更改啟動項選項!
注意:Virtualbox使用F12選擇新磁盤就好、VMware需要按F2進入BIOS並使用“+-”完成啟動項的調試。
 
如果引導還有問題推薦看這篇文章 http://os.51cto.com/art/201003/185574.htm
 
VIII、總結:
 
所以說裝系統的時候就使用LVM就很好,不然又是一頓折騰。
 
何必呢?但是技多不壓身,會些更裝逼嘛~
 

VVI、其他:
當時我寫這篇文章時候犯了幾個錯誤,比較重要的記下來。
第一個:是當時沒有先百度,查看GRUB對LVM的問題(雖然現在的我知道怎么GRUB啟動LVM,但是當時是不知道)
第二個:  居然不知道boot要單獨分區
第三個:改了這個文件,忘了那個文件
第四個:為了圖方便使用了/dev/sdx這樣形式,應該用UUID
第五個:疲勞寫作,第二天我就突然寫完這篇文章了...
 
最最后,系統移動至LVM磁盤一定是可以得。改日我用服務器現場移動,到時候再給新文章!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM