目录

Liunx系统分区与扩容

1、挂载目录

注释:xfs和ext4是Linux操作系统中常见的两种文件系统

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#格式化文件系统
mkfs.ext4 /dev/sdb

#查看文件系统
blkid /dev/sdb

#挂载分区到目录
vim /etc/fstab 
#把这一段写入fstab文件:/dev/sdb /home ext4 defaults 0 0
mount -a

2、新磁盘创建卷组与逻辑卷并且挂载/home目录

只有lvm(逻辑卷才能扩容),下图意思是:有9块物理硬盘,其中有6块硬盘组成一个卷组,然后这个卷组了20g给逻辑卷用:物理卷(PV)、卷组(VG)和逻辑卷(LV)

/img/245612.png

pvcreate 创建物理卷

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#首先是创建PV,上图中的9块硬盘,centos7以上系统直接可以省略这步骤 pvcreate /dev/sdb  /dev/sdc1

[root@localhost ~]# pvcreate  /dev/sdb /dev/sdc 				#直接将磁盘或某个分区转化为物理卷,
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvs											#查看有哪些物理卷
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda2  cl lvm2 a--  11.00g 4.00m
  /dev/sdb      lvm2 ---   8.00g 8.00g
  /dev/sdc      lvm2 ---   6.00g 6.00g

vgcreate 创建卷组

1
2
3
4
5
6
#创建卷组(虚拟硬盘):vgcreate 卷组名 物理卷1 物理卷2 ..... 
[root@localhost ~]# vgcreate my_data /dev/sdb /dev/sdc	#创建一个名为my_data的卷组并将sdb和sdc物理卷加入其中,PE的大小默认为4M
[root@localhost ~]# vgs	#查看卷组,下面有一个创建好的my_data卷组为1G
  VG      #PV #LV #SN Attr   VSize    VFree   
  centos    1   2   0 wz--n-   <9.00g    4.00m
  my_data   1   0   0 wz--n- 1020.00m 1020.00m 

lvcreate 创建逻辑卷

1
2
3
4
5
6
7
[root@localhost ~]# lvcreate -n lv_data -L 500M  my_data		#在my_data卷组上创建一个名称叫lv_data的500M的逻辑卷
  Logical volume "lv_data" created.
[root@localhost ~]# lvs
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    centos  -wi-ao----   7.99g                                                    
  swap    centos  -wi-ao----   1.00g                                                    
  lv_data my_data -wi-a----- 500.00m  

重点: 当我们lvcreate创建一个逻辑卷的时候,其实相当于生成了一个磁盘设备文件,这是由lvm的mapper机制决定,Linux会新建两个软链接文件,如/dev/vg_name/lv_name、/dev/mapper/vg_name-lv_name,而这2个文件都是指向/dev/dm-X 块设备文件的,所以,当我们使用df -h看到的/dev/mapper/vg_name-lv_name的时候,这个其实就是和/dev/vg_name/lv_name一样的,都是指向/dev/dm-X 块设备文件的。

mkfs 格式化分区并创建文件系统

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[root@localhost ~]# mkfs.ext4 /dev/sdb  #格式化磁盘分区为ext4文件系统,这一步也可以忽略
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!

#对上面刚才创建的lv进行格式化并创建ext4类型的文件系统
[root@localhost ~]# mkfs.ext4 /dev/my_data/lv_data  

#挂载分区到目录
vim /etc/fstab 
#把这一段写入fstab文件:/dev/my_data/lv_data /home ext4 defaults 0 0
mount -a

df -hT

3、Linux系统扩容Lvm磁盘空间

扩容步骤为:先扩容卷组 -> 再扩容逻辑卷 ->刷新文件系统

vgextend 扩容卷组,即把物理卷加入卷组

1
2
3
4
5
6
7
[root@localhost ~]# vgs       #还剩下520M的容量
  VG      #PV #LV #SN Attr   VSize    VFree  
  centos    1   2   0 wz--n-   <9.00g   4.00m
  my_data   1   1   0 wz--n- 1020.00m 520.00m
  
#vgextend 命令把sdd1物理卷加入my_data卷组(sdd1已经是物理卷了,my_data是卷组名称)
[root@localhost /]# vgextend my_data /dev/sdd1	

lvextend扩容逻辑卷,即把卷组空间加入到逻辑卷中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#/dev/my_data/lv_data这个逻辑卷增加520M
[root@localhost ~]# lvextend -L +520M /dev/my_data/lv_data  
	Size of logical volume my_data/lv_data changed from 500.00 MiB (125 extents) to 1020.00 MiB (255 extents).
  Logical volume my_data/lv_data successfully resized.

#这个时候发现lv_data这个逻辑卷已经扩大到1G
[root@c2 ~]# lvs 
  LV      VG      Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    centos  -wi-ao----    7.99g                                                    
  swap    centos  -wi-ao----    1.00g                                                    
  lv_data my_data -wi-ao---- 1020.00m  

#但是df查看容量没有加载,这个时候需要刷新才行
[root@c2 ~]# df -hT /home/ 
文件系统                    类型  容量  已用  可用 已用% 挂载点
/dev/mapper/my_data-lv_data ext4  477M  2.3M  445M    1% /home

#查看你的逻辑卷是什么文件系统类型,如果是xfs文件系统,使用xfs_growfs命令扩展容量:
xfs_growfs /dev/mysql/lv_data
#查看你的逻辑卷是什么文件系统类型,如果是ext4文件系统,使用resize2fs命令扩展容量:
resize2fs /dev/root_vg/root

4、扩容根分区

注释:首先确定根分区是不是lvm卷,如果不是那就不允许扩容

扩容步骤为:先扩容卷组 -> 再扩容逻辑卷 ->刷新文件系统

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#查询卷组,查看卷组名为centos的卷组是否有容量扩容,下面显示vFree为4.00M,显然已经不够扩容
[root@c2 ~]# vgs   
  VG      #PV #LV #SN Attr   VSize    VFree
  centos    1   2   0 wz--n-   <9.00g 4.00m
#查询是否有分区给卷组扩容
[root@c2 ~]# lsblk 

#vgextend 命令把sdd物理卷加入centos卷组(sdd已经是物理卷了,centos是卷组名称)
[root@localhost /]# vgextend centos /dev/sdd

#/dev/centos/root这个逻辑卷增加50G
[root@localhost ~]# lvextend -L +50G /dev/centos/root  

#但是df查看容量没有加载,这个时候需要刷新才行
[root@c2 ~]# df -hT / 
文件系统                类型  容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root ext4  7.8G  6.9G  483M   94% /

#查看你的逻辑卷是什么文件系统类型,如果是xfs文件系统,使用xfs_growfs命令扩展容量:
xfs_growfs /dev/mysql/lv_data
#查看你的逻辑卷是什么文件系统类型,如果是ext4文件系统,使用resize2fs命令扩展容量:
resize2fs /dev/root_vg/root

lv缩容

缩容lv一般是腾出空间给同vg的其他lv,这并不是一种安全的做法,一般情况下没有人会这么干,一般当lv卷磁盘空间满的时候,会加磁盘来扩容,而不是从同vg下的其他lv腾空间出来,这里仅做出示例:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
umount /dev/mapper/my_data-lv_data				#卸载lv
e2fsck -f /dev/mapper/my_data-lv_data			#先扫描、检查磁盘在执行resize2fs,不然它会提示你先执行e2fsck -f命令的
resize2fs /dev/mapper/my_data-lv_data 100G		#缩容文件系统到100G
lvreduce -L 100G /dev/mapper/my_data-lv_data	#缩容,lv到100G,此时vg就空闲了很多PE出来了,可以通过vgdisplay命令查看
lvreduce -L -100G /dev/mapper/my_data-lv_data	#缩容,lv缩减100G,此时vg就空闲了很多PE出来了,可以通过vgdisplay命令查看
mount /dev/mapper/my_data-lv_data /my_data/		#重新挂载,此时文件系统就是100G大小

#以上缩容发现,一个是需要卸载,这点可以影响业务,其次缩容后重新挂载,原来的文件仍存在,没有丢失。

#下面是一个例子
/dev/mapper/vg--data-lv1T 1008G   77M  957G   1% /gpt1
/dev/mapper/vg--data-lv2   2.0T   81M  1.9T   1% /gpt2
[root@kubernetes ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  centos    1   2   0 wz--n- <19.00g    0 
  vg-data   1   2   0 wz--n-  <3.00t    0 
[root@kubernetes ~]# lvdisplay /dev/vg-data/lv1T /dev/vg-data/lv2
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                1.00 TiB
  Current LE             262144
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/vg-data/lv2
  LV Name                lv2
  VG Name                vg-data
  LV UUID                APJ81S-hOEC-LCfp-Oamo-5OTk-C8pA-GLhN2L
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:21:08 +0800
  LV Status              available
  # open                 1
  LV Size                <2.00 TiB
  Current LE             524287
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
[root@kubernetes ~]# 

#打算对/gpt1缩减100G,腾出空间给/gpt2:
umount  /gpt1
e2fsck -f  /dev/mapper/vg--data-lv1T
#注意这条命令是缩减文件系统到多少G,957-100=857
resize2fs /dev/mapper/vg--data-lv1T  857G

#重新挂载,现在是844G
mount /dev/mapper/vg--data-lv1T /gpt1/
[root@kubernetes ~]# df -h
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg--data-lv1T  844G   77M  801G   1% /gpt1


# 文件系统缩减了但是lv没有缩减呀,你看看:
[root@kubernetes ~]# lvdisplay /dev/mapper/vg--data-lv1T
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                1.00 TiB			#和没缩减文件系统时一模一样
  Current LE             262144			#和没缩减文件系统时一模一样
  Segments               1	
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
# 所以现在开始缩减lv,这里我们写-100G
lvresize -L -100G  /dev/vg-data/lv1T

#缩减成功,但是好像不对,lv显示924G,挂载之后的文件系统怎么才844G
[root@kubernetes ~]# lvdisplay /dev/mapper/vg--data-lv1T
  --- Logical volume ---
  LV Path                /dev/vg-data/lv1T
  LV Name                lv1T
  VG Name                vg-data
  LV UUID                oYtQ0a-hUQA-pVkK-e8iy-NFam-eRs4-PrMsZW
  LV Write Access        read/write
  LV Creation host, time kubernetes, 2023-03-29 10:20:33 +0800
  LV Status              available
  # open                 1
  LV Size                924.00 GiB
  Current LE             236544
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
 
[root@kubernetes ~]# vgs	#vg多了100G
  VG      #PV #LV #SN Attr   VSize   VFree  
  vg-data   1   2   0 wz--n-  <3.00t 100.00g
  
[root@kubernetes ~]# df -h /dev/vg-data/lv1T
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg--data-lv1T  844G   77M  801G   1% /gpt1
[root@kubernetes ~]# 重新卸载重新挂载也是一样的,怎么回事?

5、删除逻辑卷、删除卷组

一般不会这样干,这里只做示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost ~]# umount  /dev/mapper/my_data-lv_data			#删除一个lv之前必须先卸载文件系统
[root@localhost ~]# lvremove /dev/my_data/lv_data				#删除逻辑卷,如果不知道lv的路径,可以通过lvdisplay命令查看
Do you really want to remove active logical volume my_data/lv_data? [y/n]: y
  Logical volume "lv_data" successfully removed




root@localhost ~]# vgremove  my_data					#删除整个卷组
Do you really want to remove volume group "my_data" containing 1 logical volumes? [y/n]: y
  Volume group "my_data" is removed







#删除物理卷,该物理卷必须从vg中卸载下来,使用vgreduce my_data /dev/sdd1卸载即可
[root@localhost ~]# pvremove /dev/sdd1
  Removed "/dev/sdd1" from volume group "my_data"

最后献上这篇博客的参考文章