linux centos 文件系统与磁盘分区/lvm逻辑卷

一、文件系统和磁盘

VMware虚拟机添加硬盘
在这里插入图片描述
//一般添加完成之后,如果想要能够识别,需要重启虚拟机,不过这里也可以通过命令的方式识别

root@base~]#echo"---">>
/sys/class/scsi_host/host0/scan
[root@base~]#echo"---">>
/sys/class/scsi_host/host1/scan
[root@base~]#echo"---">>
/sys/class/scsi_host/host2/scan
[root@base~]#fdisk-l
...
Disk/dev/sdb:21.5GB,21474836480bytes,41943040
sectors
Units=sectorsof1*512=512bytes
Sectorsize(logical/physical):512bytes/512bytes I/Osize(minimum/optimal):512bytes/512bytes

磁盘的构成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
硬盘的物理构成:
扇区(sector)、磁道(track)、磁头、柱面(cylinder)

分区:就是记录每一个分区的起始柱面和结束柱面。分区信息存放在0柱面0磁头1扇区上:MBR主引导记录(446字节)+DPT磁盘分区表(64字节)
+结束标志(2个字节)

硬盘的主引导记录(MBR)是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区(活动分区)内的操作系统,并用主分区信息表来管理硬盘。

文件系统:是操作系统用于明确存储设备(常见的是磁盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。

基本概念

block :数据存储的最小单元。
inode:索引节点,全局唯一编号,除了记录文件的属性外,同时还具有指针功能,指向文件内容放置的块。
(里面保存的是文件的权限,所有者,所属主等基本信息)
1、文件的拥有者与用户组(owner/group)
2、文件的访问模式(read/write/excute)
3、文件的类型(type)
4、文件建立或状态改变的时间(ctime)、最近一次的读取时间(atime)、最近修改时间(mtime)
5、文件的大小
6、定义文件属性的标志(flag),如setUID…
7、文件真正内容的指针(pointer)

文件系统
完整的文件系统图:

也称为boot sector。
它位于分区上的第一个块,占用1024字节,并非所有分区都有这个
boot sector,只有装了操作系统的主分区和装了操作系统的逻辑分区才有。里面存放的也是boot loader,这段boot loader称为VBR(主分区装操作系统时)或EBR(扩展分区装操作系统时),这里的Boot loader 和mbr上的boot loader是存在交错关系的。开机启动的时候,首先加载mbr中的bootloader,然后定位到操作系统所在分区的boot serctor 上加载此处的boot loader。

group description(组描述):
既然文件系统划分了块组,那么每个块组的信息和属性元数据又保存在哪里呢?ext文件系统为每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组成块组描述符表
GDT(group descriptor table)。但是不是每个块组中都存放了块组描述符。ext文件系统的存储方式是:将它们组成一个GDT,并将该GDT 存放于某些块组中,存放GDT的块组和存放superblock和备份
superblock的块相同,也就是说它们是同时出现在某一个块组中的。读取时也总是读取Group0中的块组描述符表信息。

superblock(超级块):
记录整个文件系统相关信息
1、block与inode的总量
2、未使用和已使用的inode/block数量
3、文件系统的载入时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息
4、有效位的值,已载入为0,未载入为1

block bitmap(块位图):
此处记录block是否使用
在向硬盘存储数据时,文件系统需要知道哪些块是空闲的,哪些块是已经占用了的,位图只使用0和1标识对应block是空闲还是被占用,0 和1在位图中的位置和block的位置一一对应,第一位标识第一个块,第二个位标识第二个块,依次下去直到标记完所有的block。1G的文件只需要128个block做位图就能完成一一对应。通过扫描这100多个
block就能知道哪些block是空闲的,速度提高了非常多。但是要注
意,bmap的优化针对的是写优化,因为只有写才需要找到空闲block 并分配空闲block。对于读而言,只要通过inode找到了block的位置,cpu就能迅速计算出block在物理磁盘上的地址

inode bitmap(inode位图):
此处记录inode是否使用
标识inode号是否被分配的位图称为inode bitmap简称为imap。这时要为一个文件分配inode号只需扫描imap即可知道哪一个inode号是空闲的

inode table(inode表):
为每个inode的数据存放区
一个文件系统中可以说有无数多个文件,每一个文件都对应一个inode,难道每一个仅128字节的inode都要单独占用一个block进行存储吗?更优的方法是将多个inode合并存储在block中,对于128字节的inode,一个block存储8个inode,对于256字节的inode,一个block 存储4个inode。这就使得每个存储inode的块都不浪费。在ext文件系统上,将这些物理上存储inode的block组合起来,在逻辑上形成一张inode表(inode table)来记录所有的inode。

block group
对用户是不可见的,子逻辑区域,有个超级标示区
为了解决bmap、inode table和imap太大的问题,引入块组概念,在物理层面上的划分是将磁盘按柱面划分为多个分区,即多个文件系统;在逻辑层面上的划分是将文件系统划分成块组。每个文件系统包含多个块组,每个块组包含多个元数据区和数据区:元数据区就是存储bmap、inode table、imap等的数据;数据区就是存储文件数据的区域。

data block(数据块):
为每个block的数据存放区

软连接和硬链接:
链接:硬链接和软链接(符号链接),多个文件指向同一个iNode,硬链接;符号连接,指向的是源文件的路径,而不是文件块

硬链接
硬链接:在某个目录下的block中增加一个文件关联数据,不会用到inode 与磁盘空间
只能对文件进行创建,为了避免循环引用
不能跨文件系统,可以在不同目录下
创建硬链接可以增加文件被连接的次数

软连接
软连接(符号链接):建立一个独立的文件,这个文件会让数据的读取指向它连接的文件内容
可以对目录创建
可以跨文件系统
不会增加被链接文件的链接次数
其大小为指定路径所包含的字符个数

二、磁盘分区

传统的硬盘分区都是MBR格式,MBR分区位于0扇区,他一共512字节,前446字节是grub引导程序,中间64字节是分区表,每个分区需要16个字节表示,因此主分区和扩展分区一共只能有4个分区,超过4个的分区只能从扩展分区上再设置逻辑分区来表示。每个分区的大小无法超过2T。 MBR 的最后2个字节是结束符号。

GPT格式,打破了MBR的限制,可以设置多达128个分区,分区的大小根据操作系统的不同有所变化,但是都突破了2T空间的限制。支持高达
18EB (1EB=1024PB,1PB=1024TB) 的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 ID (GUID)。与 MBR 分区的磁盘不同,GPT的分区信息是在分区中,而不象MBR一样在主引导扇区。为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区建立了一个保护分区 (Protective MBR)的MBR分区表,这种分区的类型标识为0xEE,这个保护分区的大小在Windows下为128MB,Mac OS X下为
200MB,在Window磁盘管理器里名为GPT保护分区,可让MBR类磁盘管理软件把GPT看成一个未知格式的分区,而不是错误地当成一个未分区的磁盘

在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。

分区工具:
fdisk(创建MBR分区)
用来管理分区
[root@base~]#fdisk/dev/sdb
p: 显示当前硬件的分区,包括没有保存的改动
n: 创建一个新的分区
d:删除一个分区
w: 保存并退出
q: 不保存退出
t: 修改分区类型(文件系统类型)
l: 显示所支持的所有类型

分区实例:

//我们可以发现,创建分区都是按柱面来划分,其实柱面到结束柱面。那么下边我们来划分一个分区。

//查看分区情况
在这里插入图片描述
在这里插入图片描述
//如果你有4个主分区之后,即便你硬盘还有空间,但是不会允许你继续创建分区的,这是在哪里决定的?MBR里bootloarder的64个标识分区。每16位一个。所以我们通常会把第四个分区创建为扩展分区。
在这里插入图片描述
在这里插入图片描述
//创建完成之后,发现它的格式色extended,扩展分区,它是不能够直接使用的,为什么那?前边我们说过,它其实就是一个指针,直接指向后边真实的空间的。所以我们还得再重新编辑分区。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
//到这一步就完了么?很显然没有,因为内核还尚未识别
在这里插入图片描述
gdisk(创建GPT分区)

LVM逻辑卷
对于普通的分区,扩展度不高,一旦分区格式化完成,很难灵活的再增加或者减少分区大小。为了解决这个问题,可以使用LVM(逻辑卷)。基本过程是把物理磁盘或者分区初始化称为物理卷(PV),然后把PV加入
VG(卷组),最后在VG上划分逻辑的分区(LVM),LVM可以当做普通的分区进行格式化和挂载。
LVM:可以动态调整分区大小。
PV:(physical volume)物理卷
VG:(volume Group)卷组
LV:(logical volume)逻辑卷

三、测试创建lvm:

环境准备
1、使用4个分区,每个分区容量均为1GB,且system ID 为8e.
2、全部的分区整合成为一个 VG,VG 名称设置为 vgbdqn;且 PE 的大小为 16MB;
3、创建一个名为 lvyjs 的 LV,容量大约 2G
4、最终这个 LV 格式化为 xfs 的文件系统,且挂载在 /bdqn/yjs 中
准备:看要求要用的物理卷的要求,创建对应分区。
在这里插入图片描述
1、创建PV
pvcreate :将实体 partition 创建成为 PV ;
pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
pvdisplay :显示出目前系统上面的 PV 状态;
pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性
在这里插入图片描述
//直接就是pvcreate就可以将分区转化成PV,注意这条指令的大括号和…用途。
在这里插入图片描述
这就分别显示每个 PV 的信息与系统所有 PV 的信息。尤其最后一行,显示的是:
整体 PV 的量 / 已经被使用到 VG 的 PV 量 / 剩余的 PV 量
在这里插入图片描述
2、创建VG
vgcreate :创建 VG 的
vgscan :搜寻系统上面是否有 VG 存在?
vgdisplay :显示目前系统上面的 VG 状态;vgextend :在 VG 内增加额外的 PV ;
vgextend :在 VG 内增加额外的 PV ;
vgreduce :在 VG 内移除 PV;
vgchange :设置 VG 是否启动(active);
vgremove :删除一个 VG;

//VG创建格式
vgcreate [-s N[mgt]] VG名称 PV名称选项与参数:
-s :后面接 PE 的大小(size),单位可以是 m, g, t (大小写均可)
与 PV 不同的是, VG 的名称是自订的!我们知道 PV 的名称其实就是partition 的设备文件名,但是这个 VG 名称则可以随便你自己取

//将刚创建的4个PV中3个PV创建成一个VG,并且指定PE为16MB.
在这里插入图片描述
//这里可以看到刚刚创建的PV /dev/sdb8还没有被使用。
在这里插入图片描述
在这里插入图片描述
//刚才我们说过,我们要做4个PV创建,所以这里我们再把刚才没有用到的/dev/sdb8添加进去。
在这里插入图片描述
3、创建LV
lvcreate :创建 LV
lvscan :查询系统上面的 LV ;
lvdisplay :显示系统上面的 LV 状态
lvextend :在 LV 里面增加容量!
lvreduce :在 LV 里面减少容量;
lvremove :删除一个 LV !
lvresize :对 LV 进行容量大小的调整!

//创建LV格式
lvcreate [-L N[mgt]] [-n LV名称] VG名称lvcreate [-l N] [-n LV名称] VG名称
选项与参数:
-L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE,因此这个数量必须要是 PE 的倍数,若不相符,系统会自行计算最相近的容量。
-l :后面可以接 PE 的“个数”,而不是数量。若要这么做,得要自行计算 PE 数。
-n :后面接的就是 LV 的名称
在这里插入图片描述
//由于本实验中每个 PE 为 16M ,如果要用 PE 的数量来处理的话,那使用下面的指令也可以!
在这里插入图片描述
4、格式化
//格式化LV,这里注意一点,LV的平成必须使用全名。如/dev/vg/lv
在这里插入图片描述
5、挂载
在这里插入图片描述
LVM扩展
LVM最大的特点就是弹性调整磁盘容量大小,那么我们就来先分析一下,如果我们要扩展LV的容量的话,需要怎么做。
首先,如果VG空间还足够的话,直接LVextend就可以了,我们暂且不说,我们要考虑的是,如果VG空间不够的话,我们应该怎么做。我们都知
道,VG那是用物理卷来组成的,也就是说,想要扩展你的VG容量,前提就是有足够的物理卷,物理卷我们这里是虚拟机,直接添加,那么到公司以后就是购买了,当物理磁盘添加成功之后,就是转化成PV,然后那,用
VGextend把创建好的PV加进来。
那么VG空间足够,想要扩展LV,直接就是LVextend,然后lvresize直接添加还有一种那是关于文件系统的增大与缩小,比如说ext2,3,4这个家族,还有xfs,那么这里不是重点,而且一般也不会去改,大家就是知道一下就行
了。

那么接上面的实验,我们想要把刚才的LV /dev/vgbdqn/lvbdqn 挂载目录是 /bdqn/yjs空间增加500M,应该怎么做那?
//首先我们要考虑VG空间是否够用。
在这里插入图片描述
//确定了VG空间够用,那么我们直接来扩展。
在这里插入图片描述
//注意的是大写的L 后面直接跟容量大小,也可以用小l后面跟PE的倍数。
在这里插入图片描述
//LV是扩大了,但我们再看,挂载目录下文件系统的容量并没有增加,那么我们需要一条命令,让系统重新加载一下文件系统的大小。

在这里插入图片描述
在这里插入图片描述
在上表中,注意看两次 xfs_info 的结果,你会发现到 1)整个 block group (agcount)的数量增加一个!那个 blockgroup 就是纪录新的设备容量之文件系统所在!而你也会 2)发现整体的 block 数量增加了!这样整个文件系统就给他放大了!同时,使用 df 去查阅时,就真的看到增加的量
了!

最后,请注意!目前的 XFS 文件系统中,并没有缩小文件系统容量的设
计!也就是说,文件系统只能放大不能缩小喔!如果你想要保有放大、缩小的本事,那还请回去使用 EXT 家族最新的 EXT4 文件系统啰!XFS 目前是办不到的!
好的,到这里先做一下练习,文件系统格式先用xfs的,然后练习一下扩容,做一个PV,一个VG,然后做成LV
在这里插入图片描述
ext4格式缩容
(必须先缩减逻辑卷的逻辑边界,再缩减物理边界)
注意:
1、不能在线缩减,得先卸载;
2、确保缩减后的空间大小依然能存储原有的所有数据;
3、在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态。
在这里插入图片描述
现在,将上述LV空间缩容至8G
在这里插入图片描述
//对lv强制执行文件系统检测
在这里插入图片描述
//使用resize2fs对lv逻辑卷的逻辑边界空间大小调整为缩减后的大小
在这里插入图片描述
//使用lvreduce对lv逻辑卷的物理边界进行缩减
在这里插入图片描述
//然后继续对lv进行挂载操作
在这里插入图片描述

实战一 lvm /根盘扩容

添加一块300G硬盘,我这里是没有磁盘空间,所以我拿20G做演示
在这里插入图片描述
1、查看新添加的盘符名字

lsblk

在这里插入图片描述
2、划分分区

fdisk /dev/sdb <<EOF
n
p
1


t
8e
w
EOF

在这里插入图片描述
3、创建pv

pvcreate /dev/sdb1

4、查看已有卷组

vgscan

5、添加pv到卷组

vgextend centos /dev/sdb1

6、查询系统lv状态

lvdisplay

在这里插入图片描述
7、将所有卷组大小分配给lv

lvresize -l 100%VG /dev/centos/root

在这里插入图片描述
8、LV是扩大了,但我们再看,挂载目录下文件系统的容量并没有增加,那
么我们需要一条命令,让系统重新加载一下文件系统的大小

xfs_info /
xfs_growfs /

在这里插入图片描述
9、查看磁盘是否扩容成功

lsblk
df -h

在这里插入图片描述
在这里插入图片描述

实战二 新建lvm

这里不做过多简述

fdisk /dev/vdb <<EOF
n
p
1


t
8e
w
EOF
pvcreate /dev/vdb1
vgcreate datavg /dev/vdb1
lvcreate -l 100%VG -n datalv datavg   
mkfs.xfs /dev/datavg/datalv
mkdir -p /data
echo "/dev/datavg/datalv /data  xfs     defaults        0 0" >>/etc/fstab
mount -a

实战三 gpt新建lvm

parted /dev/vdb
mklabel gpt
mkpart primary xfs 0 -1
toggle 1 lvm
quit
partprobe

pvcreate /dev/sdb1 //普通磁盘转换成PV
pvs //查看VG组信息

vgcreate vgdata /dev/sdb1 //创建VG卷组
vgextend vgdata /dev/sdb1 //加入VG组,vgdata要加入VG组名,/dev/sdc1新PV
vgdisplay //查看VG卷组详细信息

#ext4方式
resize2fs /dev/centos/root
#xfs_growfs方式使用
xfs_growfs /dev/mapper/centos-root

查看VG卷组信息
vgs

#创建LV
#lvcreate -n 指定逻辑卷的名称 -L指定LV的大小SIZE(M,G) -l: 指定LE的数量 vganme
lvcreate -n lvdata -L 500G vgdata

#查看逻辑卷信息
lvs

#格式化文件磁盘挂载

mkdir /data

mkfs.xfs /dev/vgdata/lvdata

mount /dev/vgdata/lvdata /data

#加入开机启动项
cat /etc/fstab

实战四 单独挂载一块磁盘,并设置挂载目录/home/xx

1、查看新增磁盘

lsblk

在这里插入图片描述
2、查看文件系统类型

df -hT

xit
3、格式化磁盘

mkfs.xfs -f /dev/sdc

4、查看uuid

blkid

在这里插入图片描述
5、创建挂载目录

mkdir -p /home/xx

6、设置永久挂载

vim /etc/fstab
UUID="07b72995-e9dc-4556-814b-5c23cedc911b" /home/xx xfs defaults        0 0

在这里插入图片描述
7、挂载

mount -a

8、查看是否成功挂载

df -h

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值