FlossDoc: 請協力 GPLv3 的中文翻譯工作。
建立 LVM
FlossDoc,自由中文開源知識庫
使用 LVM 令檔案系統容量管理更靈活,相較於傳統使用實體磁碟
- 可以將多個磁碟或分割區分併成單一檔案系統。用多個市面可購得的 3TB 硬碟供立一個 6TB 或以上的單一大型檔案系統。
- 可以不用重新分割磁碟或格式化隨時加大或縮小檔案系統空間。
- 當有磁碟因損壞而要移除時,亦可以在檔案系統仍運作及存取下,將所有使用的磁碟空間移至其他正常磁碟,然後拔出損壞的磁碟。
- 隨時為存取中的檔案系統製作一個裝置快照 (snapshot),以進行一致性備份或不影響真實資料下進行要更變檔案系統的測試。
目录 |
LVM 架機總覽
整個 LVM 架構全要分成三層的元件:
- Physcial Volume (PV)
- Volume Group (VG)
- Logical Volume (LV)
先要將每一個要應用在 LVM 的包括整個磁碟或個別分割區 (partition) 等實體儲存裝置初始化成為 Physcial Volume (PV)。然後把一個或多個 PV 組成 Volume Group (VG),而每個 VG 就可以分配一些空間作為 Logical Volume (LV),被用作單一檔案系統或應用程式 (例如資料庫) 所使用。
建立 Physical Volume (PV)
您可以使用整個磁碟裝置或磁碟分割區 (disk partition) 作為 LVM 的 Physical Volume (PV)。要使用整個磁碟裝置作為 PV,該磁碟一定不可以有分割表 (partition table)。如果有分割表,需要先使用以下命令把磁碟的第一磁區完全重設為零:
dd if=/dev/zero of=PhysicalVolume bs=512 count=1
如果使用磁碟分割區作為 PV,則應該把該分割區類型設定為 0x8E'。
# fdisk -l /dev/sdc Disk /dev/sdc: 80.0 GB, 80025280000 bytes 255 heads, 63 sectors/track, 9729 cylinders, total 156299375 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3ea23c65 Device Boot Start End Blocks Id System /dev/sdc1 63 156299374 78149656 8e Linux LVM
初始化 Physical Volume
第一步先要使用命令 pvcreate 初始化各個會加入 LVM 的分割區成為 Physical Volume (PV):
# pvcreate /dev/sdc1 /dev/sdd1 Physical volume "/dev/sdc1" successfully created Physical volume "/dev/sdd1" successfully created
pvcreate 會為各 PV 加入 volume 標簽。
檢視 Physical Volume
初始化 PV 後,可以使用命令 lvmdiskscan、pvs、pvdisplay 或 pvscan 檢視新建的 PV 以確定初始化成功。
# lvmdiskscan /dev/ram0 [ 16.00 MiB] /dev/root [ 4.00 GiB] /dev/ram1 [ 16.00 MiB] /dev/sda1 [ 195.32 GiB] /dev/ram2 [ 16.00 MiB] /dev/sda2 [ 195.31 GiB] /dev/ram3 [ 16.00 MiB] /dev/ram4 [ 16.00 MiB] /dev/ram5 [ 16.00 MiB] /dev/ram6 [ 16.00 MiB] /dev/ram7 [ 16.00 MiB] /dev/ram8 [ 16.00 MiB] /dev/ram9 [ 16.00 MiB] /dev/ram10 [ 16.00 MiB] /dev/ram11 [ 16.00 MiB] /dev/ram12 [ 16.00 MiB] /dev/ram13 [ 16.00 MiB] /dev/ram14 [ 16.00 MiB] /dev/ram15 [ 16.00 MiB] /dev/sdc1 [ 74.53 GiB] LVM physical volume /dev/sdd1 [ 74.53 GiB] LVM physical volume 2 disks 21 partitions 0 LVM physical volume whole disks 2 LVM physical volume
pvscan 則掃描並列出系統中所有 LVM PV,每行列出一個 PV 的資訊:
# pvscan PV /dev/sdc1 lvm2 [74.53 GiB] PV /dev/sdd1 lvm2 [74.53 GiB] Total: 2 [149.06 GiB] / in use: 0 [0 ] / in no VG: 2 [149.06 GiB] # pvs PV VG Fmt Attr PSize PFree /dev/sdc1 lvm2 a- 74.53g 74.53g /dev/sdd1 lvm2 a- 74.53g 74.53g
而 pvdisplay 則用數行顯示各 PV 的大小和 Volume Group 等詳細資訊:
# pvdisplay "/dev/sdd1" is a new physical volume of "74.53 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 74.53 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID nwxYn5-bOPZ-MDfu-e6fw-Vz1i-g1zF-WJaODP "/dev/sdd1" is a new physical volume of "74.53 GiB" --- NEW Physical volume --- PV Name /dev/sdd1 VG Name PV Size 74.53 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID HauSHq-0Pi1-Lq1w-QYSA-fKkj-3u4B-iSwKAM
建立 Volume Group (VG)
接著,我們需要使用命令 「vgcreate NewVGName PVs...」 建立一個由一個或多個 PV 組成的 Volume Group (VG):
# vgcreate vg0 /dev/sdc1 /dev/sdd1 Volume group "vg0" successfully created
建立 VG 後,可以使用 pvs 或 pvscan 等檢視各 PV 的情況確定 VG 建立成功:
# pvs PV VG Fmt Attr PSize PFree /dev/sdc1 vg0 lvm2 a- 74.53g 74.53g /dev/sdd1 vg0 lvm2 a- 74.53g 74.53g # pvscan PV /dev/sdc1 VG vg0 lvm2 [74.53 GiB / 74.53 GiB free] PV /dev/sdd1 VG vg0 lvm2 [74.53 GiB / 74.53 GiB free] Total: 2 [149.06 GiB] / in use: 2 [149.06 GiB] / in no VG: 0 [0 ]
以上表示 /dev/sdc1 和 /dev/sdd1 而組合成為 vg0。
您亦可以使用 vgs 或 vgdisplay 檢視系統所有 VG 的情況:
# vgscan Reading all physical volumes. This may take a while... Found volume group "vg0" using metadata type lvm2 # vgs VG #PV #LV #SN Attr VSize VFree vg0 1 0 0 wz--n- 149.06g 149.06g # vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 149.06 GiB PE Size 4.00 MiB Total PE 38158 Alloc PE / Size 0 / 0 Free PE / Size 38158 / 149.06 GiB VG UUID yOVvxS-3OEE-OFsu-jR1e-sh1V-UyVX-gU5z4B
建立 Logical Volume (LV)
接著,可以使用命令 「lvcreate -L 大小 -n NewLVName VGName」在先建立的 VG 中建立 Logical Volume (LV)
# lvcreate -L 60g vg0 Logical volume "lv_home" created # lvcreate -L 50g -n lv_db vg0 Logical volume "lv_db" created
使用 lvscan、lvs 或 lvdisplay 檢視系統所有 LV 的情況:
# lvscan ACTIVE '/dev/vg0/lv_home' [60.00 GiB] inherit ACTIVE '/dev/vg0/lv_db' [50.00 GiB] inherit # lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert lv_home vg0 -wi-a- 60.00g vg_db vg0 -wi-a- 40.00g # lvdisplay --- Logical volume --- LV Name /dev/vg0/lv_home VG Name vg0 LV UUID 86oI20-4OJN-Rb3F-eksg-5nG0-77OG-44PxFW LV Write Access read/write LV Status available # open 0 LV Size 60.00 GiB Current LE 15360 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 --- Logical volume --- LV Name /dev/vg0/vg_db VG Name vg0 LV UUID mfvNA1-ZyBP-F6EC-9aPv-kwMw-whCs-W9ZuXW LV Write Access read/write LV Status available # open 0 LV Size 50.00 GiB Current LE 12800 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:3 # vgs VG #PV #LV #SN Attr VSize VFree vg0 2 2 0 wz--n- 149.06g 39.06g
使用 LV
搞定後,您可以格式化 LV 成為您需要的檔案系統並使用:
# mkfs -t ext4 /dev/vg0/vg_home # mkfs -t ext4 /dev/vg0/vg_db # mount -t ext4 /dev/vg0/vg_home /mnt # mv /home/* /mnt # umount /mnt # mount -t ext4 /dev/vg0/vg_db /mnt # mv /var/lib/mysql/* /mnt # umount /mnt # echo "/dev/vg0/vg_home /home ext4 errors=remount-ro 0 0" >>/etc/fstab # echo "/dev/vg0/vg_db /var/lib/mysql ext4 errors=remount-ro 0 0" >>/etc/fstab # mount -a

