高级文件系统管理

配置配额系统

综述

•在内核中执行

•以文件系统为单位启用

•对不同组或者用户的策略不同

根据块或者节点进行限制

•执行软限制(soft limit)

•硬限制(hard limit)

初始化

•分区挂载选项:usrquota、grpquota

•初始化数据库:quotacheck

执行

•开启或者取消配额:quotaon、quotaoff

•直接编辑配额:edquota username

•在shell中直接编辑:

setquota usename 4096 5120 40 50 /foo

•定义原始标准用户

edquota -p user1 user2

示例:对/home下的kbq用户进行配额:

将home迁移到一个独立的磁盘分区(具体见实验) quotacheck -cu /home(对home下的用户创建配额机制)

若上述命令有报错,是由于SElinux,后续会有介绍 [root@centos7 ~]#getenforce Enforcing

[root@centos7 ~]#setenforce 0

[root@centos7 ~]#getenforce

Permissive

进行上述操作后再创建配额机制即可。

创建成功后在/home目录下回生成一个aquota.user的二进制文件(表示创建配额成功。)

[root@centos7 ~]#quotaon -p /home

group quota on /home (/dev/sdb2) is off

user quota on /home (/dev/sdb2) is off

在/etc/fstab中的defaults后面加userquota

[root@centos7 ~]#quotaon /home

[root@centos7 ~]#quotaon -p /home

group quota on /home (/dev/sdb2) is off

user quota on /home (/dev/sdb2) is on

#edquota kbq即可对kbq用户进行配额的编辑了。

注意:grpquota针对的是用户的所属组而不是属主

RAID

提高IO能力:

磁盘并行读写

提高耐用性;

磁盘冗余来实现

级别:多块磁盘组织在一起的工作方式有所不同

RAID实现的方式:

外接式磁盘阵列:通过扩展卡提供适配能力

内接式RAID:主板集成RAID控制器

安装OS前在BIOS里配置

软件RAID:通过OS实现

RAID-0:条带卷,strip

读、写性能提升;

可用空间:N*min(S1,S2,...)

无容错能力

最少磁盘数:2, 2

RAID-1: 镜像卷,mirror

读性能提升、写性能略有下降;

可用空间:1*min(S1,S2,...)

有冗余能力

最少磁盘数:2, 2N

RAID-4:

多块数据盘异或运算值,存于专用校验盘

RAID-5:

读、写性能提升

可用空间:(N-1)*min(S1,S2,...)

有容错能力:允许最多1块磁盘损坏

最少磁盘数:3, 3+

RAID-6:

读、写性能提升

可用空间:(N-2)*min(S1,S2,...)

有容错能力:允许最多2块磁盘损坏

最少磁盘数:4, 4+

RAID-10

读、写性能提升

可用空间:N*min(S1,S2,...)/2

有容错能力:每组镜像最多只能坏一块

最少磁盘数:4, 4+

实验:制作RAID 5

准备了4块硬盘,sdc,sdd,sde,sdf1 (均为30G)并且使sdf1的属性为fd且为备用盘。

#开始制作 mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{c,d,e,f1}

#在制作期间可能需要一段时间,可用cat /proc/mdstat命令查看进度(也可用mdadm -D /dev/md0)

#在生成md0这个设备之后需要将其存入配置文件中 (这个文件的作用在于若该raid设备被禁用了之后若没有这个文件raid设备将无法启动。) mdadm -Ds /dev/md0 > /etc/mdadm.conf

#创建完成后对该设备创建文件系统

mkfs.ext4 /dev/md0 建立一个挂载点并将md0挂上

mkdir /mnt/raid

mount /dev/md0 /mnt/raid

#为了实验需要复制一些文件到raid下

cp /etc/passwd /mnt/raid/f1 

cp /etc/passwd /mnt/raid/f2

 cp /etc/passwd /mnt/raid/f3

测试写速度:dd if=/dev/zero of=/mnt/raid/bigfile bs=1M count=1024

测试读速度:dd if=/dev/zero of=/mnt/raid/bigfile bs=1M count=1024

要想保存住,一定要写入配置文件中。

raid10的制作:(具体步骤参考raid5)

方法1

#先建立底层建筑2个raid1的设备md0和md1 mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sdb{1,2}

mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdc{1,2}

#再将2个raid1设备做raid0 mdadm -C /dev/md2 -a yes -l 0 -n 2 /dev/md{0,1}

方法2:

mdadm -C /dev/md0 -a yes -l 10 -n 4 /dev/sdb{1,2} /dev/sdc{1,2}

软件raid的实现:

mdadm:模式化的工具

命令的语法格式:mdadm[mode] [options] 

支持的RAID级别:LIEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10

模式:

    创建:-C    装配: -A    监控: -F     管理:-f, -r, -a

-C: 创建模式

-n #: 使用#个块设备来创建此RAID

-l #:指明要创建的RAID的级别

-a {yes|no}:自动创建目标RAID设备的设备文件 -c CHUNK_SIZE: 指明块大小

-x #: 指明空闲盘的个数

-D:显示raid的详细信息;

       mdadm -D /dev/md#

管理模式:

       -f: 标记指定磁盘为损坏   -a: 添加磁盘     -r: 移除磁盘

观察md的状态:

       cat /proc/mdstat

使用mdadm创建并定义RAID设备

#mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

用文件系统对每个RAID设备进行格式化

#mke2fs -j /dev/md0 测试RAID设备

使用mdadm检查RAID设备的状况

#mdadm --detail|D /dev/md0

增加新的成员

#mdadm –G /dev/md0 –n4 -a /dev/sdf1

软RAID测试和修复

模拟磁盘故障

          mdadm /dev/md0 -f /dev/sda1

移除磁盘

          mdadm /dev/md0 –r /dev/sda1

从软件RAID磁盘修复磁盘故障

替换出故障的磁盘然后开机

在备用驱动器上重建分区

mdadm /dev/md0 -a /dev/sda1

mdadm、/proc/mdstat及系统日志信息

生成配置文件:

mdadm –D –s >> /etc/mdadm.conf

停止设备:

mdadm –S /dev/md0

激活设备:

mdadm –A –s /dev/md0 激活

强制启动:

mdadm –R /dev/md0

删除raid信息:

mdadm --zero-superblock/dev/sdb1

注意:在删除raid时 1 umount 取消挂载 2 mdadm -S /dev/md0 停止raid设备 3 rm -f /etc/mdstat

4 vim /etc/fstab 修改配置文件 5 mdadm --zero-superblock /dev/sda7

彻底清除超级块信息 清除Raid成员上raid元数据

逻辑卷管理器(LVM)

突出优势:可扩展性

原理: 底层为磁盘或分区,用fdisk命令将其system id改为8e (Linux LVM)

第二层为创建PV和查看PV(physical volumes)

创建的命令:pvcreate 设备名

查看:pvs 或者 pvdisplay

第三层为用PV创建VG

工具为vgcreate,vgdisplay

第四层为从VG中切割出LV

工具lvcreate lvdisplay

第五层为格式化后挂载使用

工具:mkfs mount

实验:创建逻辑卷的步骤:

pvcreate /dev/sd{b5,c}

#将/dev/sdb5,/dev/sdc 打包创建为物理卷

此时可以pvs查看有无成功。

vgcreate -s 16M vg0 /dev/sd{c,b5}

#将已创建为物理卷的2个卷合成一个卷组 -s后跟PE的大小 并设置这个卷组的名称

lvcreate -n lv0 -l 1000 vg0

#-n 后跟创建的逻辑卷名称 ,-l 为此逻辑卷的大小(-L +xx为添加至xx) 针对vg0卷组操作

lvdisplay

--- Logical volume ---

LV Path /dev/vg0/lv0

LV Name lv0

VG Name vg0

#生成的逻辑卷/dev/vg0/lv0其实是一个软连接指向../dm-0

-l 是以PE为单位 也可以跟100%free -L 后面跟大小容量

实验:扩展逻辑卷

假设我们现在的逻辑卷组的空间不够了,可以设置一个分区为物理卷后再添加。

pvcreate /dev/sde

#将该磁盘变成物理卷

vgextend vg0 /dev/sde

#对vg0这个卷组扩展/dev/sde这个物理卷

lvextend -L 60G /dev/vg0/lv0

#扩展至60G 对于lv0这个逻辑卷来说。

resize2fs /dev/vg0/lv0

#因为添加的物理卷没有文件系统,所以需要对其进行同步。(该命令只针对ext系列的文件系统,若要对xfs文件系统进行同步需用xfs_grows +设备名。命令。) 若先一步到位不在最后不用同步可用选项-r

lvextend -r -L 60G /dev/vg0/lv0

实验:缩减逻辑卷

不支持在线使用,有损失数据的风险,需在缩减之前做备份。

xfs文件系统不支持缩减。

umount /mnt/lv0

#需进行离线操作,取消挂载。

e2fsck -f /dev/vg0/lv0

#在执行某些重大操作前必须检查文件的完整性

resize2fs /dev/vg0/lv0 30G

#先缩减文件系统的空间

lvreduce -L 30G /dev/vg0/lv0

#在缩减逻辑卷的大小

mount /dev/vg0/lv0 /mnt/lv0 #进行挂载使用

注!!:操作期间不要挂载操作。

实验:移除PV

1 vgdisplay 空闲空间

pvdisplay

2 pvmove /dev/sdb

将/dev/sdb中的数据移到其它卷组成员中

3 vgreduce vg0 /dev/sdb

将/dev/sdb 从vg0组中移除

4 pvremove /dev/sdb

将/dev/sdb 从物理卷中移除 5 卸载硬盘

实验:跨主机迁移LV

1 查看LV对应的卷组是由几个PV组合的

/dev/sdc /dev/sdd

2 查看下VG名称,确保在目标主机上的名称不要冲突

vgrename vg0 newvg0

lvrename /dev/vg0/lv0 /dev/newvg0/newlv0

3在源主机

umount /dev/newvg0/lv0

vgchange -an newvg0

vgexport newvg0

4 将对应所有PV,接入到目标主机

5 在目标主机

pvscan

vgimport newvg0

vgchange -ay newvg0 激活

mount /dev/newvg0/newlv0 /mnt/newlv0

推荐阅读更多精彩内容