7.3 數據搬家 在移除舊硬碟前,要把其上的數據轉移到新硬碟上。在轉移數據時,不要求卸載文件系統,但建議在數據轉移前進行備份,以防轉移進程中意外導致數據丟失。 pvmove用來實現數據轉移,根據數據量的多少,它可能要使用大量的時間,並可降低邏輯卷的性能,因此要在系統不太忙時操作。 # pvmove /dev/hdb /dev/sdf pvmove -- moving physical extents in active volume group "test_vg" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? y pvmove -- 249 extents of physical volume "/dev/hdb" successfully moved 7.4 移除未用硬碟 當數據被轉移到其它硬碟后,就可以從卷組中刪除這塊不再使用的硬碟: # vgreduce dev /dev/hdb vgreduce -- doing automatic backup of volume group "test_vg" vgreduce -- volume group "test_vg" successfully reduced by physical volume: vgreduce -- /dev/hdb 從此,卷組test_vg不再使用IDE硬碟/dev/hdb,這塊硬碟可以從機器中拆下或用作它途。 8 遷移卷組到其它系統 把一個卷組轉移到其它系統是很容易的(如更換伺服器),這要用命令vgexport與vgimport。 8.1 卸載文件系統 為整體搬遷卷組,應首先把它從文件系統中卸載,如: # unmount /mnt/design/users 8.2 設置卷組為非活動狀態 把卷組從內核中卸載,以避免任何對它可能的操作: # vgchange -an test_vg vgchange -- volume group "test_vg" successfully deactivated 8.3 Export 卷組 這個操作不是必須的,便它可以防止系統對卷組的訪問: # vgexport test_vg vgexport -- volume group "test_vg" sucessfully exported 當機器關機后,構成卷組的硬碟就可被轉移到新的伺服器上。 8.4 Import 卷組 在新的伺服器上,可用pvscan查看卷組情況,如在這台計算機上,硬碟新的設備為/dev/sdb,使用pvscan可有: # pvscan pvscan -- reading all physical volumes (this may take a while...) pvscan -- inactive PV "/dev/sdb1" is in EXPORTED VG "test_vg" pvscan -- inactive PV "/dev/sdb2" is in EXPORTED VG "test_vg" pvscan -- total: 2 / in use: 2 / in no VG: 0 現可以import卷組test_vg (同時也激活它)以安裝其上的文件系統 # vgimport test_vg /dev/sdb1 /dev/sdb2 vgimport -- doing automatic backup of volume group "test_vg" vgimport -- volume group "test_vg" successfully imported and activated 8.5 安裝文件系統 # mkdir -p /mnt/design/users # mount /dev/test_vg/users /mnt/design/users 在完成以上操作后,原卷組在新的伺服器上就可使用了。 9 分割卷組 這種情況是:需要在系統中加入新的卷組,但沒有其它可用新硬碟,而已有的卷組中還有大量空間可用。如向系統加入一個"design"卷組。 9.1 檢查可用空間 # pvscan pvscan -- reading all physical volumes (this may take a while...) pvscan -- ACTIVE PV "/dev/sda" of VG "dev" pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" pvscan -- ACTIVE PV "/dev/sde" of VG "ops" pvscan -- ACTIVE PV "/dev/sdf" of VG "dev" pvscan -- ACTIVE PV "/dev/sdg1" of VG "ops" pvscan -- ACTIVE PV "/dev/sdg2" of VG "dev" pvscan -- total: 8 / in use: 8 / in no VG: 0 我們決定把/dev/sdg1與/dev/sdg2分配組design,但首先要把其上的物理塊移到其它卷的空閑空間中(如把卷組dev移到/dev/sdf,卷組ops移到/dev/sde)。 9.2 從選定硬碟移出數據 由於硬碟上的邏輯卷仍在使用,故首先要轉移它們的數據。 把所有在使用的物理塊從/dev/sdg1上轉移到/dev/sde,及從/dev/sdg2轉移到/dev/sdf。 # pvmove /dev/sdg1 /dev/sde pvmove -- moving physical extents in active volume group "ops" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? y pvmove -- doing automatic backup of volume group "ops" pvmove -- 141 extents of physical volume "/dev/sdg1" successfully moved
# pvmove /dev/sdg2 /dev/sdf pvmove -- moving physical extents in active volume group "dev" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? y pvmove -- doing automatic backup of volume group "dev" pvmove -- 91 extents of physical volume "/dev/sdg2" successfully moved 9.3 創建新卷組 現在把/dev/sdg2從卷組dev從分割出並加入到新卷組design中。我們可用vgreduce與vgcreate完成工作,但vgsplit此時更方便: # vgsplit dev design /dev/sdg2 vgsplit -- doing automatic backup of volume group "dev" vgsplit -- doing automatic backup of volume group "design" vgsplit -- volume group "dev" successfully split into "dev" and "design" 9.4 移除剩餘的卷 接下來的工作 把/dev/sdg1從卷組ops中分出並加入卷組design: # vgreduce ops /dev/sdg1 vgreduce -- doing automatic backup of volume group "ops" vgreduce -- volume group "ops" successfully reduced by physical volume: vgreduce -- /dev/sdg1
# vgextend design /dev/sdg1 vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte vgextend -- doing automatic backup of volume group "design" vgextend -- volume group "design" successfully extended 9.5 建立新邏輯卷及文件系統 在卷組design上建立邏輯卷,為今後的方便,現只使用一部分空間: # lvcreate -L750M -n users design lvcreate -- rounding up size to physical extent boundary "752 MB" lvcreate -- doing automatic backup of "design" lvcreate -- logical volume "/dev/design/users" successfully created
# mke2fs /dev/design/users mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09 Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 96384 inodes, 192512 blocks 9625 blocks (5.00<!-- ) reserved for the super user First data block=0 6 block groups 32768 blocks per group, 32768 fragments per group 16064 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840
# mkdir -p /mnt/design/users # mount /dev/design/users /mnt/design/users/ 現在就可使用卷組design。為方便使用,可把下面一行加入文件/etc/fstab中: /dev/design/user /mnt/design/users ext2 defaults 1 2 10 轉變根文件系統為LVM 注意:強烈要求在進行下面的操作前對系統進行備份,並且把/文件系統建立在LVM上會導致系統升級很複雜。 在下面的例子中,系統除了/boot外都安裝在同一個分區中,文件系統的情況為: /dev/hda1 /boot /dev/hda2 swap /dev/hda3 / 進行轉換的一個必要條件是硬碟上還有足夠的空間給分區/dev/hda4創立LVM並把/分區的內容都複製到LVM上,否則: 1./分區還有至少一半空間空閑,可以縮減/分區,並把分出的空間劃分到分區/dev/hda4; 為方便可用GNU parted工具:ftp://ftp.gnu.org/pub/gnu/parted;它可縮減帶有文件系統的分區。同樣也可用resize2fs與fdisk完成這個操作; 2.硬碟上已無足夠空間,必須使用第二塊硬碟,如/dev/hdb。 在完成以上準備及備份系統后,可繼續以下步驟: 1.確認使用的Linux內核支持LVM,並且在編譯時設置了 CONFIG BLK DEV RAM 與 CONFIG BLK DEV INITRD 。 2.設置/dev/hda4分區類型為LVM(8e): # fdisk /dev/hda Command (m for help): t Partition number (1-4): 4 Hex code (type L to list codes): 8e Changed system type of partition 4 to 8e (Unknown) Command (m for help): w 3.設置LVM: "初始化LVM (vgscan) # vgscan "轉變分區為PV: # pvcreate /dev/hda4 "建立卷組: # vgcreate vg /dev/hda4 "建立邏輯卷用以存放根系統:(這裡假設空間為250MB) # lvcreate -L250M root vg 4.在邏輯卷上建立文件系統並把系統複製到其上: # mke2fs /dev/vg/root # mount /dev/vg/root /mnt/ # find / -xdev | cpio -pvmd /mnt 5.修改新系統的fstab文件/mnt/etc/fstab,使/安裝到/dev/vg/root: /dev/hda3 / ext2 defaults 1 1 改變為: /dev/vg/root / ext2 defaults 1 1 6.創建LVM初始化RAM盤: # lvmcreate_initrd 此處要確認為lvmcreate_init給出正確的initrd image文件名,它應在/boot/ 目錄下。 7. 在/etc/lilo.conf 中為LVM加入新入口項,其形式如下: image = /boot/KERNEL_IMAGE_NAME label = lvm root = /dev/vg/root initrd = /boot/INITRD_IMAGE_NAME ramdisk = 8192 此處 KERNEL IMAGE NAME是支持LVM的內核,INITRD IMAGE NAME 指由lvmcreate_initrd建立的initrd image。如果LVM的配置很多,可以把ramdisk設置的大一些:此處為8192,預設為4096。在lvmcrate_initrd的輸出中有如下一行: lvmcreate_initrd -- making loopback file (6189 kB) 其中括弧中的數值為實際所需大小。 8.運行LILO,設置BOOT扇區: # lilo 9.重啟計算機,在LILO提示符處輸入"lvm" 啟動計算機,此時系統的根文件系統是新建立的邏輯卷。此後可在LILO配置文件/etc/lilo.conf中加入以下一行: default=lvm 並運行lilo設置預設啟動項為lvm。 如果系統未能正常啟動,可能的原因是內核不支持LVM、initrd image不正確等等。 10.在正常啟動后,就可把硬碟其它分區:/dev/hda3加入LVM。 "首先設置分區類型為 8e(LVM) # fdisk /dev/hda
Command (m for help): t Partition number (1-4): 3 Hex code (type L to list codes): 8e Changed system type of partition 3 to 8e (Unknown) Command (m for help): w "把它初始化為PV,並加入卷組中: # pvcreate /dev/hda3 # vgextend vg /dev/hda3 11 共享LVM卷 LVM不支持物理共享訪問,這會導致數據的丟失。 在使用fibre-channel 或shared-SCSI 的環境中,多台計算機以物理方式直接訪問一組硬碟,於是可以使用LVM把這些硬碟分為不同的邏輯卷。如果需要共享數據,則應使用GFS。 12 參考文獻 AJ Lewis,LVM HOWTO,(http://tldp.org/HOWTO/LVM-HOWTO/),Sistina Software, Inc。