目录
一、前言
二、相关基础知识
(1)术语理解
(2)相关命令学习
1、磁盘管理相关命令
2、LVM管理相关命令
三、磁盘操作场景汇总
(1)添加新硬盘后挂载到已有目录进行扩容
(2)虚拟机扩容后新建文件系统并分配内存
1、新建分区新增逻辑卷扩容
2、同卷组新增逻辑卷扩容
(3)文件系统间的容量调整
四、后记
一、前言
说说为什么网上其实已经有一些不错的文章介绍linux系统磁盘扩容了,笔者还得写个博客来说一下这块的内容:
主要是之前用生产环境进行磁盘扩容时借鉴了一哥们文章上的方法,看着挺简单的,所以果断采取,当即采纳...结果磁盘不可逆损坏直接重装系统,丢失一天生产数据……,后面再看这哥们文章,评论下面全表示是坑,果然把我埋了半截身!
因此决定头悬梁锥刺股,决定把这块的知识点记录在案,希望可以作为自己的醒“世”恒言!以供后来的兄弟避坑。
二、相关基础知识
在聊怎么磁盘扩容前,我们先补一点理论基础,了解一下可能涉及操作的知识点。
(1)术语理解
首先搞明白在Linux系统中所谓的系统分区、磁盘分区和文件系统之间的关联关系,不然扯半天还容易把自己整迷糊:
在Linux系统中,系统分区是指安装操作系统的分区,包含引导加载程序、操作系统内核和系统文件。系统分区通常被称为根分区(root partition)。磁盘分区是指将硬盘划分成一个个分区,每个分区可以挂载不同的文件系统,它的目的主要是为了更好地管理数据和文件系统。文件系统则是指对数据进行组织和管理的一种方式,它定义了如何存储、访问、命名和保护文件和目录等。在Linux系统中,每个磁盘分区都需要被格式化为特定的文件系统,以便于对数据进行存储和管理。
系统分区、磁盘分区和文件系统之间的关系是密不可分的。系统分区必须包含用于引导操作系统的文件和其他必要的系统文件。磁盘分区则是用于将硬盘划分为多个逻辑部分,每个部分可以挂载为一个独立的文件系统。而文件系统则是将数据组织成文件和目录的方式,并提供对它们进行管理和访问的接口。
简单来说,磁盘分区是在硬盘上划分出逻辑部分,而文件系统则是在每个逻辑部分上进行数据存储和管理的方式。而系统分区则是必须存在的,它用于存放操作系统和其他必要的系统文件,以便于计算机能够正常启动和运行。
就拿咱们最熟悉的Windows系统来说,Linux系统中的系统分区类似于Windows的系统盘(通常是C盘),用于安装操作系统和系统文件。而磁盘分区在Linux和Windows系统中都是将硬盘划分成多个区域,但在Windows中,每个分区通常会有一个盘符(如C、D、E等)来表示。文件系统上
Linux系统中,常用的文件系统包括ext4、XFS等,用于组织和管理文件。而Windows系统常用的其实也有,其中就包括NTFS、FAT32等,也是用于存储和管理文件。只是由于Windows系统都是可视化的,所以平常不怎么常看到。比如这里我的两个盘就是NNTFS的,如图:
在Windows系统上磁盘扩容由于都是可视化操作,所以更方便些,而linux系统上“万物皆文件”所以咱们可能要生疏一点,因此理解上可能相对少一点。
然后再谈谈一个在命令中可能涉及的逻辑卷管理器LVM(Logical Volume Manager)。
LVM是一个强大的硬盘系统工具,无论在linux或者其他类似的系统,都是非常的好用。 传统分区使用固定大小分区,重新调整大小十分麻烦,但是LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘,也就是说在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。这样可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷,LVM并不需要重启就可以让内核知道分区的存在。现在有两个Linux版本的LVM,分别是 LVM1,LVM2。LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本。 LVM2几乎完全向后兼容使用LVM1创建的卷。此例外是快照(在升级到LVM 2之前,必须删除快照卷)。
一般现在安装的CentOS7的系统可以通过命令查看是否安装过:
[root@localhost ~]# rpm -aq |grep lvm
lvm2-libs-2.02.187-6.el7_9.5.x86_64
llvm-private-7.0.1-1.el7.x86_64
lvm2-2.02.187-6.el7_9.5.x86_64
与LVM相关的术语如下:
- 物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
- 物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
- 卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
- 逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
- PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
- LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
简单来说就是:
- VG(Volume Group): 假设我们有一块硬盘,可以将其视为一个存储池,这个存储池就是Volume Group(VG)。VG是由一个或多个物理卷(PV)组成的逻辑概念,用于管理存储空间。
- PV(Physical Volume): 在这个硬盘中,我们将硬盘的一个区域划分为一个物理卷(PV)。PV是实际的硬盘分区,它是VG的基本组成单元,用于存储数据。多个PV可以组成一个VG。
- LV(Logical Volume): 在VG中,我们可以划分出逻辑卷(LV),就像从存储池中划分出一部分空间给特定用途。LV是用户可以使用的逻辑存储单元,它类似于硬盘上的一个分区。
- PE(Physical Extent): PV被划分为一个个的物理区块,每个物理区块称为物理扩展(PE)。PE是VG的最小分配单元,用于分配给逻辑卷。
- LE(Logical Extent): LV也被划分为一个个的逻辑区块,每个逻辑区块称为逻辑扩展(LE)。LE是LV的最小分配单元,用于存储数据。
他们间的概念关系:
- 一个VG可以包含多个PV,PV是硬盘的物理分区。
- VG内的空间以PE为单位管理,每个PE由一个PV提供。
- LV是从VG中分配出来的逻辑存储单元,逻辑上划分为LE。
- 用户在LV上进行文件系统的操作,而LV的空间由PE提供。
(2)相关命令学习
1、磁盘管理相关命令
Linux 磁盘管理常用三个命令为 df、du 和 fdisk。
- df(英文全称:disk free):列出文件系统的整体磁盘使用量
- du(英文全称:disk used):检查磁盘空间使用量
- fdisk:用于磁盘分区
- mkfs(英文全拼:make file system):用于在磁盘分区建立文件系统
df命令
参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
语法:df [-ahikHTm] [目录或文件名]
选项与参数:
-
-h
:以人类可读的方式显示输出结果(例如,使用 KB、MB、GB 等单位)。 -
-T
:显示文件系统的类型。 -
-t <文件系统类型>
:只显示指定类型的文件系统。 -
-i
:显示 inode 使用情况。 -
-H
:该参数是-h
的变体,但是使用 1000 字节作为基本单位而不是 1024 字节。这意味着它会以 SI(国际单位制)单位(例如 MB、GB)而不是二进制单位(例如 MiB、GiB)来显示磁盘使用情况。 -
-k
:这个选项会以 KB 作为单位显示磁盘空间使用情况。 -
-a
:该参数将显示所有的文件系统,包括虚拟文件系统,例如proc
、sysfs
等。如果没有使用该选项,默认情况下,df
命令不会显示虚拟文件系统。
比如我现在列出系统内的所有文件系统:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 17G 29G 37% /
/dev/sda1 1014M 242M 773M 24% /boot
overlay 46G 17G 29G 37% /var/lib/docker/overlay2/540f4b07210a20acbc4c81c5d33cde8281be3c5c89e7a1d49d57c73b904b6ec1/merged
overlay 46G 17G 29G 37% /var/lib/docker/overlay2/7bf9d0fdf4fcbfb17691d268808de5fa0ed21dd130f28efba863375c182f0bc3/merged
overlay 46G 17G 29G 37% /var/lib/docker/overlay2/175994a19cf40607424f6ac691332e4289fcd068f527ad64db8a3a05f594ae0c/merged
overlay 46G 17G 29G 37% /var/lib/docker/overlay2/5dacbb3123a0976e9b407c3efd7c33807d5856d5bf2305baf8ec9daee8d41b0a/merged
overlay 46G 17G 29G 37% /var/lib/docker/overlay2/31cdd48d2dcb17c688e71ed1d978107b6ddc1049b761b3b80f49ad3b245e524f/merged
overlay 46G 17G 29G 37% /var/lib/docker/overlay2/ac7261b87347d35eb3446a8183a28a71e0056279979b26c2f546a606ad3f4a48/merged
overlay 46G 17G 29G 37% /var/lib/docker/overlay2/5be703dea08e60db244458e386d705b5cc026907b5d2dc3d3226f151a5622111/merged
tmpfs 378M 32K 378M 1% /run/user/0
/dev/sr0 4.5G 4.5G 0 100% /run/media/root/CentOS 7 x86_64
或者如果我们想知道某个目录挂载在那个文件系统下:
[root@localhost ~]# df -h /opt
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 46G 17G 29G 37% /
这样在做文件系统扩容时就可以为相应的文件目录做数据备份了。
du命令
Linux du(英文全拼:disk usage)命令用于显示目录或文件的大小。du命令也是查看使用空间的,但是与 df 命令不同的是du 命令是对文件和目录磁盘使用的空间的查看,显示指定的目录或文件所占用的磁盘空间。。
语法:du [-ahskm] 文件或目录名称
参数说明:
- -a或-all 显示目录中个别文件的大小。
- -b或-bytes 显示目录或文件大小时,以byte为单位。
- -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
- -D或--dereference-args 显示指定符号连接的源文件大小。
- -h或--human-readable 以K,M,G为单位,提高信息的可读性。
- -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
- -k或--kilobytes 以1024 bytes为单位。
- -l或--count-links 重复计算硬件连接的文件。
- -L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
- -m或--megabytes 以1MB为单位。
- -s或--summarize 仅显示指定目录或文件的总大小,而不显示其子目录的大小。
- -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
- -x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
- -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
- --exclude=<目录或文件> 略过指定的目录或文件。
- --max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
- --help 显示帮助。
- --version 显示版本信息。
比如我现在检查根目录底下每个目录所占用的容量
[root@localhost ~]# du -sm /*
0 /bin
209 /boot
695 /data
0 /dev
43 /etc
0 /home
0 /lib
0 /lib64
0 /media
0 /mnt
6987 /opt
0 /proc
6 /root
4598 /run
0 /sbin
0 /srv
0 /sys
1 /tmp
4145 /usr
9253 /var
通配符 * 来代表每个目录。可以看到与 df 不一样的是,du其实会直接到文件系统内去搜寻所有的文件数据。
fdisk命令
fdisk 是一个创建和维护分区表的程序,它兼容 DOS 类型的分区表、BSD 或者 SUN 类型的磁盘列表。
语法 fdisk [必要参数][选择参数]
必要参数:
- -l 列出素所有分区表
- -u 与 -l 搭配使用,显示分区数目
选择参数:
- -s<分区编号> 指定分区
- -v 版本信息
菜单操作说明
- m :显示菜单和帮助信息
- a :活动分区标记/引导分区
- d :删除分区
- l :显示分区类型
- n :新建分区
- p :显示分区信息
- q :退出不保存
- t :设置分区号
- v :进行分区检查
- w :保存修改
- x :扩展应用,高级功能
比如我现在查看系统内的所有磁盘分区信息:
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0000d1ab
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 104857599 51379200 8e Linux LVM
# 设备文件名 开始磁柱 结束磁柱 1K大小容量 Hex代码 磁盘分区槽内的系统
磁盘 /dev/mapper/centos-root:48.4 GB, 48444211200 字节,94617600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:4160 MB, 4160749568 字节,8126464 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
早期的Linux发行版在磁盘分区时采用的是柱面表示法,现在通常会采用扇区的表示方法,通常会更直观一些,fdisk默认使用扇区的表示方法。所以这段展示信息详情如下:
首先第一个磁盘名为: /dev/sda
- 容量: 53.7 GB,即53687091200字节,拥有104857600个扇区。
- 扇区大小: 每个扇区大小为512字节,逻辑扇区和物理扇区大小均为512字节。
- I/O大小: 最小和最佳I/O大小均为512字节。
- 磁盘标签类型: dos,表示采用传统的MBR分区表。
- 磁盘标识符: 0x0000d1ab,用于唯一标识磁盘。
然后再它的基础上系统进行了自动分区,分区信息信息如下:
/dev/sda1:
- 起始扇区: 2048
- 结束扇区: 2099199
- 容量: 1 GB (1048576个扇区)
- Id: 83,表示Linux分区
- Boot: *,表示引导分区
/dev/sda2:
- 起始扇区: 2099200
- 结束扇区: 104857599
- 容量: 48.8 GB (51379200个扇区)
- Id: 8e,表示Linux LVM分区
而/dev/mapper/centos-root和/dev/mapper/centos-swap则是在/dev/sda2分区下建立的两个文件系统前者主要挂载了系统根目录,占用磁盘大小为48.4GB。后者则代表交换分区,也就类似Windows的虚拟内存,当系统的物理内存不够用的时候,Swap分区就会把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。它们间的空间关系也可以用lsblk命令来查看:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sr0 11:0 1 4.4G 0 rom /run/media/root/CentOS 7 x86_64
显示字段信息如下:
-
NAME:设备名称,如
/dev/sda
。 -
MAJ:MIN:设备的主次设备号。
-
RM:如果设备是可移动设备(如USB),则显示
1
,否则为0
。 -
SIZE:设备的总大小。
-
RO:如果设备是只读的,则显示
1
,否则为0
。 -
TYPE:设备的类型,如磁盘、分区等。
-
MOUNTPOINT:设备的挂载点,如果已经挂载。
可见centos-root和centos-swap的设备类型都是lvm的,也就是说这两个分区都是LVM(逻辑卷管理)格式的,后面可以使用lvm系列命令进行磁盘管理。
fdisk除了用于查看磁盘分区信息外,也可以用作磁盘管理,比如磁盘的增删改,这里仅对功能菜单简单介绍:
[root@localhost ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag #设置可引导标记
b edit bsd disklabel #修改bsd的磁盘标签
c toggle the dos compatibility flag #设置DOS操作系统兼容标记
d delete a partition #删除一个分区
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types #显示已知的分区类型,其中82为Linux swap分区,83为Linux分区
m print this menu #显示帮助信息
n add a new partition #增加一个新的分区
o create a new empty DOS partition table #创建一个新的空白的DOS分区表
p print the partition table #显示磁盘当前的分区表
q quit without saving changes #退出fdisk程序,不保存任何修改
s create a new empty Sun disklabel #创建一个新的空白的Sun磁盘标签
t change a partition's system id #改变一个分区的系统号码(比如把Linux Swap分区改为Linux分区)
u change display/entry units #改变显示记录单位
v verify the partition table #对磁盘分区表进行验证
w write table to disk and exit #保存修改结果并退出fdisk程序
x extra functionality (experts only) #特殊功能
命令(输入 m 获取帮助):q
mkfs命令
Linux mkfs(英文全拼:make file system)命令用于在特定的分区上建立 linux 文件系统。
使用方式 : mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
参数 :
- device : 预备检查的硬盘分区,例如:/dev/sda1
- -V : 详细显示模式
- -t : 给定档案系统的型式,Linux 的预设值为 ext2
- -c : 在制做档案系统前,检查该partition 是否有坏轨
- -l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
- block : 给定 block 的大小
比如现在需要将sda6分区格式化为ext3格式:
[root@localhost ~]# mkfs -t ext3 /dev/sda6
除了这个以外,也有一些有一些特定文件系统的格式化命令,比如mkfs.ext4、mkfx.xfs等等。例如将一个设备块格式化为ext4格式的:
[root@localhost ~]# mkfs.ext4 /dev/sda4 //将sda4格式成ext4格式
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5241540 blocks
262077 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
160 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
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
2、LVM管理相关命令
物理卷工具
-
pvcreate:用于创建物理卷(Physical Volume),即将物理磁盘划分成逻辑卷管理的一部分。使用方式:pvcreate <物理磁盘>
-
pvresize:用于调整物理卷的大小。使用方式:pvresize <物理卷名称>
-
pvdisplay:用于显示物理卷的信息,包括物理卷名称、物理卷大小、使用情况等。使用方式:pvdisplay [<物理卷名称>]
-
pvmove:用于迁移物理卷上的数据到其他物理卷。使用方式:pvmove <源物理卷> <目标物理卷>
-
pvremove:删除一个物理卷(也就是从物理卷中删除一个LVM标签)
卷组工具
-
vgcreate:用于创建卷组(Volume Group),即将一个或多个物理卷组织在一起以创建逻辑卷。使用方式:vgcreate <卷组名称> <物理卷1> [<物理卷2> ...]
-
vgextend:用于将物理卷添加到已存在的卷组中。使用方式:vgextend <卷组名称> <物理卷>
-
vgdisplay:用于显示卷组的信息,包括卷组名称、卷组大小、物理卷使用情况等。使用方式:vgdisplay [<卷组名称>]
-
vgreduce:从卷组中删除一个物理卷(也就是缩小卷组)
-
vgremove:删除一个卷组
逻辑卷工具
-
lvdisplay:用于显示逻辑卷的信息,包括逻辑卷名称、逻辑卷大小、所在卷组等。使用方式:lvdisplay [<逻辑卷名称>]
-
lvextend:用于调整逻辑卷的大小。使用方式:lvextend -L [+|-]<大小> <逻辑卷名称>
-
lvcreate:用于创建逻辑卷(Logical Volume),即在卷组中创建逻辑容器以存储数据。使用方式:lvcreate -L <逻辑卷大小> -n <逻辑卷名称> <卷组名称>
-
lvreduce:缩小逻辑卷(也就是从一个逻辑卷中减少一些LE)
-
lvremove:从系统中删除一个逻辑卷
三、磁盘操作场景汇总
(1)添加新硬盘后挂载到已有目录进行扩容
第一种就是我们给服务器添加新的硬盘时,需要把新增的内存扩充到内存不足的目录,比如我们将新添加的硬盘内存扩充到根目录下。那么通常如果已添加硬盘后列出可用设备块信息时是这样的信息:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 1T 0 disk
sr0 11:0 1 4.4G 0 rom /run/media/root/CentOS 7 x86_64
这里就表示一个新增的外部设备块sdb已经被识别出来了。但是这个硬盘还有没有创建分区,因此下一步需要通过fdisk来创建分区。
但是在这之前我们为了预防万一,建议先把服务器上的重要信息先做一个备份!!!因为涉及到扩容操作,如果期间有操作失误,导致数据不慎丢失就傻逼了。
Step1:重要数据备份
[root@localhost ~]# tar -cf /tmp/home_bak.tar /home/ #或其他目录下的重要数据
Step2:创建新分区
[root@localhost dev]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 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
分区号 (1-4,默认 1): #回车
起始 扇区 (2048-2147483647,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2147483647,默认为 2147483647):
将使用默认值 2147483647
分区 1 已设置为 Linux 类型,大小设为 1024 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
此时可以看到分区已经新建完成:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 1T 0 disk
└─sdb1 8:17 0 1024G 0 part
sr0 11:0 1 4.4G 0 rom /run/media/root/CentOS 7 x86_64
Step3:创建物理卷
[root@localhost dev]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@localhost dev]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <49.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 12543
Free PE 1
Allocated PE 12542
PV UUID tyCr3t-QebO-CRBN-qBci-m7d6-vcix-YpqTNq
"/dev/sdb1" is a new physical volume of "<1024.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <1024.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID r5oBD6-5Bf0-41E9-A3B4-aA54-FaA9-U9011a
Step4:扩展卷分组
这里需要先查看一下系统卷分组名称:
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <49.00 GiB
PE Size 4.00 MiB
Total PE 12543
Alloc PE / Size 12542 / 48.99 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID wsUv5j-JYh8-FmCi-Cw3b-II8l-5oOf-GS1rzm
[root@localhost ~]# vgdisplay -v
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <49.00 GiB
PE Size 4.00 MiB
Total PE 12543
Alloc PE / Size 12542 / 48.99 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID wsUv5j-JYh8-FmCi-Cw3b-II8l-5oOf-GS1rzm
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID LNIkPN-sTSF-2jK0-K7da-RXpW-3zon-PLo3AC
LV Write Access read/write
LV Creation host, time localhost, 2024-05-06 10:19:07 +0800
LV Status available
# open 2
LV Size <3.88 GiB
Current LE 992
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID mFEGy0-W4kH-GpJg-WKy1-CzTQ-MXlr-AJJAAC
LV Write Access read/write
LV Creation host, time localhost, 2024-05-06 10:19:07 +0800
LV Status available
# open 1
LV Size <45.12 GiB
Current LE 11550
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Physical volumes ---
PV Name /dev/sda2
PV UUID tyCr3t-QebO-CRBN-qBci-m7d6-vcix-YpqTNq
PV Status allocatable
Total PE / Free PE 12543 / 1
可以看到该服务器上VG Name都是centos,并且现在只有两个逻辑卷分别是root和swap,所以接下来对改卷组进行扩展,也就是相当于把物理卷资源添加到centos这个卷组里。
[root@localhost dev]# vgextend centos /dev/sdb1
Volume group "centos" successfully extended.
Step5:扩展逻辑卷
首先查看一下当前的逻辑卷信息:
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID LNIkPN-sTSF-2jK0-K7da-RXpW-3zon-PLo3AC
LV Write Access read/write
LV Creation host, time localhost, 2024-05-06 10:19:07 +0800
LV Status available
# open 2
LV Size <3.88 GiB
Current LE 992
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID mFEGy0-W4kH-GpJg-WKy1-CzTQ-MXlr-AJJAAC
LV Write Access read/write
LV Creation host, time localhost, 2024-05-06 10:19:07 +0800
LV Status available
# open 1
LV Size <45.12 GiB
Current LE 11550
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
此时可以看到挂载根目录的文件系统/dev/centos/root的lv大小是<45.12GB的,之前硬盘创建出来的物理卷大小时<1024GB的,并且已经扩展了卷分组。那么现在可以将扩展出来的内存大小分配到/dev/centos/root下了。因为不足1024GB,所以我们扩大1023GB即可。
[root@localhost ~]# lvextend -L +1023G /dev/centos/root
Size of logical volume centos/root changed from 45GiB (11550 extents) to <1.04 TiB (287488 extents).
Logical volume centos/root successfully resized.
如果添加全部磁盘资源可使用这个:
#添加全部新的磁盘资源
[root@localhost ~]#lvextend -l +100%FREE /dev/mapper/centos-root
扩展完成后我们看一下磁盘分区情况:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 17G 29G 37% /
/dev/sda1 1014M 242M 773M 24% /boot
tmpfs 378M 24K 378M 1% /run/user/0
/dev/sr0 4.5G 4.5G 0 100% /run/media/root/CentOS 7 x86_64
不难发现虽然我们扩展了 root的逻辑卷,但是实际内存大小并没有变化,因为这里展示的是文件系统。所以我们最后还得执行最后一步操作去同步/dev/mapper/centos-root文件系统。
Step6:同步文件系统
#针对xfs(centos7默认的文件系统)格式的文件系统进行格式化
[root@localhost ~]#xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=6553360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 26214400 to 294387712
如果是ext4格式用resize2fs /dev/mapper/center-root 。
等待较长时间后就能看到下面的输出信息了。然后重新查看一下 磁盘使用情况:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 1T 17G 1T 1% /
/dev/sda1 1014M 242M 773M 24% /boot
tmpfs 378M 24K 378M 1% /run/user/0
/dev/sr0 4.5G 4.5G 0 100% /run/media/root/CentOS 7 x86_64
这样外部硬盘扩容就搞定了,检查一下文件情况是否正常可用,一般不会有影响,如果不慎丢失就将之前的将备份文件还原重新挂载一下就ok了。
(2)虚拟机扩容后新建文件系统并分配内存
第二种情况就是在虚拟机上进行扩容,或者新增文件系统挂载扩容。比如:现在我的centos系统只有一个centos-root的文件系统,并且挂载了根目录,我希望扩容后新建文件系统挂载一个指定目录,比如/home,便于文件分区管理。
这里可以看到其实虚拟机上的扩容只是扩大虚拟磁盘大小,相当于扩大了默认的sda大小,但是他并不会应用到其他已在用的磁盘分区或者文件系统上:
实际区别我们可以启动centos系统后再看一看:
由于是在/dev/sda硬盘下新建文件系统分配内存,一般来说也可以分为两种划分方式:
(1)新建分区新增文件系统扩容。这种结果新增扩容后文件系统树状信息大概如下:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 49G 0 part
│ ├─centos-root 253:0 0 45.1G 0 lvm /
│ └─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─sda3 8:3 0 30G 0 part
└─linux-home 253:2 0 29G 0 lvm
sr0 11:0 1 4.4G 0 rom
(2)同卷组新增文件系统扩容。文件系统树状信息大概如下:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 40G 0 lvm
sr0 11:0 1 4.4G 0 rom
下面根据这两种情况我分别进行操作说明。开始操作流程:
首先仍然是重要数据备份,特别是涉及到挂载的目录文件,这里我们主要是需要重新挂载的home目录。这里第一步都是一致的。
Step1:重要数据备份
[root@localhost ~]# tar -zcf /tmp/home_bak.gz /home/ #或其他目录下的重要数据
1、新建分区新增逻辑卷扩容
区别主要在第二步操作,如果我们新建分区那么第二部就可以直接新建磁盘分区了:
Step2:新建分区
[root@localhost ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 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 (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):3
起始 扇区 (104857600-167772159,默认为 104857600):
将使用默认值 104857600
Last 扇区, +扇区 or +size{K,M,G} (104857600-167772159,默认为 167772159):
将使用默认值 167772159
分区 3 已设置为 Linux 类型,大小设为 30 GiB
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):3
Hex 代码(输入 L 列出所有代码):L
0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要
16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep
1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT
1e 隐藏的 W95 FAT1 80 旧 Minix
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 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)
正在同步磁盘。
这里我们顺便修改了分区类型为lvm,主要是为了方便系统识别和管理,另外就是这样会顺便帮我们把分区格式化为ext4的文件系统格式。看到设备忙的情况下可以reboot重启一下系统,等待分区创建完成。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 49G 0 part
│ ├─centos-root 253:0 0 45.1G 0 lvm /
│ └─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─sda3 8:3 0 30G 0 part
sr0 11:0 1 4.4G 0 rom
可以看到重启后新的分区sda3已经新建完成,并且将80G-50G=30G分配给了sda3。并且sda3已经变成ext4格式了,这是因为我们设置分区类型为lvm后,在创建LVM分区时,系统通常会默认将该分区格式化为ext4文件系统。
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot
├─sda2 LVM2_member tyCr3t-QebO-CRBN-qBci-m7d6-vcix-YpqTNq
│ ├─centos-root xfs 8965db25-01db-435a-b64c-a7fd8dbf0d7b /
│ └─centos-swap swap dc885773-c65a-4e33-85df-764380eecffe [SWAP]
└─sda3 ext4 992f20d7-329e-4830-8ab6-2f15d221d4ba
sr0 iso9660 CentOS 7 x86_64 2022-07-26-15-09-17-00 /run/media/root/CentOS 7 x86_64
这样就可以省一步格式化过程。然后就可以进行我们之前的常规操作了:
Step3:创建物理分区
[root@localhost ~]# pvcreate /dev/sda3
WARNING: ext4 signature detected on /dev/sda3 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/sda3.
Physical volume "/dev/sda3" successfully created.
这里有个ext4的警告,输入y即可。
Step4:卷组扩容
没啥可说的,只要注意vg名称别搞错就行了,可以加到已有的卷组centos,也可以把这个物理卷加到新的卷组并创建。这里我新建一个名叫linux的卷组:
[root@localhost ~]# vgcreate linux /dev/sda3
Volume group "linux" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name linux
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 <30.00 GiB
PE Size 4.00 MiB
Total PE 7679
Alloc PE / Size 0 / 0
Free PE / Size 7679 / <30.00 GiB
VG UUID aHBUGi-C6FS-ggqY-c0UR-R6i5-vqkK-m2knhu
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 15
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <49.00 GiB
PE Size 4.00 MiB
Total PE 12543
Alloc PE / Size 12542 / 48.99 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID wsUv5j-JYh8-FmCi-Cw3b-II8l-5oOf-GS1rzm
Step5:创建逻辑分区
[root@localhost ~]# lvcreate -n home -L 30G linux
Volume group "linux" has insufficient free space (7679 extents): 7680 required.
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 4.00m
linux 1 0 0 wz--n- <30.00g <30.00g
[root@localhost ~]# lvcreate -n home -L 29G linux
Logical volume "home" created.
这里开始用30G的时候发现可用的PE free已经不够了,实际能使用的大概7679*4Mb/1024大约29.99G。所以后面以29G分配分区内存。这样就建立了一个linux-home了。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 49G 0 part
│ ├─centos-root 253:0 0 45.1G 0 lvm /
│ └─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─sda3 8:3 0 30G 0 part
└─linux-home 253:2 0 29G 0 lvm
sr0 11:0 1 4.4G 0 rom
Step6:挂载文件目录
顺带一提:如果前面没有sda3在第一步没有修改分区类型格式化文件系统(我上面已格式化为ext4)的话,这里一般需要执行个格式化文件系统操作。例如格式化为ext4类型的:
[root@localhost data]# mkfs.ext4 /dev/mapper/linux-home
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1966080 inodes, 7864320 blocks
393216 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2155872256
240 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
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
我们这里由于之前格式化过了,就不需要操作了,直接开始挂载文件目录就行了:
#查看fstype
[root@localhost data]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot
├─sda2 LVM2_member tyCr3t-QebO-CRBN-qBci-m7d6-vcix-YpqTNq
│ ├─centos-root xfs 8965db25-01db-435a-b64c-a7fd8dbf0d7b /
│ └─centos-swap swap dc885773-c65a-4e33-85df-764380eecffe [SWAP]
└─sda3 LVM2_member xwedB5-eG6l-PYDN-FCnB-3Vf1-q5Lt-wMh5ez
└─linux-home ext4
sr0 iso9660 CentOS 7 x86_64 2022-07-26-15-09-17-00 /run/media/root/CentOS 7 x86_64
#临时挂载
[root@localhost data]# mount /dev/mapper/linux-home /home/
[root@localhost data]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 17G 29G 37% /
/dev/sda1 1014M 242M 773M 24% /boot
tmpfs 378M 32K 378M 1% /run/user/0
/dev/sr0 4.5G 4.5G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/linux-home 30G 45M 28G 1% /home
采用mount挂载只是一种临时挂载方式, 重启后它就不会自动挂载,我们需要将这个挂载信息在/etc/fstab上配置一下,让他可以永久挂载。
/etc/fstab是用来存放文件系统的静态信息的文件,当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。随便看一下吧:
[root@localhost data]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon May 6 10:19:09 2024
#
# 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/centos-root / xfs defaults 0 0
UUID=9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
一般而言它包含6个字段,从前之后依次如下:
- 设备:设备字段指定要挂载的设备的路径或UUID。可以是硬盘分区、光盘、网络文件系统等。
- 挂载点:挂载点字段指定设备要挂载到的目录路径。当设备被挂载后,其内容将会在该目录下可见。
- 文件系统类型:文件系统类型字段指定设备上的文件系统类型,如ext4、NTFS、FAT32等。
- 挂载选项:挂载选项字段包含了挂载设备时的各种选项,如读写权限、自动挂载、权限控制等。
- 第一个0:第一个数字在/etc/fstab中表示文件系统的备份频率,通常用于磁盘备份工具。含义如下:0:不需要备份。1:每天备份。2:每周备份。3:每月备份。4:每年备份。5:根文件系统,需要备份。其中由于默认用户是没有安装备份工具的,所以这里它是0;
- 第二个0:指定了文件系统检查顺序,用于
fsck
命令检查文件系统时的顺序。具体含义如下:0:不需要进行文件系统检查。1:如果需要检查根文件系统,则在开机时进行检查。2:如果需要检查根文件系统,但不强制检查,则在开机时进行检查。其他数字:在开机时按照数字的顺序检查文件系统。
一般情况我们可以在文件末尾追加挂载信息来实现永久挂载,第一种就是用文件系统名挂载:
[root@localhost data]# cat >>/etc/fstab<<EOF
> /dev/mapper/linux-home / ext4 defaults 0 0
> EOF
[root@localhost data]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon May 6 10:19:09 2024
#
# 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/centos-root / xfs defaults 0 0
UUID=9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/mapper/linux-home /home ext4 defaults 0 0
另外也可以查到对应文件系统的UUID进行添加:
[root@localhost data]# blkid
/dev/sda1: UUID="9b684762-37b4-4773-a8c7-b3bdb414c6d9" TYPE="xfs"
/dev/sda2: UUID="tyCr3t-QebO-CRBN-qBci-m7d6-vcix-YpqTNq" TYPE="LVM2_member"
/dev/sda3: UUID="TYfFcq-fjQr-d0rY-1swD-IGwU-1Fwt-DJLebf" TYPE="LVM2_member"
/dev/sr0: UUID="2022-07-26-15-09-17-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="8965db25-01db-435a-b64c-a7fd8dbf0d7b" TYPE="xfs"
/dev/mapper/centos-swap: UUID="dc885773-c65a-4e33-85df-764380eecffe" TYPE="swap"
/dev/mapper/centos-home: UUID="1e2d0e18-b617-4d37-93f6-773a3b301064" TYPE="ext4"
[root@localhost data]# cat >>/etc/fstab<<EOF
> UUID="1e2d0e18-b617-4d37-93f6-773a3b301064" ext4 defaults 0 0
> EOF
[root@localhost data]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon May 6 10:19:09 2024
#
# 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/centos-root / xfs defaults 0 0
UUID=9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
#/dev/mapper/linux-home /home ext4 defaults 0 0
UUID=1e2d0e18-b617-4d37-93f6-773a3b301064 /home ext4 defaults 0 0
任选其一即可。 重启一下就能看到挂载用就可以生效了:
[root@localhost ~]# reboot
连接断开
连接主机...
连接主机成功
Last login: Thu May 23 16:55:25 2024 from 192.168.100.1
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 49G 0 part
│ ├─centos-root 253:0 0 45.1G 0 lvm /
│ └─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─sda3 8:3 0 30G 0 part
└─linux-home 253:2 0 30G 0 lvm /home
sr0 11:0 1 4.4G 0 rom
[root@localhost ~]# df -h /home
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/linux-home 30G 45M 28G 1% /home
最后把备份文件恢复一下搞定。
2、同卷组新增逻辑卷扩容
如果是同卷组下新增,我们就不需要重新新增一个磁盘分区,而是想办法将新增的内存分配到sda2上即可。而sda2上的内存大小其实在LVM管理下都在卷组centos下,所以我们相当于想办法扩大卷组容量即可。
但是如果直接进行卷组扩容操作就会出现这种情况:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sr0 11:0 1 4.4G 0 rom
[root@localhost ~]# vgextend centos /dev/sda2
Physical volume '/dev/sda2' is already in volume group 'centos'
Unable to add physical volume '/dev/sda2' to volume group 'centos'
/dev/sda2: physical volume not initialized.
也就是说我们要重新初始化sda2才能进行分区 ,也就是需要重新对系统已有的/dev/sda2进行重新分区,另外分区时务必注意起始的扇区位置和之前保持一致。
Step2:/dev/sda2重新分区
[root@localhost data]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sr0 11:0 1 4.4G 0 rom
[root@localhost data]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 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 获取帮助):p
磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0000d1ab
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 104857599 51379200 8e Linux LVM
命令(输入 m 获取帮助):d
分区号 (1,2,默认 2):2
分区 2 已删除
命令(输入 m 获取帮助):p
磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0000d1ab
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (2099200-209715199,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-209715199,默认为 209715199):
将使用默认值 209715199
分区 2 已设置为 Linux 类型,大小设为 99 GiB
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p
磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0000d1ab
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 209715199 103808000 8e Linux LVM
命令(输入 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@localhost data]# reboot
首先我们的操作需要通过fdisk将系统现有的sda2给删除掉,然后重新新建sda2并格式化分区类型。重启系统后执行一个重读分区信息表的命令:
[root@localhost ~]# partprobe
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。
partprobe这个命令来自英文词组partition probe的缩写,其功能是重读分区表信息。该命令可将磁盘分区表变化信息通知给系统内核,请求操作系统重新加载分区表。有时我们在创建或删除分区设备后,系统并不会立即生效,这时就需要使用partprobe命令在不重启系统的情况下重新读取分区表信息,使新设备信息与系统同步。这里虽然出现了一个警告,但是没报错就代表重读成功了。接下来就可以进行LVM扩容了。
Step3:物理卷/dev/sda2扩容
这里我们可以看到虽然重新对sda2进行分区了,但是sda2容量并没有发生变化。
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <49.00g 4.00m
此时需要对这个物理卷进行扩容:
[root@localhost ~]# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <99.00g 50.00g
这样此时的物理卷dev/sda2的内存大小就扩大了。
Step4:新增逻辑卷并格式化文件系统
这个就与上一个场景下创建逻辑卷的操作流程没啥区别了:
[root@localhost ~]# lvcreate -L 40G -n home centos
Logical volume "home" created.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 40G 0 lvm
sr0 11:0 1 4.4G 0 rom
如果sda2还有剩余空间可以顺便分给root,但是这里我的已经不够分了也就算了:
[root@localhost ~]# lvextend -l 100%FREE /dev/centos/root
New size given (2561 extents) not larger than existing size (11550 extents)
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 40G 0 lvm
sr0 11:0 1 4.4G 0 rom
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot
└─sda2 LVM2_member tyCr3t-QebO-CRBN-qBci-m7d6-vcix-YpqTNq
├─centos-root xfs 8965db25-01db-435a-b64c-a7fd8dbf0d7b /
├─centos-swap swap dc885773-c65a-4e33-85df-764380eecffe [SWAP]
└─centos-home
sr0 iso9660 CentOS 7 x86_64 2022-07-26-15-09-17-00
但是意外发现centos-home这个对应的文件系统还未格式化,所以还得补充格式化一下:
[root@localhost ~]# mkfs.ext4 /dev/mapper/centos-home
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2621440 inodes, 10485760 blocks
524288 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2157969408
320 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
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot
└─sda2 LVM2_member tyCr3t-QebO-CRBN-qBci-m7d6-vcix-YpqTNq
├─centos-root xfs 8965db25-01db-435a-b64c-a7fd8dbf0d7b /
├─centos-swap swap dc885773-c65a-4e33-85df-764380eecffe [SWAP]
└─centos-home ext4 579c6093-871a-43c2-a531-b18d9605b250
sr0 iso9660 CentOS 7 x86_64 2022-07-26-15-09-17-00
这样后续就可以检查一下重要文件是否存在丢失情况了,如果丢失就将备份数据还原一下。然后就是上一个操作一样可以进行文件挂载操作了,这里就不重复赘述了。
(3)文件系统间的容量调整
这种就是当文件系统间初始内存分配不均时可能会涉及到的操作。比如我们安装docker后docker的日志文件没过多限制,造成其中对应的文件系统内存爆满了影响容器运行,此时可以将其他文件系统上的内存分配到该文件系统下 实现文件系统间的容量调整。
这里我们以现有系统进行操作,这里我们centos-root有21G左右可用,centos-home有刚分配的40G左右可用。
[root@localhost ~]# df -h /home /root
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-home 40G 45M 39G 1% /home
/dev/mapper/centos-root 46G 25G 21G 54% /
我们可以试一下将刚才centos-home下的内存分配10G左右到centos-root下,开始操作:
Step1:文件备份
这个不用多说,由于我们涉及到两个文件系统扩容操作, 数据备份也就更重要了,这里因为centos-home要缩减容量,因此优先要对centos-home挂载的/home目录内的数据进行备份,否则可能调整逻辑卷时可能造成文件丢失:
[root@localhost ~]# tar -cf /tmp/home_bak.tar /home/
然后可以将这个压缩包scp到其他服务器上,毕竟/tmp也属于根目录挂载范围。至于centos-root下的文件,由于是被扩容文件系统,在文件扩容时丢失文件的可能性比centos-home进行缩减操作来说相对较小,可根据个人意愿选择性备份,一般来说推荐备份。以防万一~
Step2:卸载需要缩减容量的文件系统对应的文件目录
这里顾名思义就是/home目录了,使用umount命令进行卸载即可:
[root@localhost ~]# umount /home
如果有时候卸载时出现系统正忙,可根据提示使用fuser先终止使用/home文还能系统的进程然后再进行卸载操作。
[root@localhost ~]# fuser -km /home
Step3:删除/home对应的逻辑卷
[root@localhost ~]# lvremove /dev/mapper/centos-home
Do you really want to remove active logical volume centos/home? [y/n]: y
Logical volume "home" successfully removed
Step4:扩展根目录容器卷并扩展文件系统
[root@localhost ~]# lvextend -L +10G /dev/mapper/centos-root
Size of logical volume centos/root changed from <45.12 GiB (11550 extents) to <55.12 GiB (14110 extents).
Logical volume centos/root successfully resized.
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot
└─sda2 LVM2_member tyCr3t-QebO-CRBN-qBci-m7d6-vcix-YpqTNq
├─centos-root xfs 8965db25-01db-435a-b64c-a7fd8dbf0d7b /
└─centos-swap swap dc885773-c65a-4e33-85df-764380eecffe [SWAP]
sr0 iso9660 CentOS 7 x86_64 2022-07-26-15-09-17-00
[root@localhost ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2956800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=11827200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=5775, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 11827200 to 14448640
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 55.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sr0 11:0 1 4.4G 0 rom
Step5:重建home文件系统
首先需要将删除的逻辑卷重新创建回来,但是这里在计算磁盘容量时要比正常小1G左右较为合适,比如我这块原来/home是40G,现在分配10G后正常可以用30G,但是系统自行计算不一定刚好够,所以建议29G。
[root@localhost ~]# lvcreate -L 29G -n /dev/mapper/centos-home
Logical volume "home" created.
[root@localhost ~]# mkfs.xfs /dev/mapper/centos-home
meta-data=/dev/mapper/centos-home isize=512 agcount=4, agsize=1900544 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=7602176, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=3712, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 55.1G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 29G 0 lvm
sr0 11:0 1 4.4G 0 rom
Step6:挂载原目录并恢复文件
[root@localhost data]# cat >>/etc/fstab<<EOF
> /dev/mapper/centos-home / xfs defaults 0 0
> EOF
[root@localhost data]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon May 6 10:19:09 2024
#
# 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/centos-root / xfs defaults 0 0
UUID=9b684762-37b4-4773-a8c7-b3bdb414c6d9 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
[root@localhost data]#reboot
连接断开
连接主机...
连接主机成功
Last login: Thu May 30 15:52:13 2024 from 192.168.100.1
'abrt-cli status' timed out
[root@localhost ~]#tar -zxf /tmp/home_bak.gz -C /home/
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 56G 25G 31G 45% /
/dev/mapper/centos-home 29G 33M 29G 1% /home
/dev/sda1 1014M 242M 773M 24% /boot
tmpfs 378M 0 378M 0% /run/user/0
这样磁盘就完成了文件系统间的扩容调整了。
四、后记
关于磁盘扩容涉及文件系统大小调整这块,一定要切记:没把握先备份!!!先备份!!!备份!!!
码字不易,希望这篇磁盘扩容类的汇总文章能帮助有需要的同学~
文章不足之处欢迎指正~