jinhucheung / blog

学习笔记
6 stars 3 forks source link

Linux 学习之磁盘额度(Quota)与高级文件系统管理(RAID/LVM) #25

Open jinhucheung opened 8 years ago

jinhucheung commented 8 years ago

Index

jinhucheung commented 8 years ago

1 磁盘额度(quota)

1.1 什么是quota

在Linux系统中,多用户多任务的环境会经常抢占资源,quota则是制定用户/用户组,对硬盘资源的进行配额 , 妥善分配资源。

1.2 文件系统启用quota

下面以/home的文件系统为例

# 查看/home是否启用quota
# mount | grep home
/dev/mapper/vg1-lv1 on /home type ext4 (rw)  # 没有

# 启用 quota (用户限制与用户组限制)
# mount -o remount,usrquota,grpquota /home
/dev/mapper/vg1-lv1 on /home type ext4 (rw,usrquota,grpquota)

# 如果要开机就启用quota
# 可以修改/etc/fstab文件系统的选项

1.3 新建quota日志文件

quota日志文件除了进行日志记录时,也是对用户/用户组的额度进行配置 使用quotacheck : 扫描文件系统并新建quota日志文件(aquota.user aquota.group) 命令格式 : quotacheck -vug /mount_point : v:显示进度 u:新建用户日志 g:新建用户组日志

1.4 启动/停止quota与限制值设置

启动quota:quotaon /mount_point 停止quota:quotaoff /mount_point

限制值设置:edquota与setquota

# 以限制用户额度为例
# edquota -u user1 [-g groupname]  #其会打开一个关于此用户限值设置的文档

FileSystem Blocks  soft hard Inodes  soft  hard
/dev/sda9     80    0     0       10     0   0

FileSystem:针对的文件系统
Blocks:磁盘容量,单位KB
soft:blocks的soft 单位KB,0表示不限制
hard:block的hard
inodes: Inode数量,单位个数
soft:Inode的soft
hard: Inode的hard

我们通常只会设置block的soft与hard

setquota可以帮助我们在shell script中设置quota
其格式为:setquota [-u name][-g name] blockSoft blockHard inodeSoft inodeHard /mount_point

设置宽限时间
edquota -t 

1.5 quota当前情况报表以及警告信息

针对用户/用户组的报表 : quota [-u|-g]vs name 针对文件系统的报表: repquota -augvs

发送警告信息:warnquota(当有用户超过soft时,才会成功送出两份mail,分别给root与该用户),如果要明天定时执行warnquota,可以在/etc/cron.daily/warnquota中写入warnquota命令的绝对路径

jinhucheung commented 8 years ago

2. 磁盘阵列(RAID)

2.1 什么是RAID

磁盘阵列(RAID),即容错廉价磁盘阵列,其有多个较小的磁盘整合成一个较大的磁盘。其不只具有存储功能,还有数据保护和性能优化等功能。 特别是用相同型号等大小的磁盘组成时性能最优,以下是其整合模式。

1) RAID-0(等量模式):性能最优

数据依次放到各个磁盘中,由于磁盘是交错放置数据的,所以数据会被等量分到各个磁盘中。此中模式性能最优,但是没有对数据毁坏的处理。

2) RAID-1(映像模式):完整备份

一份数据会存放在RAID中存放两次。所以RAID-1的容量只是组成磁盘总容量的一半(或者更小)。优点是完整备份数据,性能较差。

3) RAID0+1与RAID1+0

磁盘先组成RAID0或1,再去组成RAID1或0,这种模式优化了性能,又备份了数据。但是组成的硬盘较多,容量也只有这些硬盘的一半。

4) RAID-5:性能与数据均衡考虑

RAID-5:至少需要3个硬盘以上。数据以RAID-0方式依次循环写硬盘中,但是一个循环过程会在某个硬盘写入一同步检查码(其可以恢复此轮循环中写入其他盘的数据),由于检查码会用掉一个硬盘,所以RAID-5的总量等于硬盘-1的容量。

5) Spare Disk: 预备盘

组成RAID时,会多准备出几个空盘,当RAID中某盘坏掉时,系统会抽出坏盘,抽入一个预备盘。

2.2 软磁盘阵列

软磁盘阵列,相对与硬磁盘阵列,是用软件来模拟出RAID的功能,但实际上盘是不会改变的,坏盘了还是GG.

2.2.1 软磁盘阵列的设置

使用如下的命令

# 创建一个名为md0的RAID,RAID模式5,用sda8,9,10构成RAID,用sda11,12构成预备盘
mdadm --create --auto=yes /dev/md0   --raid-devices=3 --level=5  --spare-devices=2  /dev/sda{8,9,10,11,12}

# 查看md0情况
mdadm --detail /dev/md0

2.2.2 软磁盘阵列的管理

使用如下命令对raid进行管理

mdadm --manage /dev/md0 [--add 设备名] [--remove 设备名] [--fail 设备名]
# 其中fail是设置raid中的设备出错

2.2.3 软磁盘阵列的开机挂载

# 首先查出raid设备的uuid
mdadm --detail /dev/md0

# 设置mdadm的映射关系
在/etc/mdadm.conf中添加`ARRAY /dev/md0 UUID=值

# 设置etc/fstab

2.2.4 软磁盘阵列的关闭

首先先停止RAID的挂载,再执行mdadm --stop,最后可能会要修改回/etc/mdadm.conf

jinhucheung commented 8 years ago

3. 逻辑卷管理(LVM)

3.1 什么是LVM

LVM可以弹性调整文件系统的容量,其可以整合多个物理分区成为一个逻辑分区,当然也可以从逻辑分区中删除物理分区。

其作法是:将几个物理分区(PV)组合成一个分区组(VG),在从VG中划分从逻辑区(LV)供文件系统挂载。 LVM中的最小单位是物理扩展块(PE),有点类似blocks,PE是PV的最小单位,其可以指定大小(需2的倍数),我们可以通过LV中PE的数量来调整LV的大小。

PE/VG/LV关系图如下 这图可以将每两组看作一个PV,更好理解LVM各单位的关系

LVM实现过程如下图:

jinhucheung commented 8 years ago

3.2 LVM实现过程

1) PV阶段

pvcreate /dev/sda{6,7,8,9}  #pv名同设备名

2) VG阶段

vgcreate -s 4M vg1 /dev/sda{6,7,8}  #构成出的vg1设备名是/dev/vg1
vgextend vg1 /dev/sda9

3) LV阶段

lvcreate -l 365 -n lv1 /dev/vg1 # 构建成的lv 设备名是/dev/vg1/lv1

最后就可以直接格式话化lv,并进行挂载

jinhucheung commented 8 years ago

3.3 放大/缩小LV容量

1)放大LV容量

其过程可以在线完成(即vg活动时),一般步骤如下:

  1. 构建pv (pvcreate)
  2. 将pv加入vg (vgextend)
  3. 放大lv容量 (lvresize)
  4. 修改文件系统容量(修改超级块信息,resize2fs):resize2fs格式是resize2fs 设备 [size] 以下将sda10加入到vg,以扩展lv
# 创建pv
pvcreate /dev/sda10

# 向vg添加pv
vgextend vg1 /dev/sda10

# 放大lv容量
lvresize -l +179 /dev/vg1/lv1

# 修改文件系统容量
resize2fs /dev/vg1/lv1

2)缩小LV容量

缩小lv容量不能在vg活动时进入,具体过程就是放大lv容量的逆过程(注意:一定要先resize2fs,不然可能文件系统损坏) 以下将/dev/sda10移出vg1

# 系统要求在resize2fs时先进行磁盘检查
e2fsck -f /dev/vg1/lv1

# 修改文件系统size,以减去/dev/sda10的大小
resize2fs /dev/vg1/lv1 6900M

# 失活vg1
vgchange -a n vg1  (-a y 是激活)

# lv缩小容量
lvresize -l -179 /dev/vg1/lv1

# vg1移出/dev/sda10
vgreduce vg1 /dev/sda10

# /dev/sda10删除pv属性
pvremove /dev/sda10

# 激活vg1
vgchange -a y vg1
jinhucheung commented 8 years ago

3.4 LVM的快照功能

LVM的快照区会保存建立快照时的文件系统中的数据,当然这个快照区有一定的最值,当系统变化太多时,快照区就会饱满,通过我们建立快照区来备份某个时刻的数据,以恢复文件系统(比如,教学环境中,老师会将系统建立快照区,再将挂载快照区的文件系统供学生使用.这样并不会影响到原文件系统)

建立快照区的命令

# 建立了lv1的100M快照区
lvcreate -L 100M -s -n lv1ss /dev/vg1/lv1

# 之后我们可以挂载这个快照区
mount /dev/vg1/lv1ss /mnt/tmp

# 再备份数据出来待恢复使用
tar -jcv -f /mnt/backup/lv1.backup /mnt/tmp 
# 注意不能直接从快照区复制数据到原区,原区数据会覆盖删去后都转到快照区的

3.5 LVM的相关命令汇总与LVM的关闭

LVM相关命令汇总如下图:

LVM的关闭步骤如下:

  1. 使用lvremove删除所有lv
  2. 使vg失活 vgchange -a n vgname
  3. 使用vgremove删除vg
  4. 使用pvremoe删除pv
  5. fdisk 回收 分区