yield-bytes

沉淀、分享与无限进步

centos存储扩容配置(基于LVM)

  在全栈开发项目中,当项目已经部署到服务器(虚拟机、物理机或者云主机)后,有些分区若空间分配不合理,数据库以及相关日志文件将很快占满磁盘空间,因此需在后期手动为项目所在服务器空间进行扩容。

步骤
  1. 查看
  2. 分区
  3. 格式化
  4. 挂载到相应目录上
  • 查看fdisk -l

    确认容量不足,可以使用dd命令创建一个1G文件看看

    1
    2
    3
    4
    5
    [root@nn ~]# dd if=/dev/zero of=1.0G.img bs=1M count=1000
    dd: error writing ‘1.0G.img’: No space left on device
    134+0 records in
    133+0 records out
    139460608 bytes (139 MB) copied, 0.471449 s, 296 MB/s

    dd: error writing ‘1.0G.img’: No space left on device

    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
     [root@nn ~]# fdisk -l
    Disk /dev/sda: 4294 MB, 4294967296 bytes, 8388608 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: dos
    Disk identifier: 0x000cef21

    Device Boot Start End Blocks Id System
    /dev/sda1 * 2048 2099199 1048576 83 Linux
    /dev/sda2 2099200 8388607 3144704 8e Linux LVM

    Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 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 /dev/mapper/centos-root: 2785 MB, 2785017856 bytes, 5439488 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 /dev/mapper/centos-swap: 432 MB, 432013312 bytes, 843776 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

    以上指:
    两个存储(硬盘)设备分别sda和sdb
    Disk /dev/sda: 4294 MB,该硬盘已分区:sda1,sda2,原系统使用4G的存储空间
    Disk /dev/sdb: 5368 MB,==该硬盘未分区,5G硬盘为新增==
    ==以下信息,扇区有分逻辑扇区和物理扇区,对应512字节和4096字节,为何如此规划?==
    Disk /dev/sda: 4294 MB, 4294967296 bytes, 8388608 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    参考IBM官网开发者论坛的解释:
    解释得挺通俗易懂

  • 大致意思:原计算机界存储底层设计一个物理扇区对应512字节,里面包括数据和纠错冗余码,但现在需要存储大量数据,需要 ==提高每个物理扇区的字节容量,才能从整体上扩大硬盘容量,也让每个扇区放入更强大的纠错算法==,从而达到增加磁盘容量+提高可靠性两方面提升
  • 在以往计算机的软件产业链里面,都是基于512 字节扇区来设计和实现,例如在基本输入/输出系统(BIOS)、引导装载程序、操作系统内核、文件系统代码和磁盘工具等工具中,也就是“软件层”只认512标准,物理扇区却提供4096,如何处理这种矛盾?
  • 采用“中间件(内核驱动?)”软件层, ==将底层物理扇区划分为8个512字节的扇区,对于“软件层”来说,它们还是基于在512字节的扇区去操作数据==,西部数据是第一家生产这种磁盘的制造商,它用“ Advanced Format ”来代表带 4096 字节物理扇区且向 512 字节逻辑扇区转换的磁盘
    既然涉及到数据写入4096字节物理扇区的的磁盘,中间需要分8个逻辑扇区去写入,那么这个过程是性能损耗的,具体说明如下:
    最新的文件系统使用 4096 字节或更大尺寸的数据结构,因此,大部分磁盘 I/O 操作占用4k倍数的大小扇区,假设现在Linux系统要将一个文件写入到磁盘,
    (1)当文件系统数据结构正好与底层物理分区4k大小一致,对 4k字节数据结构的读,就是直接对单一扇区的读写,因此硬盘的固件不需要做其他操作,不影响性能;
    (2) 但当文件系统数据结构与底层物理扇区4k不完全一致时,例如文件为7k大小,读写操作必须使用两个物理扇区,对于读操作,因为读写头总是以大概率扫过连续两个扇区,不会消耗而外时间,==而对于写操作,磁盘的固件首先读取两个物理扇区,修改两个扇区的分区(分成2*8=16个逻辑扇区),然后入两个物理扇区。该操作所需时间比 4k占用一个扇区时所需时间多。因此,性能下降。==
    (3)如何判断文件数据结构是否得到合理对齐(放置到扇区上)? 大多数文件系统将其数据结构与包含其本身的分区开头对齐。因此,如果一个分区起始于以一个 4096 字节(或8 个扇区的分界)边界,例如下表所示,则表示它得到合理对齐
分区 start end
sda1 2048 4096
sda2 4096 8192
sda3 8192 (8192+4096*10000)
  • 分区

    在使用fdisk /dev/sdb 进行分区时,由于centos已经默认第一个分区的边界时从2048开始,而是不是从0,128等小值开始,以下是以4096作为分区的起始值,为何要以一个大值作为第一个扇区边界值:==为 MBR 与第一个分区之间的未分配空间中的装载引导程序代码留出空间==
    Partition number (1-4, default 1):
    First sector ==(2048-10485759, default 2048)== 4096
    Last sector, +sectors or +size{K,M,G} (4096-10485759, default 10485759):
    Using default value 10485759
    Partition 1 of type Linux and of size 5 GiB is set
    ==要设为LVM分区,t命令更改==
    Command (m for help): t
    Selected partition 1
    Hex code (type L to list all codes): 8e
    Changed type of partition ‘Linux’ to ‘Linux LVM’

Command (m for help): w
The partition table has been altered!
查看最新分区

1
2
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1 2048 10485759 5241856 8e Linux LVM

5G硬盘已经被分区sdb1,LVM类型

  • 格式化

    格式化为一定格式的文件系统,与目标挂载目录的文件系统一致
    通过命令查看
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@dn1 ~]# df -Th
    Filesystem Type Size Used Avail Use% Mounted on
    /dev/mapper/centos-root xfs 2G 1.9G 1 80% /
    devtmpfs devtmpfs 482M 0 482M 0% /dev
    tmpfs tmpfs 494M 0 494M 0% /dev/shm
    tmpfs tmpfs 494M 7.0M 487M 2% /run
    tmpfs tmpfs 494M 0 494M 0% /sys/fs/cgroup
    /dev/sda1 xfs 1014M 162M 853M 16% /boot
    tmpfs tmpfs 99M 0 99M 0% /run/user/0
    ....
    以上可以看到根目录/ 文件系统格式为 xfs
    故将sdb1格式为xfs
    1
    2
    3
    4
    5
    # 可以看到mkfs有常见的文件系统格式
    [root@nn ~]# mkfs
    mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
    # 将新分区格式为xfs
    [root@nn ~]# mkfs.xfs /dev/sdb1
  • 调整目标LVM大小
    (1)查看现有Volume Group名称
1
2
3
4
5
6
[root@nn ~]# vgdisplay 
--- Volume group ---
VG Name centos
System ID
Format lvm2
.....

这里vg名称为默认值:centos
(2)对新分区sdb1创建对应的物理卷

1
pvcreate /dev/sdb1

(3) 用以上物理卷扩展VG:centos
1
2
3
4
5
vgextend centos /dev/sdb1
# No physical volume label read from /dev/sdb1 Writing physical volume
#data to disk "/dev/sdb1"
#Physical volume "/dev/sdb1" successfully created
#Volume group "centos" successfully extended

(4) 扩展 LVM 的逻辑卷 centos-root
查看有哪些LVM逻辑卷
1
2
3
4
5
6
7
8
9
10
11
[root@nn ~]# lvdisplay 
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV Size 412.00 MiB
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV Size 2.59 GiB

截取关键行,以上显示有两个逻辑卷,swap和root,都归属于VG:centos
现在要用sdb1增加的容量来扩展的root 逻辑卷,对于的LV path:/dev/centos/root
==扩展==
==lvextend /dev/centos/root /dev/sdb1==
==调整大小==
==xfs_growfs /dev/centos/root==

(5) 查看扩展效果

1
2
3
[root@nn ~]# lvscan 
ACTIVE '/dev/centos/swap' [412.00 MiB] inherit
ACTIVE '/dev/centos/root' [<7.59 GiB] inherit

1
2
3
4
5
6
7
8
9
[root@nn ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 7.6G 2.9G 4.8G 38% /
devtmpfs devtmpfs 482M 0 482M 0% /dev
tmpfs tmpfs 494M 0 494M 0% /dev/shm
tmpfs tmpfs 494M 7.0M 487M 2% /run
tmpfs tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 162M 853M 16% /boot
tmpfs tmpfs 99M 0 99M 0% /run/user/0

以上都说明逻辑卷root对于根目录,容量从2.6G,扩展到7.6G