新硬碟建立LVM系統過程。
實體卷操作指令:pvcreate,pvscan,pvdisplay.
卷組操作指令:vgcreate,vgdisplay.
邏輯卷操作指令:lvcreate,lvdisplay.
Linx卷管理詳解
VG LV PV
作者:吳偉龍
一、 前言
每個Linux使用者在安裝Linux時 都會遇到這樣的困境:在為系統分區時,如何精确評估和配置設定各個硬碟分區的容量,因為系統管理者不但要考慮到目前某個分區需要的容量,還要預見該分區以後可能需要的容量的最大值。因為如果估計不準确,當遇到某個分區不夠用時管理者可能甚至要備份整個系統、清除硬碟、重新對硬碟分區,然後恢複資料到新分區。
雖然現在有很多動态調整磁盤的工具可以使用,例如Partation Magic等等,但是它并不能完全解決問題,因為某個分區可能會再次被耗盡;另外一個方面這需要重新開機系統才能實作,對于很多關鍵的伺服器,停機是不可接受的,而且對于添加新硬碟,希望一個能跨越多個硬碟驅動器的檔案系統時,分區調整程式就不能解決問題。
是以完美的解決方法應該是在零停機前提下可以自如對檔案系統的大小進行調整,可以友善實作檔案系統跨越不同磁盤和分區。那麼我們可以通過邏輯盤卷管理(LVM,Logical Volume Manager)的方式來非常完美的實作這一功能。
LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,他是磁盤管理的另一種工具,就目前基本上所有作業系統均支援,LVM是建立在硬碟和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。通過LVM系統管理者可以輕松管理磁盤分區,如:将若幹個磁盤分區連接配接為一個整塊的卷組(volume group),形成一個存儲池。管理者可以在卷組上随意建立邏輯卷組(logical volumes),并進一步在邏輯卷組上建立檔案系統。管理者通過LVM可以友善的調整存儲卷組的大小,并且可以對磁盤存儲按照組的方式進行命名、管理和配置設定,例如按照使用用途進行定義:“DBdata”和“DBSoft”,而不是使用實體磁盤名“sda”和“sdb”或”hda”和”hdb”。而且當系統添加了新的磁盤,通過LVM管理者就不必将磁盤的檔案移動到新的磁盤上以充分利用新的存儲空間,而是直接擴充檔案系統跨越磁盤即可,架構可以參考如下圖:
二、 LVM基本術語
前面談到,LVM是在磁盤分區和檔案系統之間添加的一個邏輯層,來為檔案系統屏蔽下層磁盤分區布局,提供一個抽象的盤卷,在盤卷上建立檔案系統。首先我們讨論以下幾個LVM術語:
實體存儲媒體(The physical media)
這裡指系統的儲存設備:硬碟,如:/dev/hda、/dev/sda等等,是存儲系統最低層的存儲單元。
實體卷(physicalvolume)
實體卷就是指硬碟分區或從邏輯上與磁盤分區具有同樣功能的裝置(如RAID),是LVM的基本存儲邏輯塊,但和基本的實體存儲媒體(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
卷組(Volume Group)
LVM卷組類似于非LVM系統中的實體硬碟,其由實體卷組成。可以在卷組上建立一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個實體卷組成。
邏輯卷(logicalvolume)
LVM的邏輯卷類似于非LVM系統中的硬碟分區,在邏輯卷之上可以建立檔案系統(比如/home或者/usr等)。
PE(physical extent)
每一個實體卷被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編号的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,預設為4MB。
LE(logical extent)
邏輯卷也被劃分為被稱為LE(Logical Extents) 的可被尋址的基本機關。在同一個卷組中,LE的大小和PE是相同的,并且一一對應。
首先可以看到,實體卷(PV)被由大小等同的基本單元PE組成。
一個卷組由一個或多個實體卷組成:
從上圖可以看到,PE和LE有着一一對應的關系。邏輯卷建立在卷組上。邏輯卷就相當于非LVM系統的磁盤分區,可以在其上建立檔案系統。
下圖是磁盤分區、卷組、邏輯卷和檔案系統之間的邏輯關系的示意圖:
和非LVM系統将包含分區資訊的中繼資料儲存在位于分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的中繼資料也是儲存在位于實體卷起始處的VGDA(卷組描述符區域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。
系統啟動LVM時激活VG,并将VGDA加載至記憶體,來識别LV的實際實體存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來通路實際的實體位置。
三、 安裝LVM
首先确定系統中是否安裝了lvm工具:
[root@jetsen ~]# rpm -qa|grep lvm
system-config-lvm-1.1.5-1.0.el5
lvm2-2.02.46-8.el5
如果指令結果輸入類似于上例,那麼說明系統已經安裝了LVM管理工具;如果指令沒有輸出則說明沒有安裝LVM管理工具,則需要從網絡下載下傳或者從CD光牒裝LVM rpm工具包。
安裝了LVM的RPM軟體包以後,要使用LVM還需要配置核心支援LVM。RedHat預設核心是支援LVM的,如果需要重新編譯核心,則需要在配置核心時,進入Multi-device Support (RAID and LVM)子菜單,選中以下兩個選項:
[*]Multiple devices driver support (RAID and LVM)
<*>Logical volume manager (LVM) Support
然後重新編譯核心,即可将LVM的支援添加到新核心中。
為了使用LVM,要確定在系統啟動時激活LVM,幸運的是在RedHat7.0以後的版本,系統啟動腳本已經具有對激活LVM的支援,在/etc/rc.d/rc.sysinit中有以下内容:
# LVMinitialization
if [ -e/proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
action$"Setting up Logical Volume Management:" /sbin/vgscan &&/sbin/vgchange -a y
fi
其中關鍵是兩個指令,vgscan指令實作掃描所有磁盤得到卷組資訊,并建立檔案卷組資料檔案/etc/lvmtab和/etc/lvmtab.d/*;vgchange -a y指令激活系統所有卷組。
四、 建立和管理LVM
建立LV有兩種方式,一種是基于磁盤的,另外一種是基于分區的,如果是基于分區的就必須按照我之前講的通過fdisk或parted方式劃分好分區,但不要格式化來進行pvcreate建立處理卷,如果基于磁盤的就不需要建立分區了,直接就可以通過pvcreate來建立實體卷。因為隻有建立好了實體卷之後才能添加到卷組,并在卷組裡面建立邏輯卷,後格式化才能存放資料。
要建立一個LVM系統,一般需要經過以下步驟:
建立基于磁盤的LV
1、 檢視磁盤資訊:
[root@jetsen~]# fdisk -l
Disk/dev/sda: 21.4 GB, 21474836480 bytes
255heads, 63 sectors/track, 2610 cylinders
Units =cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 2610 20860402+ 8e Linux LVM
我們就用如下兩塊磁盤來配置VG的管理
Disk /dev/sdb: 536.8 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/sdc: 536.8 GB, 536870912000 bytes
Disk /dev/sdc doesn't contain a valid partition table
2、 使用sdb建立基于磁盤的實體卷
[root@jetsen~]# pvcreate /dev/sdb
Physical volume "/dev/sdb"successfully created
3、 檢視實體卷建立是否成功
[root@jetsen~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup00
PV Size 19.89 GB / not usable 19.49 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 636
Free PE 0
Allocated PE 636
PV UUID 9UuRWq-3nFG-pQvY-nkCN-WZgj-uzNW-cUI1ei
"/dev/sdb" is a newphysical volume of "500.00 GB" ----這裡是我們剛才建立的PV,已經成功
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 500.00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Allocated PE 0
PV UUID 3Xhu20-4Y4L-ITf5-MyXi-VLVN-kJ3M-LsoouK
[root@jetsen ~]#
4、 建立data卷組:
[root@jetsen~]# vgcreate data /dev/sdb
/dev/cdrom: open failed: 隻讀檔案系統
Attempt to close device '/dev/cdrom' which isnot open.
Volume group "data" successfullycreated
5、 檢視卷組是否建立成功:
[root@jetsen ~]# vgdisplay
--- Volume group --- ------我們可以看到,這就是我們剛才建立的vg,已經成功了,大小為500G,由一個PV組成
VG Name data
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 1
Act PV 1
VG Size 500.00 GB
PE Size 4.00 MB
Total PE 127999
Alloc PE / Size 0 / 0
Free PE / Size 127999 / 500.00 GB
VG UUID wqyQM5-Rigb-5art-0H20-X9QW-OL6N-PDkI4o
--- Volume group --- -----這是系統之前的卷組
Metadata Sequence No 3
Cur LV 2
Open LV 2
VG Size 19.88 GB
PE Size 32.00 MB
Alloc PE / Size 636 / 19.88 GB
Free PE / Size 0 / 0
VG UUID 9BbNZr-0ILr-CP3K-debx-OyJM-hDru-C0gVuR
[root@jetsen~]#
6、 激活卷組
[root@jetsen~]# vgchange -a y data
0 logical volume(s) in volume group"data" now active
7、 建立新的實體卷
[root@jetsen~]# pvcreate /dev/sdc
Physical volume "/dev/sdc"successfully created
8、 将新的實體卷添加到現有卷組:
[root@jetsen~]# vgextend data /dev/sdc
Volume group "data" successfullyextended
9、 檢視卷組資訊:
我們可以看到,VG的大小由剛才的500G變成了現在的1T的空間,PV的數量也由之前的1個變成了兩個
[root@jetsen~]# vgdisplay data
--- Volume group ---
Metadata Areas 2
Metadata Sequence No 2
CurPV 2
ActPV 2
VG Size 999.99 GB
Total PE 255998
Free PE / Size 255998 / 999.99 GB
10、 從現有的卷組中删除一個實體卷:
要從一個卷組中删除一個實體卷,首先要确認要删除的實體卷沒有被任何邏輯卷正在使用,就要使用pvdisplay指令察看一個該實體卷資訊,如果某個實體卷正在被邏輯卷所使用,就需要将該實體卷的資料備份到其他地方,然後再删除。删除實體卷的指令為vgreduce:
[root@jetsen~]# vgreduce data /dev/sdc
Removed "/dev/sdc" fromvolume group "data" -----已經删除成功
檢視VG資訊 我們可以看到磁盤已經被删除,并且空間也由剛才的1T變成了500G
11、 建立邏輯卷
建立邏輯卷的指令為lvcreate,分為兩種:
A、 建立指定大小的邏輯卷LV
[root@jetsen ~]# lvcreate -L200M -n data001 data
Logical volume"data001" created
該指令就在卷組data上建立名字為data001,大小為200M的邏輯卷,并且裝置入口為/dev/data/data001(data為卷組名,data001為邏輯卷名)。
檢視我們建立的邏輯卷:
[root@jetsen ~]# lvdisplay data
--- Logical volume ---
LV Name /dev/data/data001 ---LV的名稱為data001
VG Name data ----卷組的名稱為data
LV UUID o75uV4-VvTA-aaMe-4T74-mVQe-gSQO-clot5L
LV Write Access read/write
LV Status available
# open 0
LV Size 200.00 MB ---大小為200M
Current LE 50
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
B、 建立卷組全部大小的邏輯卷LV
如果希望建立一個使用全部卷組的邏輯卷,則需要首先通過vgdisplay察看該卷組的Total PE數,然後在建立邏輯卷時指定
Metadata Sequence No 4
Cur LV 1
Total PE 127999 -----也就是這個值,
Alloc PE / Size 50 / 200.00 MB
Free PE / Size 127949 / 499.80 GB
建立使用卷組的全部邏輯卷文法如下:(由于之前已經建立了一卷組,就無法示範)
[root@jetsen~]# lvcreate -l127999-n dataall data
C、 建立剩餘空間所有大小的LV
檢視LV剩餘空間的大小:
Free PE / Size 127949 / 499.80 GB ----這裡是剩餘空間的大小
建立分區:
[root@jetsen~]# lvcreate -l127949 -n data003 data
Logical volume "data003" created
再次檢視Free PE
[root@jetsen ~]# vgdisplay data|grep "Free"
Free PE / Size 0 / 0 ----空間已經被劃分完了,沒有空間了
檢視剛才建立的LV的資訊:
[root@jetsen~]# lvdisplay /dev/data/data003
LV Name /dev/data/data003
LV UUID 5gk4X3-ltNL-YUR9-AZnx-GHr9-shgc-t1Cuye
LV Size 499.80 GB ----大小為499.80G,正好驗證了剩餘空間的大小
Current LE 127949 ----LV個數正好驗證了剛才所剩餘的個數
Block device 253:3
12、 建立檔案系統:
我們可以建立reiserfs檔案系統,也可以建立ext2和ext3
[root@jetsen~]# mkfs.ext3 /dev/data/data003 -------我們建立ext3的檔案系統
mke2fs1.39 (29-May-2006)
Filesystemlabel=
OS type:Linux
Blocksize=4096 (log=2)
Fragmentsize=4096 (log=2)
65519616inodes, 131019776 blocks
6550988blocks (5.00%) reserved for the super user
Firstdata block=0
Maximumfilesystem blocks=0
3999block groups
32768blocks per group, 32768 fragments per group
16384inodes per group
Superblockbackups stored on blocks:
32768, 98304, 163840, 229376, 294912,819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000,23887872, 71663616, 78675968,
102400000
Writinginode tables: done
Creatingjournal (32768 blocks): done
Writingsuperblocks and filesystem accounting information: done
Thisfilesystem will be automatically checked every 23 mounts or
180days, whichever comes first. Use tune2fs-c or -i to override.
13、 挂載檔案系統 ----我們可以看到已經挂載,并且大小也正常。
[root@jetsen/]# mkdir /data003
[root@jetsen/]# mount /dev/data/data003 /data003
[root@jetsen/]# df -h
Filesystem Size Used Avail Use% Mountedon
/dev/mapper/VolGroup00-LogVol00 18G 5.8G 11G 35% /
/dev/sda1 99M 12M 82M 13% /boot
tmpfs 506M 4.0K 506M 1% /dev/shm
/dev/mapper/data-data003 492G 198M 467G 1% /data003
[root@jetsen/]#
14、删除LV
A、 先解除安裝分區
[root@jetsen /]# umount /dev/data/data003
B、 執行删除操作
[root@jetsen /]# lvremove /dev/data/data003
/dev/cdrom:open failed: Read-only file system
Do you really want to remove active logical volume data003?[y/n]: y
Logical volume"data003" successfully removed
建立基于分區的LV
1、 通過fdisk建立分區,詳細步驟省略,可參考如下:
<a href="http://blog.csdn.net/wuweilong/article/details/7538647">http://blog.csdn.net/wuweilong/article/details/7538647</a>
<a href="http://space.itpub.net/?uid-20674423-action-viewspace-itemid-722812">http://space.itpub.net/?uid-20674423-action-viewspace-itemid-722812</a>
[root@jetsen /]# fdisk /dev/sdc (n\ p\ 1\ +500m\ w\) --建立了500M分區
[root@jetsen /]# fdisk /dev/sdc (n\ p\ 1\ +1024m\ w\) --建立了1G分區
檢視分區資訊
[root@jetsen/]# fdisk -l /dev/sdc ----分區已經建立成功
Disk/dev/sdc: 536.8 GB, 536870912000 bytes
255heads, 63 sectors/track, 65270 cylinders
/dev/sdc1 1 62 497983+ 83 Linux
/dev/sdc2 63 187 1004062+ 83 Linux
2、 建立基于分區的實體卷
[root@jetsen/]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1"successfully created
[root@jetsen/]# pvcreate /dev/sdc2
Physical volume "/dev/sdc2"successfully created
3、 建立卷組:
[root@jetsen/]# vgcreate soft /dev/sdc1 /dev/sdc2
/dev/cdrom: open failed: Read-only filesystem
Volume group "soft" successfullycreated
4、 激活卷組
[root@jetsen/]# vgchange -a y soft
0 logical volume(s) in volume group"soft" now active
5、 從卷組中删除實體卷
[root@jetsen/]# vgreduce soft /dev/sdc2
Removed "/dev/sdc2" from volumegroup "soft"
6、 添加卷組到實體卷
[root@jetsen/]# vgextend soft /dev/sdc2
Volume group "soft" successfullyextended
7、 建立LV
先檢視VG的大小,為1.5G,包含2個PV
[root@jetsen/]# vgdisplay soft
VG Name soft
Cur PV 2
Act PV 2
VG Size 1.43 GB
Total PE 366
Free PE / Size 366 / 1.43 GB
VG UUID D3x6JY-BVIL-C4ld-013H-U2Rq-hb1q-1oOVnx
将1.5G共366個PE建立一個LV
[root@jetsen/]# lvcreate -l366 soft -n soft01
Logical volume "soft01" created
8、 建立檔案系統:
[root@jetsen/]# mkfs.ext4 /dev/soft/soft01
mke4fs1.41.5 (23-Apr-2009)
93696inodes, 374784 blocks
18739blocks (5.00%) reserved for the super user
First datablock=0
Maximumfilesystem blocks=385875968
12 blockgroups
7808inodes per group
32768, 98304, 163840, 229376, 294912
Creatingjournal (8192 blocks): done
Thisfilesystem will be automatically checked every 29 mounts or
180days, whichever comes first. Use tune4fs-c or -i to override.
9、 挂載檔案系統
[root@jetsen/]# mkdir /soft
[root@jetsen/]# mount /dev/soft/soft01 /soft
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/soft-soft01 1.5G 35M 1.4G 3% /soft
擴充LV的大小
我們在用傳統磁盤管理工具的時候經常會有一種問題,就是分區在剛開始建立時候的大小是夠用的,但是随着時間的推移,分區及硬碟的可用空間越來越少,并且到最後可能就不夠用了,就隻有通過添加硬碟并且添加分區的方式同時還要做資料轉移來完成磁盤的添加工作,那麼我們通過使用卷管理之後就可以實作分區大小的動态調整,也就是說單個分區不夠了,我們添加硬碟後直接将新硬碟的空間無縫的動态線上添加載到目前需要擴容的分區上,原理如下圖
|<-- sda1---->|<-- sda2------>|
+---------------+---------------+
|xxxxxxxxxxx|xxxxxx||
硬碟分區/dev/sda1中的檔案系統占滿了整個分區,而/dev/sda2中的檔案系統隻占用了2/3左右的分區。
是以在調整邏輯卷容量大小的同時也要調整在該卷上的檔案系統的大小,當要增大容量時,先調整容量,後調整檔案系統,若要縮小容量則反之。
擴充LV大小的步驟如下:
1、 檢查VG的可用PE
Open LV 1
Alloc PE / Size 366 / 1.43 GB
Free PE / Size 0 / 0 ----可用PE為0,需添加磁盤或分區
2、 如果不夠,需想VG中添加磁盤或新的分區
[root@jetsen /]# fdisk /dev/sdc –l 檢視現在分區資訊
[root@jetsen /]# fdisk /dev/sdc (n\ p\ 3\ +1G\ w\) --建立了1G分區
[root@jetsen /]# fdisk /dev/sdc –l ----再次檢視分區資訊
/dev/sdc3 188 310 987997+ 83 Linux
[root@jetsen /]#
添加剛才建立的分區到VG中
[root@jetsen~]# pvcreate /dev/sdc3
Physical volume "/dev/sdc3"successfully created
[root@jetsen~]# vgextend soft /dev/sdc3
/dev/cdrom: open failed:隻讀檔案系統
[root@jetsen~]# vgdisplay soft
Metadata Areas 3
Metadata Sequence No 5
Cur PV 3
Act PV 3
VG Size 2.37 GB
Total PE 607
Free PE / Size 241 / 964.00 MB ------我們可以看到,這裡已經添加進來了
3、 擴充LV的大小
/dev/mapper/VolGroup00-LogVol00
18G 5.8G 11G 35% /
/dev/mapper/soft-soft01 1.5G 35M 1.4G 3% /soft -----現在大小是1.5G
寫法一: 在現有的空間中添加500M
[root@jetsen~]# lvextend -L+500M /dev/soft/soft01 ---向LV01添加500M的空間
Extending logical volume soft01 to 1.92 GB -----這裡告訴你添加後的soft01的大小是1.92GB
Logical volume soft01 successfully resized
寫法二: 在現有的空間中添加到分區的總大小為2G
[root@jetsen~]# lvextend -L2G /dev/soft/soft01
Extending logical volume soft01 to 2.00 GB
4、檢視lv擴容後的大小
[root@jetsensoft]# lvdisplay soft
LV Name /dev/soft/soft01
LV UUID AutjnY-C3KP-5bfC-Di5v-Zkdu-4VhD-AahFY8
# open 1
LV Size 2.00 GB ----已經擴容到2G了
Current LE 512
Segments 3
擴容檔案系統
[root@jetsen~]# resize4fs /dev/soft/soft01
resize4fs1.41.5 (23-Apr-2009)
Filesystemat /dev/soft/soft01 is mounted on /soft; on-line resizing required
olddesc_blocks = 1, new_desc_blocks = 1
Performingan on-line resize of /dev/soft/soft01 to 652288 (4k) blocks.
Thefilesystem on /dev/soft/soft01 is now 652288 blocks long.
檢視大小已經是2G了
/dev/mapper/soft-soft01 2.0G 67M 1.9G 4% /soft ---大小已經是2G了。
注意:增加了邏輯卷的容量以後,就需要修改檔案系統大小以實作利用擴充的空間。推薦使用ext4檔案系統來替代reiserfs、ext2或者ext3。是以這裡僅僅讨論ext4的情況。Reiserfs檔案工具提供了檔案系統大小調整工具:
對于使用reiserfs檔案系統的使用者可以考慮使用工具reiserfs
附錄:
LV建立流程:
1.建立PV
2.建立VG,将PV加入到VG中。
3.建立LV,并設定LV大小。
4.格式化LV或LP成你需要的檔案系統。
LV删除流程:
1.umountFS
2.删除LV。
3.将PV從所在的VG中删除。
4.删除VG。
卷管理常用指令集合:
檢視顯示
建立
删除
擴容
激活
掃描查找
LV
lvdisplay
lvcreate
lvremove
lvextend
lvchange
lvscan
PV
pvdisplay
pvcreate
pvremove
pvchange
pvscan
VG
vgdisplay
vgcreate
vgremove
vgextend
vgchange
vgscan
VG的完整架構圖:
http://www.cnblogs.com/timdes/p/4438581.html