介绍
逻辑卷(Logical Volume)是由逻辑磁盘形成的虚拟盘,也可称为磁盘分区。
逻辑卷的工作原理:逻辑卷(lv)是将几个磁盘分区或者块设备(pv,pv的id必须是8e的,pv可以位于不同的磁盘分区里,pv大小可以不一)组织起来形成一个大的扩展分区(vg,卷组,一个vg至少要包含一个pv。),该扩展分区不能直接用,需要将其划分成逻辑卷(lv)才能使用,lv可以格式化成不同的文件系统,挂载后直接使用。 lv的扩展和缩减是不会影响原有数据的,但逻辑卷缩减的风险大于逻辑卷扩展的风险。逻辑卷可以支持快照功能。
快照的工作原理:保存数据某一时刻的状态。快照刚刚建立的时候,它的大小是空的。快照是访问原文件的另一条路径。快照是在数据改变之前将数据原封不动的保存到快照空间里面。注意数据变化的幅度不能超过给定快照空间的大小,否则快照将崩溃。
快照的作用:对某一时刻数据状态的备份提供另一条访问路径,通过快照来备份数据到其它位置,备份完成后,快照就没用了,卸载和移除该快照卷。快照空间的大小取决于数据改变的频度和所需要使用的时间长度,即有限的时间内原文件数据改变的空间大小。
LVM与直接使用物理存储相比,有以下优点:
- 灵活的容量:当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷。
- 可伸缩的存储池:你可以使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备。
- 在线的数据再分配:你可以在线移动数据,数据可以在磁盘在线的情况下重新分配.比如,你可以在线更换可热插拔的磁盘。
- 方便的设备命名:逻辑卷可以按你觉得方便的方式来起任何名称。
- 磁盘条块化:你可以生成一个逻辑盘,它的数据可以被条块化存储在2个或更多的磁盘上.这样可以明显提升数据吞吐量。
- 镜像卷:逻辑卷提供方便的方法来镜像你的数据。
- 卷快照:使用逻辑卷,你可以获得设备快照用来一致性备份或者测试数据更新效果而不影响真实数据。
磁盘分区
此步骤是可选的,可以直接将一块磁盘创建为PV(物理卷)。
创建分区有两种方式:
- fdisk
- parted
fdisk和parted的区别:
- fdisk 只支持msdos格式。
- parted 支持 msdos 和gpt格式。
msdos和gpt的区别:
- msdos 支持小于2T硬盘,不支持大于2T硬盘,有主分区,扩展分区,逻辑分区,最多四个主分区。
- gpt 支持大小容量的硬盘,不区分主分区,扩展分区,逻辑分区,也没有四个分区数量的限制。
fdisk创建分区
[root]# fdisk /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p #打印磁盘信息
Disk /dev/sda: 6001.2 GB, 6001175126016 bytes, 11721045168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: gpt
Disk identifier: CB4AE8A4-5C81-4598-8D67-B7B5E7489AD6
# Start End Size Type Name
Command (m for help): n #新增分区
Partition number (1-128, default 1): 1 #指定分区NUMBER
First sector (34-11721045134, default 2048): 2048 #指定扇区起始位置
Last sector, +sectors or +size{K,M,G,T,P} (2048-11721045134, default 11721045134): 11721045134 #指定扇区结束位置
Created partition 1
Command (m for help): p #打印磁盘信息
Disk /dev/sda: 6001.2 GB, 6001175126016 bytes, 11721045168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: gpt
Disk identifier: CB4AE8A4-5C81-4598-8D67-B7B5E7489AD6
# Start End Size Type Name
1 2048 11721045134 5.5T Linux filesyste
Command (m for help): w #保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
parted创建分区
[root]# parted /dev/sdn
GNU Parted 3.1
Using /dev/sdn
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
resizepart NUMBER END resize partition NUMBER
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU Parted
(parted) mklabel gpt #创建gpt格式新分区
Warning: The existing disk label on /dev/sdn will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
Error: Partition(s) 1 on /dev/sdn have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You
should reboot now before making further changes.
Ignore/Cancel? Ignore
(parted) mkpart XFS 0 480G #指定分区格式及大小
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
(parted) print #打印磁盘信息及分区信息
Model: ATA Micron_5200_MTFD (scsi)
Disk /dev/sdn: 480GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 480GB 480GB XFS
(parted) q #退出
Information: You may need to update /etc/fstab.
创建逻辑卷
创建逻辑卷的流程:
- 第一步:创建PV(物理卷):pvcreate /dev/sdb1
- 第二步:创建VG(卷组):vgcreate datavg /dev/sdb1
- 第三步:创建LVM(逻辑卷):lvcreate -l 17283957 -n datavg-lv datavg
- 第四步:格式化LVM(逻辑卷):mkfs.xfs /dev/LVM_NAME
- 第五步:挂载目录:mount /dev/LVM_NAME /data
检查磁盘
检查磁盘是SSD还是STAT盘
[root]# cat /sys/block/sda/queue/rotational
0
磁盘状态:
- 0:SSD盘
- 1:SATA盘
检查磁盘是SSD还是STAT的脚本
[root]# vi disk_check.sh
for DISK_NAME in `ls /sys/block/`
do
echo "$DISK_NAME: `cat /sys/block/$DISK_NAME/queue/rotational`"
done
[root# sh disk_check.sh
nvme0n1: 0
nvme1n1: 0
sda: 1
sdn: 0
创建PV(物理卷)
安装逻辑卷管理工具
[root]# yum install lvm2 -y
创建PV(物理卷)
[root]# pvcreate /dev/{nvme0n1,nvme1n1,sdn}
WARNING: gpt signature detected on /dev/nvme0n1 at offset 512. Wipe it? [y/n]: y
Wiping gpt signature on /dev/nvme0n1.
WARNING: gpt signature detected on /dev/nvme0n1 at offset 3200631791104. Wipe it? [y/n]: y
Wiping gpt signature on /dev/nvme0n1.
WARNING: PMBR signature detected on /dev/nvme0n1 at offset 510. Wipe it? [y/n]: y
Wiping PMBR signature on /dev/nvme0n1.
WARNING: gpt signature detected on /dev/nvme1n1 at offset 512. Wipe it? [y/n]: y
Wiping gpt signature on /dev/nvme1n1.
WARNING: gpt signature detected on /dev/nvme1n1 at offset 3200631791104. Wipe it? [y/n]: y
Wiping gpt signature on /dev/nvme1n1.
WARNING: PMBR signature detected on /dev/nvme1n1 at offset 510. Wipe it? [y/n]: y
Wiping PMBR signature on /dev/nvme1n1.
WARNING: dos signature detected on /dev/sdn at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/sdn.
Physical volume "/dev/nvme0n1" successfully created.
Physical volume "/dev/nvme1n1" successfully created.
Physical volume "/dev/sdn" successfully created.
查看PV(物理卷)
[root]# pvdisplay
"/dev/nvme1n1" is a new physical volume of "2.91 TiB"
--- NEW Physical volume ---
PV Name /dev/nvme1n1
VG Name
PV Size 2.91 TiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID xHMYDk-MiU8-z1Bt-YyVd-J2FV-Iqwe-lPf81T
"/dev/sdn" is a new physical volume of "447.13 GiB"
--- NEW Physical volume ---
PV Name /dev/sdn
VG Name
PV Size 447.13 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 33M6Kc-ftyp-FT1U-oCBR-ydIS-rvIY-n3rRqd
"/dev/nvme0n1" is a new physical volume of "2.91 TiB"
--- NEW Physical volume ---
PV Name /dev/nvme0n1
VG Name
PV Size 2.91 TiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID vm9Sve-BBHC-keOD-O4dI-Etba-ZjNC-9VVW1V
创建VG(卷组)
创建VG(卷组)
[root]# vgcreate datavg /dev/{nvme0n1,nvme1n1,sdn}
Volume group "datavg" successfully created
扫描VG(卷组)
[root]# vgscan
Reading volume groups from cache.
Found volume group "datavg" using metadata type lvm2
查看VG(卷组)
[root]# vgdisplay
--- Volume group ---
VG Name datavg
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size <6.26 TiB
PE Size 4.00 MiB
Total PE 1640643
Alloc PE / Size 0 / 0
Free PE / Size 1640643 / <6.26 TiB
VG UUID Tku0cw-GI5J-pgQQ-HkXN-gODj-Sa3u-skfQJA
创建LVM(逻辑卷)
创建LVM(逻辑卷)
[root]# lvcreate -l 1640643 -n datavg-lv datavg
Logical volume "datavg-lv" created.
扫描LVM(逻辑卷)
[root]# lvscan
ACTIVE '/dev/datavg/datavg-lv' [<6.26 TiB] inherit
查看逻辑卷
[root]# lvdisplay /dev/datavg/datavg-lv
--- Logical volume ---
LV Path /dev/datavg/datavg-lv
LV Name datavg-lv
VG Name datavg
LV UUID 4uHgQv-JZxd-pGJP-P4Fe-gUzL-N7oj-5M0SyF
LV Write Access read/write
LV Creation host, time nm05-monitor-10e5e65e14, 2021-12-23 17:00:25 +0800
LV Status available
# open 0
LV Size <6.26 TiB
Current LE 1640643
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
格式化LVM并挂载
格式化逻辑卷
[root]# mkfs.xfs /dev/datavg/datavg-lv
meta-data=/dev/datavg/datavg-lv isize=512 agcount=7, agsize=268435455 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1680018432, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
挂载目录
[root]# mkdir -p /data
[root]# mount /dev/datavg/datavg-lv /data
配置自动挂载
[root]# vi /etc/fstab
/dev/datavg/datavg-lv /data xfs defaults 0 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示