Linux磁盘

警告
本文最后更新于 2023-12-04,文中内容可能已过时。

摘要

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

物理存储介质(PhysicalStorageMedia):指系统的物理存储设备:磁盘,如:/dev/sda、/dev/vda等,是存储系统最底层的存储单元。

物理卷(Physical Volume,PV):指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

物理块(Physical Extent,PE):每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

卷组(Volume Group,VG):类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

逻辑卷(Logical Volume,LV):类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

逻辑块(Logical Extent,LE):逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

检查系统中是否安装了LVM管理工具

bash

rpm -qa|grep lvm2

如果未安装,则使用yum 方式安装

bash

yum install -y lvm2

基本PV命令

pvcreate:用于将物理硬盘分区初始化为物理卷,以便被LVM使用。 pvs:用于输出格式化的物理卷信息报表。使用pvs命令仅能得到物理卷的概要信息,如果要得到更加详细的信息可以使用pvdisplaypvscan:扫描系统中连接的所有硬盘,列出找到的物理卷列表。 pvdisplay:用于显示物理卷的属性(大小,PE大小,被卷组描述符使用的空间)。 pvremove:用于删除一个存在的物理卷。

将整个磁盘创建为物理卷的命令为:

bash

pvcreate /dev/vdb

将单个分区创建为物理卷的命令为:

bash

pvcreate /dev/vdb1

创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组:

创建名为data的卷组,使用/dev/vdb创建。

bash

vgcreate data /dev/vdb

创建名为data的卷组,使用/dev/vdb1,/dev/vdb2和/dev/vdc1创建。

bash

vgcreate data /dev/vdb1 /dev/vdb2 /dev/vdc1

创建一个名为docker 大小为使用全部卷组的逻辑卷。这个逻辑卷使用之前创建的卷组的空间。

bash

lvcreate -L 100M -n docker data
lvcreate -L 100%VG -n docker data

bash

mkfs.xfs /dev/data/docker
mkdir data
mount /dev/data/docker /data
echo "/dev/mapper/data-docker  /data  xfs  defaults  0 0" >> /etc/fstab
mount -a

mount -a是自动挂载/etc/fstab里面的东西

首先,取消挂载

bash

umount /data

增加容量

bash

lvextend -l +100%FREE /dev/data/docker
lvextend -L +10G /dev/data/docker

刷新磁盘信息与写入

resize2fs(增大和减小都支持)

bash

resize2fs /dev/data/docker

xfs文件系统使用以下命令同步

xfs_growfs(只支持增大)

bash

xfs_growfs /dev/data/docker

虽然xfs文件系统只支持增加,不支持减少。但并不是说在xfs系统文件下不能减小,只是减小后,需要重新格式化才能挂载上。这样原来的数据就丢失了!

在缩减之前应该先强行检查文件,以确保文件系统处于一至性状态

首先,卸载掉逻辑卷

bash

umount /dev/data/docker

减少容量

bash

lvreduce -L -100G /dev/data/docker

刷新磁盘信息与写入,显然会失败

bash

xfs_growfs /dev/data/docker

只能通过重新格式化这个分区,格式化后才能再次挂载

bash

mkfs.xfs /dev/data/docker -f
mount /dev/data/docker /data

查看分区

text

fdisk -l

其中sda是已经分好区的磁盘,sdb没有分区。

开始分区

text

fdisk /dev/sdb

输入m获取帮助

输入p 查看当前硬盘分区,目前没有分区。

输入n新建一个分区

分区类型,“p”:为基本分区(默认);“e”:为扩展分区。在此我们选择"p",创建一个基本分区;

分区号,范围为1-4。(默认1,顺序累加);

起始扇区,默认为剩余未被分配的最小扇区,推荐选择默认(直接点击回车);

Last扇区,+扇区 or +size{K,M,G},默认为未被分配的最小扇区,此处推荐默认(直接点击回车)。

再次查看分区

输入w保存分区

建立好的分区还不能用,还需要挂载才可以用。但是挂载之前,必须要格式化才行。

格式化命令

格式化成ext3

text

mkfs.ext3 /dev/sdb1

格式化成ext4

text

mkfs.ext4 /dev/sdb1

格式化之后挂载分区

text

mkdir /data
mount /dev/sdb1 /data

这样就挂载成功,可以正常使用了。

使用growpart工具包进行扩容,可以参考阿里云的在线扩容:扩容分区和文件系统

text

umount /dev/sdb1  

卸载之后数据不会丢失,还可以再次挂载

text

fdisk /dev/sdb

输入w保存,这个时候分区已经删除了,可以重新创建。

开机直接挂载 编辑/etc/fstab文件 添加

text

/dev/sdb1               /data                   ext4    defaults        0 0

重启发现已经挂载上去。 0,0 表示开机不检查磁盘。 也可以通过磁盘UUID挂载 如果/dev/sdb1不行,可以试试用UUID进行挂载

查看UUID

text

ls -l /dev/disk/by-uuid/

如果换了UUID还是不行,还有一个方法 手动是可以挂载的,那么把手动挂载的命令写入一个脚本,设置这个脚本开机自启动也是可以实现的

相关内容