1.準備環境
1.準備Linux操作系統:Redhat 7.6
2.準備VMware虛擬機軟件
2.LVM介紹
Linux的動態磁盤管理LVM邏輯卷的基本概念以及LVM的工作原理,包括LVM中最重要的四個基本點(PE、PV、VG以及LV),以下內容我會詳細的講解LVM邏輯卷的創建、使用以及刪除。
3.創建LVM邏輯卷
3.1將物理硬盤格式化成PV(物理卷)
使用 pvcreate 命令將準備好的物理硬盤(虛擬機添加硬盤文件),通過 fdisk -l 可以查看各個硬盤信息。
[root@localhost /]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 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 label type: dos
Disk identifier: 0x000e76c9
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 37748735 18566144 8e Linux LVM
/dev/sda3 37748736 41943039 2097152 82 Linux swap / Solaris
Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 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 /dev/sdc: 53.7 GB, 53687091200 bytes, 104857600 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 /dev/mapper/rhel-root: 19.0 GB, 19008585728 bytes, 37126144 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
根據上圖代碼中可以看到 /dev/sdb /dev/sdc 兩個硬盤,我們需要將這兩個硬盤分配到一個PV中。這裏我們可以使用pvcreate命令。
[root@localhost /]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
如上圖代碼PV創建成功,我們可以使用pvdisplay命令查看pv詳情信息,還可以使用pvs命令查看pv的信息。如下:
[root@localhost /]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name rhel
PV Size <17.71 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4532
Free PE 0
Allocated PE 4532
PV UUID bPx9BI-xIGd-umpK-N1Zp-I5Af-GJE2-1C133I
"/dev/sdb" is a new physical volume of "50.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 50.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID uoA1pR-w3wv-Tz7Q-WvRW-5ILJ-EUOd-PjjAre
"/dev/sdc" is a new physical volume of "50.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 50.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 7ZNr7h-yQ4X-63lW-sKED-HYXJ-pzeO-VeGkOf
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel lvm2 a-- 17.70g 0
/dev/sdb lvm2 --- 50.00g 50.00g
/dev/sdc lvm2 --- 50.00g 50.00g
通過這兩個命令我們可以看到已經創建好的PV的信息,兩個PV都是50G,目前還沒有使用,PFree都是50G。
3.2創建卷組(VG)
在創建完PV以後,這時候我們需要創建一個VG,然後將我們的PV都加入到這個卷組當中,在創建卷組時要給該卷組起一個名字。可以使用 vgcreate 命令創建。如下:
[root@localhost /]# vgcreate vgdata /dev/sdb /dev/sdc
Volume group "vgdata" successfully created
創建好VG以後,可以使用 vgdisplay 或者 vgs 命來來查看VG的信息。如下:
[root@localhost /]# vgdisplay
--- Volume group ---
VG Name vgdata
System ID
Format lvm2
Metadata Areas 2
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 99.99 GiB
PE Size 4.00 MiB
Total PE 25598
Alloc PE / Size 0 / 0
Free PE / Size 25598 / 99.99 GiB
VG UUID oW3rfw-aY56-hBDy-edEN-mMbm-kxg4-Ez05qO
--- Volume group ---
VG Name rhel
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 17.70 GiB
PE Size 4.00 MiB
Total PE 4532
Alloc PE / Size 4532 / 17.70 GiB
Free PE / Size 0 / 0
VG UUID w8UFmO-yoym-4uqV-sT2D-9fdo-Kca8-m8LKzX
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 1 0 wz--n- 17.70g 0
vgdata 2 0 0 wz--n- 99.99g 99.99g
通過查看vg信息可以看到vgdata下VSize和VFree爲99.99G。
3.3基於卷組(VG)創建邏輯卷(LV)
根據創建好的PV、VG,我們需要在上層創建邏輯卷LV。我們可以通過 lvcreate 創建邏輯卷。如下:
[root@localhost /]# lvcreate -n lvdata -L 99.8g vgdata
Rounding up size to full physical extent 99.80 GiB
WARNING: ext4 signature detected on /dev/vgdata/lvdata at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/vgdata/lvdata.
Logical volume "lvdata" created.
通過 lvcreate 命令基於VG完成邏輯卷創建,lv名字爲lvdata,大小爲99.8G,這裏我們可以通過使用 lvdisplay 或者 lvs 命令來查看創建好的邏輯卷的信息。如下:
[root@localhost /]# lvdisplay
--- Logical volume ---
LV Path /dev/vgdata/lvdata
LV Name lvdata
VG Name vgdata
LV UUID usy4Q6-95Se-hM6E-dJNs-xcn7-wfxs-chP9bu
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-06-04 00:56:29 -0700
LV Status available
# open 1
LV Size 99.80 GiB
Current LE 25549
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/rhel/root
LV Name root
VG Name rhel
LV UUID XetJsE-t7q3-DGl2-BF1E-bTgi-H65q-AZv9dO
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-06-03 20:22:55 -0700
LV Status available
# open 1
LV Size 17.70 GiB
Current LE 4532
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
[root@localhost /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 17.70g
lvdata vgdata -wi-ao---- 99.80g
以上我們邏輯卷(LV)也創建完成了,這個時候我們可以通過pvs、vgs、lvs命令查看相關創建成功信息。
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel lvm2 a-- 17.70g 0
/dev/sdb vgdata lvm2 a-- <50.00g 0
/dev/sdc vgdata lvm2 a-- <50.00g 196.00m
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 1 0 wz--n- 17.70g 0
vgdata 2 1 0 wz--n- 99.99g 196.00m
[root@localhost /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 17.70g
lvdata vgdata -wi-ao---- 99.80g
當每創建完一個LV時,VG與PV的信息都是時時在變化,並且我們創建LV的大小是根據當前VG的大小來決定,不能超過當前VG的剩餘大小。
以上我們的LV邏輯卷全部創建完成,下面我們可以通過命令查看邏輯卷。
[root@localhost /]# ls /dev/vgdata/lvdata
/dev/vgdata/lvdata
4.格式化並使用邏輯卷
創建好PV、VG以及LV,這時候我們如果要使用邏輯卷,就必須將其格式化成我們需要用的文件系統,並將其掛載起來,然後就可以像使用分區一樣去使用邏輯卷。
[root@localhost /]# mkfs.ext4 /dev/vgdata/lvdata
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6545408 inodes, 26162176 blocks
1308108 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2174746624
799 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
格式化邏輯卷後,我們就可以使用 mount 命令將其進行掛載,我們將其掛載到 /data 目錄下。
[root@localhost /]# mount /dev/vgdata/lvdata /data
[root@localhost /]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=919428k,nr_inodes=229857,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/rhel-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=22980)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=186324k,mode=700)
/dev/mapper/vgdata-lvdata on /data type ext4 (rw,relatime,seclabel,data=ordered)
[root@localhost /]# cd /data/
[root@localhost data]# ls
lost+found
[root@localhost data]# touch vgdata.txt lvdata.txt
[root@localhost data]# ls
lost+found lvdata.txt vgdata.txt
將邏輯卷永久掛載到/data目錄下。我們可以通過修改/etc/fstab實現。如下:
[root@localhost data]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Jun 3 20:22:56 2020
#
# 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
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=6d53884a-62bc-49ca-a40a-a78e3fcd0da2 /boot xfs defaults 0 0
UUID=05b68163-5d7c-4b41-b5ad-6c3f89f15643 swap swap defaults 0 0
/dev/mapper/vgdata-lvdata /data ext4 defaults 0 0 #在最後添加一行。
當系統重啓之後就會自動掛載,到這裏我們邏輯卷創建和掛載就已經全部完成了。
5.刪除邏輯卷
我們在創建好邏輯卷後可以通過創建文件系統,掛載邏輯捲來使用它,如果說我們不想用了也可以將其刪除掉。
【注意:】對於創建物理卷、創建卷組以及創建邏輯卷我們是有嚴格順序的,同樣,對於刪除邏輯卷、刪除卷組以及刪除物理卷也是有嚴格順序要求的
1.首先將正在使用的邏輯卷卸載掉 通過 umount 命令
2.將邏輯卷先刪除 通過 lvremove 命令
3.刪除卷組 通過 vgremove 命令
4.最後再來刪除我們的物理卷 通過 pvremove 命令
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 1.5G 17G 9% /
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 297M 129M 169M 44% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/mapper/vgdata-lvdata 99G 61M 94G 1% /data
[root@localhost /]# umount /data/
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 1.5G 17G 9% /
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 297M 129M 169M 44% /boot
tmpfs 182M 0 182M 0% /run/user/0
[root@localhost /]# lvremove /dev/vgdata/lvdata
Do you really want to remove active logical volume vgdata/lvdata? [y/n]: y
Logical volume "lvdata" successfully removed
[root@localhost /]# vgremove vgdata
Volume group "vgdata" successfully removed
[root@localhost /]# pvremove /dev/sdb /dev/sdc
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
此時,我們創建的pv、vg、lv所有信息都刪除了,我們可以通過pvs、vgs、lvs命令查看。
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel lvm2 a-- 17.70g 0
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 1 0 wz--n- 17.70g 0
[root@localhost /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 17.70g
到此,通過以上命令,我們可以看到,剛纔創建邏輯卷相關的信息已經成功刪除了。
以上內容是本次編寫的LVM邏輯卷的相關創建和使用。