Linux系统如何扩展磁盘,挂载加入逻辑卷都能实现

Posted 总要冲动一次

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统如何扩展磁盘,挂载加入逻辑卷都能实现相关的知识,希望对你有一定的参考价值。

前言


搞了半天总算明白了如何给linux增加磁盘空间;方法也有多种,我这里以虚拟机作为例子分享,实际场景目前没机会接触,但是原理应该一样;我会把核心的内容着重分享 伴随自己的理解!

为了好理解我一共分两大部分:VMware虚拟机管理器添加或扩展磁盘、Linux操作系统添加分区或卷等

我写完才发现好多,耐心点伙伴,对你会有帮助的< _ >

一、VMware虚拟机管理器添加或扩展磁盘

这里主要以图文的方式分享,打开VMware虚拟机管理器,给磁盘扩容的虚拟机关闭掉!

两种方式进行磁盘扩展:1、添加新磁盘 2、扩展已有磁盘

1、添加新磁盘






点击完成、确认即可启动虚拟机,查看/dev目录下会多出个sdb,已有的那个硬盘是sda,这些sda1、sda2…都是他的分区。
在Linux里必须要对硬盘先分区再进行初始化、挂载或加入卷等操作。

2、扩展已有磁盘


扩展完成,启动虚拟机查看sda硬盘,你会发现他有多余的空间了
扩展前:

扩展后:

完事之后只需要把扩展的5G,重新分个区就行。

二、Linux操作系统添加分区或卷等

这里我先分享如何分区,分区之后需要初始化分区、再进行挂载或者加入卷就可以了

1、分区


说一下这个图片:

fdisk -l

这个命令可以查看当前已有的磁盘:/dev/sda、/dev/sdb和他们已有的分区,/dev/sda分区/dev/sda1、/dev/sda2,sdb目前没有分区。
现在开始为他们新建分区,当然新建分区有个条件,每个磁盘需要有剩余的空间进行新建分区,目前这两个都是ok的,都是5G。

磁盘分区(分区有主分区,扩展分区,逻辑分区), 命令如下:

新建一个主分区:

[root@worker2 ~]# fdisk /dev/sdb #对指定磁盘进行分区操作:新建、删除、更改等
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x5c35983a 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m #帮助
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition’s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

命令(输入 m 获取帮助):n #新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #p主分区 e扩展分区
分区号 (1-4,默认 1):#回车
起始 扇区 (2048-10485759,默认为 2048):#回车
将使用默认值 2048
Last 扇区, +扇区 or +sizeK,M,G (2048-10485759,默认为 10485759):#回车
将使用默认值 10485759
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w #保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@worker2 ~]#

新建一个扩展分区:

[root@worker2 ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): e #选择扩展分区
分区号 (3,4,默认 3):#回车
起始 扇区 (83886080-94371839,默认为 83886080):#回车
将使用默认值 83886080
Last 扇区, +扇区 or +sizeK,M,G (83886080-94371839,默认为 94371839):#回车
将使用默认值 94371839
分区 3 已设置为 Extended 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@worker2 ~]#

新建一个逻辑分区:(基于扩展分区才可以创建逻辑分区)
这里有个插曲,ls /dev找不到刚刚新建的扩展分区/dev/sda3
找不到分区设备的情况下,执行此命令(让内核同步分区信息):
[root@localhost ~]# partprobe
这样分区设备就出现了

继续

[root@worker2 ~]# fdisk /dev/sda #只有存在扩展分区的才可以建逻辑分区,我们上一步已经创建扩展分区
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p): l #p主分区 l 逻辑分区
添加逻辑分区 5
起始 扇区 (83888128-94371839,默认为 83888128):#回车
将使用默认值 83888128
Last 扇区, +扇区 or +sizeK,M,G (83888128-94371839,默认为 94371839):#回车
将使用默认值 94371839
分区 5 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@worker2 ~]#

查看一下磁盘分区情况:fdisk -l

三个分区的关系请参考这里:https://blog.csdn.net/bobozai86/article/details/85298324

2、初始化

选择分区时有主分区和扩展分区,主分区可以直接进行初始化,扩展分区需要再细分为逻辑分区才能初始化成功。也就是说,扩展分区是无法直接使用的,必须在细分成逻辑分区才可以用来存储数据。

[root@worker2 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310464 blocks
65523 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 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

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@worker2 ~]#

[root@worker2 ~]# mkfs.ext4 /dev/sda5 #这里报错了 找不到分区设备
mke2fs 1.42.9 (28-Dec-2013)
无法对 /dev/sda5 进行 stat 调用 — 没有那个文件或目录

The device apparently does not exist; did you specify it correctly?
[root@worker2 ~]# partprobe #和上面一样执行一下就行,让内核同步分区信息
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。
[root@worker2 ~]# mkfs.ext4 /dev/sda5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310464 blocks
65523 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 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

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@worker2 ~]#

3、挂载、加入逻辑卷

这里的操作都是基于前面已经初始化的分区!
挂载和加入逻辑卷均能实现磁盘的扩充,但是这里推荐第二者加入逻辑卷。
LVM(逻辑卷管理),底层实现原理没有深入了解,专攻linux等操作系统的可以多看看。
详细请查看:什么是LVM(逻辑卷管理)
(1)挂载
挂载需要进行数据的迁移!不是很方便,或者直接挂载到一个新的目录(挂载点)。

[root@worker2 ~]# mkdir /data1 # 新建目录用于挂载
[root@worker2 ~]# mount /dev/sdb1 /data1/ # 挂载
[root@worker2 ~]# df -h # 查看
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 35G 21G 15G 58% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.8M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
cm_processes 1.9G 272K 1.9G 1% /run/cloudera-scm-agent/process
tmpfs 378M 0 378M 0% /run/user/0
/dev/sdb1 4.8G 20M 4.6G 1% /data1
[root@worker2 ~]#

OK!

(2)加入卷

卷扩容:

[root@worker2 ~]# lvm #进入lvm管理
lvm> pvcreate /dev/sda5 #这是创建物理卷
WARNING: ext4 signature detected on /dev/sda5 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/sda5.
Physical volume “/dev/sda5” successfully created.
lvm> vgextend centos /dev/sda5 #将刚刚创建的物理卷加入到虚拟卷组centos
Volume group “centos” successfully extended
lvm> vgdisplay #vgdisplay查看free PE /Site
— Volume group —
VG Name centos
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 43.99 GiB
PE Size 4.00 MiB
Total PE 11262
Alloc PE / Size 9983 / <39.00 GiB
Free PE / Size 1279 / <5.00 GiB
VG UUID 4i7ryg-6DPv-Ml7r-i8IC-TcoB-UrzE-wU7I1x

lvm> lvextend -l+1279 /dev/mapper/centos-root #扩展已有卷的容量(1279是通过vgdisplay查看free PE /Site的大小)
Size of logical volume centos/root changed from <35.00 GiB (8959 extents) to 39.99 GiB (10238 extents).
Logical volume centos/root successfully resized.
lvm> pvdisplay #查看卷容量,这时你会看到多了一个5G的卷
— Physical volume —
PV Name /dev/sda2
VG Name centos
PV Size <39.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 9983
Free PE 0
Allocated PE 9983
PV UUID axs9pZ-M23N-rNYf-00Iw-uim9-X4to-49LPld

— Physical volume —
PV Name /dev/sda5
VG Name centos
PV Size <5.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1279
Free PE 0
Allocated PE 1279
PV UUID fHbpL6-B3NS-YR6X-VxEU-bUr5-UA4S-5FWdfd

lvm> quit #退出
Exiting.
[root@worker2 ~]#

上面只是卷扩容了,下面是文件系统的真正扩容,输入以下命令:

#CentOS7下面由于使用的是XFS命令:
#自动扩展XFS文件系统到最大的可用大小
[root@worker2 ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2293504 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=9174016, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4479, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 9174016 to 10483712 #数据块由9174016改为10483712

再来看一下根目录大小:

完美解决!

关于卷的常用命令:

# 创建物理卷
pvcreate /dev/sdb7
# 查看物理卷
pvscan
# 或
pvdisplay
# 删除物理卷
pvremove /dev/sdb7


# 卷组相关操作
# 从卷组中删除某个物理卷
vgreduce vg2000 /dev/sdb2    #将物理卷"/dev/sdb2"从卷组"vg2000"中删除
# 创建卷组
vgcreate xxx
# 查看卷组
vgscan
# 或
vgdisplay
# 向卷组中添加物理卷
# vgextend命令 用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量。LVM卷组中的物理卷可以在使用vgcreate命令创建卷组时添加,也可以使用vgextend命令动态的添加。
vgextend vg2000 /dev/sdb2 #将物理卷"/dev/sdb2"加入卷组"vg2000"
# 删除LVM卷组
vgremove vg1000    #删除卷组"vg1000"vgremove vg1000    #删除卷组"vg1000"


# 逻辑卷操作-最终绑定到Linux某一节点上的就是逻辑卷
# 在卷组”vg1000″上创建一个200MB的逻辑卷
lvcreate -L 200M vg1000    #创建大小为200M的逻辑卷
# 查看逻辑卷 / 扫描逻辑卷
lvscan
# 或 显示逻辑卷属性
lvdisplay
# 扩展逻辑卷的大小
lvextend -l+1279 /dev/mapper/centos-root #扩展已有卷的容量(1279是通过vgdisplay查看free PE /Site的大小)
# 收缩逻辑卷空间 - 减少指定的逻辑卷的空间大小
lvreduce -L -50M /dev/vg1000/lvol0     #将逻辑卷的空间大小减少50M
# 删除指定LVM逻辑卷
# lvremove命令 用于删除指定LVM逻辑卷。如果逻辑卷已经使用mount命令加载,则不能使用lvremove命令删除。必须使用umount命令卸载后,逻辑卷方可被删除。
lvremove /dev/vg1000/lvol0    #删除逻辑卷"lvol0"

以上是关于Linux系统如何扩展磁盘,挂载加入逻辑卷都能实现的主要内容,如果未能解决你的问题,请参考以下文章

LVM创建逻辑卷,实现单个目录挂载多个磁盘

Linux 磁盘分区挂载

Linux 磁盘分区永久挂载创建LVM逻辑卷

Linux系统的逻辑卷管理

linux下磁盘分区格式化挂载

掌握管理Linux磁盘和分区的方法 创建并挂载文件系统以及 创建并管理LVM