使用Linux lvm

李保銀發表於2019-03-11

概覽

這次是要給伺服器的安裝一個MySQL資料庫系統,需要一個比較大的空間,而且要能後期靈活增加空間,所以把已有的硬碟做成lvm是最好的選擇。邏輯卷是一個很好用的磁碟管理工具,就像它的名字,你操作的是邏輯卷而不是直接使用物理磁碟。我們可以方便的調整邏輯卷的大小而不會損壞資料,隨時把新磁碟加入邏輯卷管理來擴充儲存空間。lvm的結構如下圖所示

iamge
如圖所示,磁碟和磁碟的分割槽可以加入一個物理卷(PV),一個或者多個物理卷組成一個卷組(VG),在卷組的基礎上可以建立邏輯卷(LV)。 本例中有12塊4T大小的硬碟,我們把這12塊硬碟都加入lvm,切分出其中的一部分建立lv並掛在到/app。大致過程是:

  • 給每個硬碟分一個區
  • 把所有的分割槽建立為物理卷
  • 把物理卷加入卷組
  • 在卷組的基礎上建立邏輯卷
  • 格式化邏輯卷
  • 掛載邏輯卷

操作過程

安裝parted

使用parted給硬碟分割槽,因為是大於2T的硬碟,所以我們採用parted劃分硬碟而不是傳統的fdisk。大部分Linux系統會有parted的安裝,如果沒有請使用各自的方法安裝,此處僅示範centos和Ubuntu的安裝

$ sudo apt install parted
複製程式碼
$ sudo yum install parted
複製程式碼

給硬碟分割槽

我們這次把整塊硬碟作一個分割槽全部加入一個物理卷中(或許物理磁碟不分割槽也能直接加入物理卷,但我沒有試驗成功,所以這次我把整個磁碟分到一個分割槽中),使用parted進行分割槽

$ sudo parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)  
複製程式碼

檢視已有的分割槽資訊

(parted) print                                                            
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 4001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: pmbr_boot

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  4001GB  4001GB               sdb1
複製程式碼

這是一個分好的硬碟分割槽資訊一共4T,分割槽表型別是的gpt,把所有空間分到一個分割槽裡了。如果是一個新硬碟需要建立分割槽表和分割槽:

(parted) mkpart
Partition name?  []? sdb1                                                   
File system type?  [ext2]? xfs                                           
Start? 0                                                                  
End? 4001G
Warning: The resulting partition is not properly aligned for best performance.  
Ignore/Cancel? i  
(parted) quit
複製程式碼

退出儲存分割槽資訊,我們這裡應為業務需要把整個盤放到一個分割槽裡了,當然你也可以分多個區,計算好開始和結束的區間就行。後面11塊硬碟相同的操作方式做好分割槽準備,碟符大致:sdb1, sdc1,sdd1...sdm1

把分割槽加入物理卷

把12個分割槽都加入物理卷

$ sudo pvcreate /dev/sdb1
$ sudo pvcreate /dev/sdc1
...
$ sudo pvcreate /dev/sdm1
複製程式碼

建立完物理卷後,執行pvdisplay檢視一下建好的物理卷,執行完pvdisplay後顯示的結果大致如下,我只顯示了一個pv的。

$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               <3.64 TiB / not usable 3.80 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              953861
  Free PE               0
  Allocated PE          953861
  PV UUID               70p52P-TafB-YkwL-YG8P-Bo0x-3C0i-coKJMu
複製程式碼

當然如果有問題,也可以使用 pvremove刪除物理卷

$ sudo pvremove /dev/sdb1
複製程式碼

加入卷組

把建好的12個物理卷加入一個卷組,這是我們的業務需求,把12個物理卷加到一個卷組中,你也可以根據自己的需求靈活配置。下列命令就是把12個物理卷加入一個名稱為vgapp的卷組裡。

$ sudo vgcreate vgapp /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1 /dev/sdm1
複製程式碼

使用vgdisplay檢視已建的卷組

$ sudo vgdisplay
  --- Volume group ---
  VG Name               vgapp
  System ID             
  Format                lvm2
  Metadata Areas        12
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                12
  Act PV                12
  VG Size               43.66 TiB
  PE Size               4.00 MiB
  Total PE              11446332
  Alloc PE / Size       0 / 0
  Free  PE / Size       6203452 / 23.66 TiB
  VG UUID               Kc9ybM-8ZTw-OOPY-opX5-Azgc-dbgB-HMCeIs
複製程式碼

從輸出中,我們可以看見卷組的使用量/總量。只要在這個卷組中還有可用空間,我們就可以隨意建立邏輯卷。 如果卷組分配不合理也可以使用vgremove刪除卷組重新建

$ sudo vgremove vgapp
複製程式碼

建立邏輯卷

上一步我們已經建好了一個名稱為vgapp的卷組,現在我們就可以在這個卷則上建一個邏輯捲了。我們需要用到大概20T空間在名為vgapp的卷組上建立一個名為lvapp的邏輯卷.

sudo lvcreate -L 20T -n lvapp  vgapp
複製程式碼

這裡的是建立了一個預設的Linear邏輯卷,其實還支援其他的方式建立邏輯卷,比如條帶化卷(類似raid0),映象卷(類似raid1)或者它們的集中組合,這些我以後再研究。建立完成後使用lvdisplay檢視剛建好的邏輯卷

$ sudo lvdisplay
複製程式碼

結果如下

$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/vgapp/lvapp
  LV Name                lvapp
  VG Name                vgapp
  LV UUID                1CpWwd-b4Wf-fdqP-gMPO-1Jb8-0w0h-idvXBo
  LV Write Access        read/write
  LV Creation host, time xjwlmq-16f-c07-sev-hw2288v3-02u10, 2019-02-28 13:25:34 +0800
  LV Status              available
  # open                 1
  LV Size                20.00 TiB
  Current LE             5242880
  Segments               6
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
複製程式碼

使用邏輯卷

邏輯卷建好了就可以把它格式化並掛在到系統的某個目錄開始使用了

$ sudo mkfs.xfs /dev/vgapp/lvapp
$ sudo mkdir /app
$ sudo mount /dev/vgapp/lvapp /app/
複製程式碼

掛載完成後就可以看看我們的勞動成果

$ sudo df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/sda2                1.0T  1.2G 1023G   1% /
devtmpfs                  63G     0   63G   0% /dev
tmpfs                     63G     0   63G   0% /dev/shm
tmpfs                     63G  553M   63G   1% /run
tmpfs                     63G     0   63G   0% /sys/fs/cgroup
/dev/sda1                509M  128M  381M  26% /boot
/dev/mapper/vgapp-lvapp   20T   33M   20T   1% /app
tmpfs                     13G     0   13G   0% /run/user/1001

複製程式碼

其中20T那個/app目錄掛載的就是我們剛建的邏輯卷。最後別忘記把這放到/etc/fstab中實現開機掛載

$ sudo cat /etc/fatab

#
# /etc/fstab
# Created by anaconda on Sun Oct 14 10:36:44 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=a7f90806-f11c-41ca-8210-2a758d38aed8 /                       xfs     defaults        0 0
UUID=ca13fb4a-64a6-4a2b-9847-c309145ae3b4 /boot                   xfs     defaults        0 0
/dev/vgapp/lvapp			  /app		   	  xfs	  defaults	  1 2
複製程式碼

後記

lvm的功能強大的很,以後可以多研究一下,除了支援類似raid的邏輯卷外,還有快照等功能。

參考文件

  • https://linux.cn/article-3218-1.html
  • https://linux.cn/article-9536-1.html
  • https://www.computerhope.com/unix/parted.htm
  • https://blog.csdn.net/Man_In_The_Night/article/details/86575198
  • http://www.cnblogs.com/onlybobby/p/7018788.html

相關文章