如何將Linux系統(tǒng)轉(zhuǎn)移至LVM卷
朋友今天突然找我,說(shuō)是要把他的 Linux 系統(tǒng)的根分區(qū)磁盤(pán)擴(kuò)大。接到這個(gè)問(wèn)題,我馬上開(kāi)始查看下系統(tǒng)情況。是一臺(tái) CentOS 6.6 的系統(tǒng),有兩塊磁盤(pán)分別是:/dev/vda1 是 15G 的根卷,/dev/vda2 是 1G 的交換分區(qū),而整個(gè) /dev/vda 磁盤(pán)總大小是 21G( 有 5G 的 /dev/vda5 空閑空間)?,F(xiàn)在要求增大 /dev/vda1 分區(qū)。
后面我給朋友三個(gè)方案:
- ***個(gè)就是將 /dev/vda 上的空閑分區(qū)(/dev/vda5)隨意作為 /home、/var 之類(lèi)的掛載;
- 第二個(gè)就是做符號(hào)鏈接到 /dev/vda1,5G 加上 15G 也勉強(qiáng)擴(kuò)大了;
- ***一種也就是最麻煩的,做一個(gè) LVM,將數(shù)據(jù)遷移到 LVM、將 /dev/vda1 加入到 LVM,***實(shí)現(xiàn)系統(tǒng)的擴(kuò)容。
朋友選擇了***一種,后面測(cè)試數(shù)據(jù)備份我用了很多種辦法,網(wǎng)上推薦了 dd 以及 tar,***我還嘗試了 cpio、backup、dump,然后發(fā)現(xiàn)***一種 dump 的性能遠(yuǎn)遠(yuǎn)高于 dd。
本次教程也是從頭再試驗(yàn)一遍,并且記錄好便己便人。
警告!本文思路僅供參考!應(yīng)該根據(jù)你的實(shí)際情況予以調(diào)整。如果在生產(chǎn)服務(wù)器上進(jìn)行,請(qǐng)務(wù)必做好整個(gè)系統(tǒng)的全盤(pán)備份。操作不慎,有可能導(dǎo)致整個(gè)系統(tǒng)數(shù)據(jù)的丟失!本文作者及本站不對(duì)任何可能出現(xiàn)的風(fēng)險(xiǎn)承擔(dān)任何責(zé)任。
一、預(yù)備知識(shí)
了解什么是 dd 以及什么是 dump?
dd 命令用于復(fù)制一個(gè)設(shè)備/分區(qū),原樣輸出到另外一個(gè)文件/設(shè)備/分區(qū)。
dump 命令用于備份 ext2 或者 ext3 文件系統(tǒng)。可將目錄或整個(gè)文件系統(tǒng)備份至指定的設(shè)備,或備份成一個(gè)大文件。
備份好了用什么恢復(fù)?
restore 命令是 dump 命令的逆過(guò)程,用于還原 dump 命令生成的備份文件。
二、環(huán)境模擬
首先要求有一個(gè)可以正常啟動(dòng)的分區(qū),然后要有剩余空間!(這里有兩種情況:一個(gè)是某分區(qū),一個(gè)是新磁盤(pán)。兩者類(lèi)似,為了方便本文使用的是新磁盤(pán)的方式。)
使用虛擬機(jī)模擬了服務(wù)器的真實(shí)情況:/dev/sda1 是正常系統(tǒng)啟動(dòng)分區(qū)、/dev/sdb1 是新的磁盤(pán)分區(qū)。(必須注意 /dev/sdb1 的容量大于 /dev/sda1)
虛擬機(jī)設(shè)置及分區(qū)情況:
三、實(shí)戰(zhàn)部分
1、首先備份 MBR 主引導(dǎo)記錄
- dd if=/dev/sda1 of=/mnt/lvm/mbr.bin bs=512 count=1
2、創(chuàng)建 LVM 卷
首先卸載 /dev/sdb1,然后在其上用 pvcreate 創(chuàng)建物理卷和 vgcreate 創(chuàng)建卷組 vgtest:
- umount /dev/sdb1
- pvcreate /dev/sdb1
- vgcreate vgtest /dev/sdb1
卷組創(chuàng)建好之后,可以用 vgs 命令查看卷組。
用 lvs 命令查看邏輯卷,這個(gè)時(shí)候我們還沒(méi)有任何邏輯卷。開(kāi)始創(chuàng)建邏輯卷和文件系統(tǒng):
- lvcreate -L 25G -n lvtest vgtest
- mkfs.ext4 /dev/mapper/vgtest-lvtest
3、備份 / 目錄和 /boot 目錄
首先備份 / 目錄。在 dump 命令前后輸入的 date 命令是為了查看備份使用的時(shí)長(zhǎng)。
- date && dump -0f /mnt/lvm/rootfs-20160824.bak / && date
保險(xiǎn)起見(jiàn)我們也備份一下 /boot 目錄:
- date && dump -0f /mnt/lvm/boot-20160824.bak /boot && date
4、嘗試恢復(fù)
- restore -rf rootfs-20160828.bak boot-20160824.bak
5、修改啟動(dòng)文件
注意:這里根分區(qū)(啟動(dòng)分區(qū))需要更改成實(shí)際要啟動(dòng)的磁盤(pán)。否則不更改的話(huà)系統(tǒng)會(huì)出現(xiàn)應(yīng)該使用 /dev/sdb1 LVM ,卻使用了原來(lái)的 /dev/sda1 的情況!
首先通過(guò) blkid 查看分區(qū)的 UUID:
- blkid
然后修改 /mnt/lvm/etc/fstab 文件(切換了跟分區(qū)之后將變成 /etc/fstab)中的根分區(qū)指向:
- vim /mnt/lvm/etc/fstab
chroot 到新的分區(qū)里面,然后檢查相應(yīng)的分區(qū)設(shè)置。
- chroot /mnt/lvm
注意:要 chroot 進(jìn)入目錄查看是否正確!并且確定防火墻 SELinux 等的設(shè)置,最最最重要的是 OpenSSH 要打開(kāi)的!
6、恢復(fù) MBR 主引導(dǎo)記錄
- dd if=./mbr.bin of=/dev/mapper/vgtest-lvtest
7、修正 GRUB 引導(dǎo)
這樣可以讓新磁盤(pán)可以脫離源磁盤(pán)的引導(dǎo)。
chroot 進(jìn)入新磁盤(pán)。并重建 /boot 目錄:
- chroot /mnt/lvmls /boot/rm -rf /boot/*yum install grub -y
然后輸入:
- root (hd1,0)setup (hd1)quit
這樣就將 GRUB 引導(dǎo)指向了新的磁盤(pán)。
重啟可以看看是否有問(wèn)題。
四、總結(jié)
所以說(shuō)裝系統(tǒng)的時(shí)候就使用 LVM 就很好,不然又是一頓折騰。 何必呢?