FlossDoc: 請協力 GPLv3 的中文翻譯工作。

建立 LVM

FlossDoc,自由中文開源知識庫

Jump to: navigation, search

使用 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

請參看

外部連結

Personal tools