跳到主要内容

19、Linux 实战:磁盘管理

磁盘配额

概念

磁盘配额限制概念

1)内核必须支持磁盘配额

//Centos7.x的默认内核已支持

2)磁盘配额只对一般身份用户有效

//对root用户无效,因为系统中所有数据都属于root

3)不同的文件系统在磁盘配额的处理情况上不一样

//xfs较ext文件系统,就支持了限制目录磁盘配额

4)若启动SELinux,并非所有目录均可设置磁盘配额

//Centos默认都启动SELinu内核功能,以加强某些特殊权限的控制

且默认情况下,磁盘配额仅能针对/home进行设置

磁盘配额设置概念

1)仅能针对用户(user)、用户组(group)和个别目录(project)限制

//用户组限制和目录限制无法同时出现

2)限制为:容量(block)限制和文件数量(inode)限制

//限制block使用量:管理用户磁盘容量的限制
//限制inode使用量:管理用户可建立文件数量

3)限制分为:软限制(soft)和硬限制(hard)

硬限制(hard):表示使用量绝对不会超过该值

1)若超过hard限制值,系统会锁定用户的磁盘使用权

软限制(soft):若超过soft值但低于hard值时,每次用户登录系统时,会接收到系统发出的警告信息,并给予一个宽限时间(grace
time)

宽限时间(grace time):仅在用户磁盘使用量介于soft和hard之间时出现

文件系统的支持:通过更改/etc/fstab文件实现磁盘配额的文件系统支持

1)并不是所有的文件系统都支持磁盘配额(如:VFAT文件系统就不支持)

如:使/home目录支持用户和用户组的磁盘配额
 

设置 实现
uquota/userquota/quota 针对用户限制
gquota/grpquota 针对用户组限制
pquota/prjquota 针对目录限制

//prjquota和grpquota不能同时存在

xfs_quota

xfs_quota命令:查看/设置xfs文件系统的磁盘配额

指令格式1:xfs_quota 选项 挂载点 //查看磁盘配额

选项 含义
-x 专家模式 仅该模式可使用-c命令参数
-c 后接命令参数,实现指定功能
命令参数 含义
print 列出所有文件系统信息
df 列出指定文件系统的使用信息
report 列出磁盘配额指定选项的信息 选项:u(user)、g(group)、r(project) 和b(block)、i(inode)默认显示ugr
state 列出目前支持磁盘配额的文件系统相关状态

如:列出当前主机中所有文件系统信息
 

如:列出/home支持的quota挂载点文件系统使用的情况
 

如:列出/home下所有用户的磁盘配额限制值
 

如:查看目前支持磁盘配额文件系统的状态
 

指令格式2:xfs_quota 选项 挂载点 //设置磁盘配额

命令参数 含义
limit 设置各项限制 bsoft/bhard:block的soft/hard限制值 isoft/ihard:inode的soft/hard的限制值 name:指定用户/用户组或目录
timer 设置grace time 也可针对block和inode或用户/用户组和目录设置

//其中-u、-g、-r和-b、-i分别对应user、group、project和block、inode

如:设置myquota1用户block软限制为250M,硬限制为300M
 

如:设置/home的用户/用户组的block的宽限时间为14天
 

设置目录的磁盘配额与用户/用户组不同,需指定其选项名称选项标识符,其中/etc/projid记录选项名称,/etc/projects记录选项标识符,在设置目录的磁盘配额时是使用选项名称,而不是目录名称

如:/home/myquota目录指定选项标识符为:11,选项名称为:myquotaproject
 
//指定完成后,需初始化

如:设置myquota目录的block软限制为:450M,硬限制为:500M
 
 

指令格式3:xfs_quota 选项 挂载点 //限制磁盘配额

命令参数 含义
disable 暂时取消磁盘配额功能
enable 恢复磁盘配额的功能
off 完全关闭磁盘配额的功能 只能通过重新挂载才能再次启动(enable不能恢复)
remove 移除磁盘配额的设置 必须在off的状态下才能执行

//移除会将所有的设置全部移除

如:取消用户和目录的磁盘配额功能后再恢复
 
 

如:完全关闭磁盘配额的功能
 

//使用链接文件(ln)实现不同文件系统下的磁盘配额

磁盘阵列

磁盘列阵(Redundant Arrays of Inexpensive Disks,RAID):独立冗余磁盘阵列

1)本质是通过硬件/软件将多个较小的磁盘整合成为一个较大的磁盘设备;

2)具有较大的磁盘空间和较强的数据保护功能;

3)不同层级别的RAID其特性也不同;

RAID层级

RAID 0

等量模式(stripe):性能最佳

1)RAID 0组成:每块磁盘都会先被分割成为小数据块(chunk);

2)当有数据写入时,数据就会被切割成符合小数据块的大小,然后再依序的一个一个地放置到不同的磁盘中;
 

1)越多块磁盘组成的RAID 0性能会越好,因为每块负责的数据量更低了;

2)RAID 0中有任何一块磁盘损坏,RAID 0上所有数据都会损坏而无法读取;

3)当使用不同容量的磁盘来组成RAID 0时,由于数据是一直等量地依序写入到不同磁盘中,当小容量磁盘的数据块被用完时,所有的数据都将被写入剩余的磁盘中;

4)常用于强调性能但数据不重要的环境;

RAID 1

镜像模式(mirror):完整备份

1)RAID 1组成:让同一份数据,完整地保存在两块磁盘中;

2)当有数据写入时,RAID 1会将数据分为多股(副本),并分别写入到各个磁盘中

 

1)该模式最好使用相同的磁盘容量(最好是一模一样的磁盘);

//若磁盘容量不同,则总容量将以最小的磁盘容量为主

2)RAID 1任何一块磁盘损坏,数据都可完整地保存下来;

3)常用于数据与备份均衡中;

RAID 1+0/RAID 0+1

RAID 1+0
1)先让两块磁盘组成RAID 1,并且存在两组以上;

2)将这些组再组成RAID 0

//RAID 0+1就是先组成RAID 0,再组成RAID 1

如:4块磁盘组成RAID 1+0
 

//常用于服务器和云系统服务中

RAID 5/RAID 6

均衡模式:性能与数据备份的均衡

1)RAID5组成:通过至少三块以上的磁盘形成磁盘阵列,在每个循环的写入过程中(striping),在每块磁盘会加入一个奇偶校验数据(Parity),该数据会记录到其他磁盘的备份数据中,实现磁盘损坏时的数据重建功能

 

1)每个循环写入时,都将部分的奇偶校验值记录下,且每次保存到不同磁盘;

//任何一个磁盘损坏时都能够由其他磁盘的校验码来重建原本磁盘内数据

2)RAID 5的总容量是整体磁盘的容量减去一块磁盘的容量

3)RAID 5默认仅能支持一块磁盘的损坏;若损坏的磁盘数量大于等于两块时,该组的RAID5的数据就损坏了

RAID 6:在RAID5的基础上,使用两块磁盘的容量去存储奇偶校验值,就使允许损坏的磁盘达到两块,但因此磁盘的总容量也需减去两块

区别 RAID 0 RAID 1 RAID 1+0 RAID 5 RAID 6
最少磁盘数 2 2 4 3 4
最大容错磁盘数 n-1 n/2 1 2
数据安全性 最好 最好 更好
写入性能 n 1 n/2 <n-1 <n-2
读出性能 n n n <n-1 <n-2
可用容量 n 1 n/2 n-1 n-2

Spare Disk

热插拔:当磁盘阵列的磁盘损坏时,将坏掉的磁盘拔除,换上一块新的磁盘,再启动磁盘阵列后,磁盘阵列可主动重建原本坏掉的磁盘数据到新的磁盘上,实现磁盘数据的恢复(若实现热插拔,就需要由热备份磁盘的支持)

热备份磁盘(Spare Disk):一块或多块没有被包含在原本磁盘阵列级别中的磁盘,该磁盘一般不会被磁盘阵列使用;当磁盘阵列出现磁盘损坏时,该磁盘就会被主动拉进磁盘阵列中,并将坏掉的磁盘移出磁盘阵列,然后立即重建数据系统

软件RAID

硬件RAID:通过磁盘阵列卡来完成磁盘阵列的功能

1)磁盘阵列卡上由一块专门负责处理RAID任务的芯片;

2)性能不错,占用资源小,但价格较贵;

软件RAID:通过软件模式磁盘阵列的任务

1)消耗系统资源较多;

Centos提供的软件磁盘阵列为mdadm软件,该软件以分区/disk为单位

1)由于软件磁盘阵列是系统模拟的,所以使用的设备文件名都是系统设备文件

2)文件名一般为:/dev/md0、/dev/md1等

mdadm

mdadm命令:查看/设置软件磁盘阵列的设定

指令格式1:mdadm --detail 设备名 //列出磁盘阵列设备的详细信息

指令格式2:mdadm 选项 设备名 //建立磁盘阵列设备

选项 含义
--create 指定RAID磁盘设备名
--atuo= 是否建立RAID磁盘(yes/no)
--chunk=N 指定RAID磁盘中数据块大小N
--raid-devices=N 指定组成RAID磁盘的设备个数N
--spare-devices=N 指定RAID磁盘的热备份设备个数N
--level=N 指定磁盘阵列的级别N(0、1、5、10和01)

1)设备可为:整个磁盘或磁盘分区

2)建立后的RAID磁盘还需格式化才可使用(类似普通磁盘的使用过程)

如:用/dev/vad5、/dev/vad6、/dev/vad7、/dev/vad8、/dev/vad9建立一个设备名“/dev/md0”,数据块为“256K”,且具有一个热备份磁盘的RAID5
 
//设备的总数必须等于--raid-devices和--spare-devices相加的总数和

如:查看/dev/md0设备的磁盘阵列
 

/proc/mdstat文件:记录md设备驱动器控制的RAID设备信息

如:查看当前主机的/proc/mdstat
 

第一行:active raid5代表md0设备层级为RAID5,vda8[5] vaid94 vaid7[2] vaid6[1] vaid5[0]指定md0由那些设备组成;“[]”中数字代表该设备在RAID中的顺序;(S)代表该设备为热备份设备

第二行:3142656 blocks super 1.2 level5代表该磁盘阵列具有3142656个区块,且RAID层级是5,256K chunk代表写入磁盘的数据块大小为256K,algorithm 2 [4/4],[UUUU]代表md0使用的algorithm2磁盘阵列算法;[4/4]其中第一个4代表此磁盘阵列需要4个设备,第二个4代表有4个设备正常运行,[UUUU]代表第一个4的设备运行情况,U代表正常运行,_代表异常运行

指令格式3:mdadm 选项 设备名 //修改磁盘阵列设备

选项 含义
--manage 进入管理/修改模式
--fail 将指定设备设置为损坏状态
--add 将指定设备加入到磁盘阵列中
--remove 将指定设备从磁盘阵列中删除

//只有加--manage选项才可实现修改,能够实现在线情况下更改磁盘设备

如:修改/dev/md0设备中的vda7磁盘状态为损坏
 

/etc/mdadm.conf文件:RAID配置文件

//该文件若不存在,可自行建立

修改格式:ARRAY RAID设备名 UUID=设备UUID

如:将md0设备信息添加至配置文件
 

关闭RAID

1)卸载已挂载的RAID设备

2)删除RAID设备相关配置信息

//若设置自动启动,还需删除/etc/fstab中相关信息

3)覆盖RAID设备的metadata(元数据)

4)关闭RAID设备

5)重新规划分区

//RAID在启动时,会将相关数据另存一份在磁盘中;若在关闭RAID时,没有重新规划分区,重启后系统会自动建立该RAID,且名称可能为“/dev/md127”

如:关闭/dev/md0
 

逻辑卷管理

逻辑卷管理(Logical Volume Manager,LVM):弹性地调整文件系统的容量

1)LVM可整合多个物理分区,让这些分区在管理上就像是一个磁盘

概念

物理卷(Physical Volume,PV):LVM最底层的物理卷(磁盘、磁盘分区或RAID)

1)实现:通过更改系统标识符(System ID)为“8e”(LVM专属标识符),再使用pvcreate命令将其转成PV

卷组(Volume Group,VG):由多个PV组成的群组,可扩展或缩小

1)决定了LVM的最大磁盘容量,且与LVM的格式版本有关

物理扩展块(Physical Extent,PE):划分LV和VG的最小单位

1)类似文件系统中的block

逻辑卷(Logical Volume,LV):LVM划分VG的分区单位,可扩展或缩小

1)LV的设备文件名格式:/dev/vgname/lvname

2)LV的大小与PE的总数有关

实现弹性调整文件系统容量的本质就是通过调整PE含量
 

1)线性模式(linear):一个磁盘容量使用完,才会使用下一个磁盘

2)交错模式(triped):一份数据写入多块磁盘(读写性能较好)

//LVM默认模式为线性模式

LVM流程

Parition阶段

通过分区命令(gdisk、fdisk、parted等)创建组成LVM的物理分区

1)在创建时,需把System ID改为8e(该分区类型会变为“Linux LVM”)

//若不设置为8e,也可使用(但LVM检测命令可能无法检测到该分区)
 

PV阶段

pvcreate命令:将物理分区初始化为PV,以供LVM使用

指令格式:pvcreate 物理卷名

如:用/dev/vad5、/dev/vda6、/dev/vda7和/dev/vda8磁盘分区建立一个PV
 

pvscan命令:列出主机中所有具有PV的磁盘

指令格式:pvscan

如:查看当前主机的PV
 
Total内容构成:整体PV量/已经被使用到VG的PV量/剩余的PV量

pvdisplay命令:列出指定PV的详细信息

指令格式:pvdisplay 设备名

如:查看/dev/vda5
 

pvremove命令:将指定设备的PV属性删除,使该设备不具有PV属性

指令格式:pvremove 选项 设备名

选项 含义
-f 强制删除

VG阶段

vgcreate命令:使用PV创建VG

指令格式:vgcreate 选项 创建的VG名 使用的PV名

1)VG的名称可自定义,而PV的名称都是系统指定的分区的设备文件名

选项 含义
-s 指定VG上PE的大小

如:使用/dev/vda5、/dev/vda6、/dev/vda7创建名vbirdvg,PE大小16M的VG
 

vgscan命令:列出主机上的所有VG

指令格式:vgscan

如:查看当前主机的VG
 

vgdisplay命令:列出指定VG的详细信息

指令格式:vgdisplay VG名

如:查看vbirdvg的详细信息
 

vgextend命令:将指定的PV加入的VG

指令格式:vgextend VG名 PV名

如:将/dev/vda8加入到vbirdvg中
 

vgreduce命令:将指定的PV从VG中删除

指令格式:vgreduce VG名 PV名

vgchange命令:设置VG是否启动

指令格式:vgchange 选项 VG名

选项 含义
-a 指定VG的状态(y或n)

1)若VG属于活动状态(active),则无法删除

vgremove命令:删除指定的VG

指令格式:vgremove 选项 VG名

选项 含义
-f 强制删除

LV阶段

lvcreate命令:从VG中划分出LV

指令格式:lvcreate 选项 VG名

选项 含义
-L 以普通容量(M、G、T)指定VG容量大小
-l 以PE个数指定VG容量大小
-n 指定LV名称
-T 建立thin pool
-s 建立snapshot

1)LV默认保存在:/dev/VG名/LV名

如:从vbirdvg中划分出一个名为vbirdlv,大小为2G的LV
 

lvscan命令:列出主机上由LV

指令格式:lvscan

lvdisplay命令:列出指定LV的详细信息

指令格式:lvdisplay LV路径

如:查看/dev/vbirdvg/vbirdlv详细信息
 

lvextend命令:扩展LV容量

指令格式:lvextend 选项 LV名

选项 含义
-L 以普通容量(M、G、T)指定扩展量
-l 以PE个数指定VG扩展

//扩展前必须先卸载相关RAID磁盘

lvreduce命令:缩减LV容量

指令格式:lvreduce 选项 LV名

选项 含义
-L 以普通容量(M、G、T)指定缩减量
-l 以PE个数指定VG 缩减

//缩减前必须先卸载相关的RAID磁盘

lvremove命令:删除指定的LV

指令格式:lvremove LV名

选项 含义
-f 强制删除

lvsize命令:管理指定LV的大小

指令格式:lvsize LV名

//本质就是lvextend和lvreduce的合体命令,加用“+”减用“-”

选项 含义
-L 以普通容量(M、G、T)指定
-l 以PE个数指定VG

LVM功能

放大LV

若放大LV容量,可通过以下流程:

1)确保VG阶段有剩余的容量;

2)确保LV阶段产生更多的可用容量;

3)文件系统支持放大;

//xfs和ext都支持放大文件系统,但仅有ext文件系统可缩小

//放大文件系统并不是没有进行格式化,而是仅格式化新加入的设备,且新增的格式化数据,会反馈追加到的原本的超级区块中

xfs_growfs命令:同步xfs文件系统

指令格式:xfs_growfs 文件系统名

1)本质:通过在文件系统当中增加区块群组的方式来增加文件系统的容量

2)LVM可直接在线处理,而不需要卸载后再处理

LVM thin Volume

LVM thin Volume:设备实际使用多少容量,就分配给对应容量给LV

1)默认LVM中,LV的容量是固定分配好的

2)LVM thin Volume能够实现建立设备容量比磁盘实际容量大的设备

LVMthin Volume使用流程:

1)建立一个用多少容量才分配实际写入多少容量的磁盘容量存储池(thin poll)

2)由thin pool去建立指定固定容量大小的LV设备

//建立的LV设备实际使用量绝对不能超过thin pool的最大实际容量,若突破该容量,该磁盘容量存储池会被损坏而导致数据损坏

如:创建一个名为“vbirdtpool”的thin pool
 

如:在vbirdtpool上建立大小为10G的vbirdthin1的设备
 

LVM snapshot

LVM磁盘快照(snapshot):将当前系统信息记录下

1)若有任何数据修改,则原始数据会被移动到快照区;

2)由于快照区和原本的文件系统LV共享很多的PE数据块,所以快照区与被快照的LV必须在同一个VG上

如:没被修改的区域,则由快照区和文件系统共享
 
//由于快照区和文件系统公用所有的PE数据,所以快照区的内容与文件系统的是一模一样的(包括UUID等各种参数)

如:建立vbirdsnap1快照,大小为26个PE
 

通过snapshot还原文件系统时:

1)需先将制作的快照文件系统备份成一个目录,再用该目录去还原文件系统

2)不能直接格式化快照文件系统去还原原文件系统

//若直接格式化快照文件系统,由于快照文件系统和原文件系统共享很多PE导致所有数据都会迁移到快照文件系统中

snapshot常使用方法为:

1)以原文件系统还原快照文件系统,将原文件系统作为备份数据;

2)将快照文件系统当作实际运行中数据,任何操作都在快照文件操作系统进行;

3)当快照文件系统出现问题时,直接删除快照文件系统即可,再用原文件系统复制出一个新的快照文件系统

关闭LVM

1)先卸载主机上的LVM文件系统(包括快照和所有的LV)

2)使用lvremove删除指定LV

3)使用“vgchang -a -n VG名”让指定VG不具有Avtive标志

4)使用vgremove删除VG

5)使用pvremove删除PV

6)使用分区命令(gdisk、fdisk、parted)将文件系统System ID该为“83“

//若不关闭LVM就直接将这些分区删除或作为其他设备使用,会导致未知错误