liniux备忘录-磁盘配额与进阶文件系统管理

知识

磁盘配额Quota

可以限制磁盘的使用容量,可以对用户、群组磁盘的最大使用容量。

磁盘配额Quota的使用限制

  1. 只能针对整个文件系统。
  2. 核心必须支持Quota。

自行编译的核心需要注意

  1. Quota的记录文件

旧的记录文件是quota.user,quota.group
新的记录文件是aquota.user,aquota.group
通过程序convertquota可以进行转换

  1. 只对一般身份使用者有效。

Quota可使用项目

  1. 容量限制或档案数量限制(block或inode)

限制inode数量,从而限制档案数量
限制block数量,从而限制磁盘容量

  1. 软限制和硬限制(soft/hard)

超过soft限制,会进行警告,并给予一个宽限时间(grace time)
hard限制是最大上限,不能超过

  1. 会倒数计时的宽限时间

磁盘容量介于soft和hard限制,才会出现grace time倒数
一般grace time时间为7天
grace time内不进行磁盘瘦身,磁盘会变成soft限制值,并被锁住不能新增档案。

Quota流程

  1. 查看目录是否是独立的文件系统,找到对应的磁盘档案

可以通过 df -h /home 进行查看
或者通过 mount | grep "home" 进行查看

  1. 如何加入quota支持

mount -o remount,usrquota,grpquota /home
mount | grep "home"
确定/etc/mtab已经加入usrquota,grpquota到相应的文件系统中。
也可以直接修改/etc/fstab,使得每次登陆都开启quota支持
vi /etc/fstab
LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2
umount /home
mount -a (过载/etc/fstab的设定)

  1. 建立quota的记录文件

通过命令quotacheck 扫描文件系统,并建立Quota记录文件

  1. quota启动、关闭与限制值设定

通过命令quotaon启动quota服务
通过命令quotaoff关闭quota服务
通过命令edquota设定限制时间
---- block和inodes设定值结构 ----
FileSystem blocks soft hard inodes soft hard
/dev/sda3 80 0 0 10 0 0
-- FileSystem -> 针对哪个文件系统
-- blocks -> quota自动算出,单位为Kbytes,不要动它
-- soft -> block的soft值,单位为KB
-- hard -> block的hard值,单位为KB
-- inodes -> quota自动算出,单位为个数,不要动它
-- soft -> inodes的sotd值
-- hard -> inodes的hard值
一般只需要设置 block的soft值和hard值即可
设置好一个用户后,可以通过edquota命令进行复制
edquota -p okUser -u newUser1
edquota -p okUser -u newUser2
edquota -p okUser -u newUser3

---- grace time的设定值结构 ----
Filesytem Block grace period Inode grace period
/dev/sda3 14days 7days

  1. Quota设定值的报表

---- 单一用户的quota报表 ----
通过命令quota -uvs username 进行用户quota报表
通过命令quota -gvs groupname 进行群组quota报表
通过命令repquota 进行文件系统quota的报表

  1. quota的测试与管理

通过命令dd 可以进行quota的限额测试
通过命令warnquota 可以进行quota限额的警告
通过设置日程,让系统自动执行warnquota
vi /etc/cron.daily/warnquota
/usr/sbin/warnquota
chmod 755 /usr/sbin/warnquota

  1. 通过软连接避免只针对文件系统的限制

mv /var/spool/mail /home
ln -s /home/mail /var/spool/mail
对/home进行quota限额

磁盘阵列RAID

RAID可以通过一个技术,将多个较小的磁盘整合成一个较大的磁盘装置。

RAID等级

  1. RAID-0(等量模式,stripe):效能最佳

多个磁盘会被分成等大小的小区块,数据存储时会根据区块大小细分,并分散放到各个磁盘当中。
任何一颗磁盘损坏都会影响所有数据

  1. RAID-1(映像模式,mirror):完整备份

让同一份数据,完整地保存在两颗磁盘上头。

  1. RAID-0+1 RAID-1+0

RAID-0+1 是先以两颗磁盘组成RAID-0,并设定有两组。再以两组RAID-0组成一组RAID-1
RAID-1+0 是先以两颗磁盘组成RAID-1,并设定有两组。再以两组RAID-1组成一组RAID-0

  1. RAID-5 : 效能与数据备份的均衡考虑

RAID-5至少需要3颗以上的磁盘才能够组成这样的磁盘阵列。
数据写入有点类似RAID-0,但在每个循环写入时,在每个磁盘加上一个同位检查数据(Parity)
Parity这个数据用于记录其他磁盘的备份数据
当有一颗磁盘损坏时,可以通过Parity数据重建原本磁盘的数据
RAID5 预设只能支持一颗磁盘的损坏情况。

  1. RAID-6

由RAID-5发展而来,允许两颗磁盘损坏

  1. Spare Disk : 预备磁盘的功能

为了让系统能够实时地在磁盘损坏时进行重建,引入了预备磁盘(Spare Disk)

磁盘阵列的优点

  1. 数据的安全可靠性:能够在磁盘损坏时,进行安全救援和使用
  2. 读写效能:例如RAID-0能够加强读写效能
  3. 容量:可以增加单一文件系统的用量

software RAID 和 hardware RAID

  1. hardware RAID

硬件磁盘阵列是通过磁盘阵列卡来达成数组的目的。
磁盘阵列卡上有专门的芯片用于处理RAID任务
中高阶的磁盘阵列卡都支持热拔插
硬件磁盘阵列就是一颗大硬盘,其装置档案名为/dev/sda[0-n]

  1. software RAID

软件磁盘阵列通过软件的方式仿真数组的目的
可以通过mdadm这个软件实现
软件磁盘阵列的装置档案名为/dev/md[0-n]

  1. 创建software RAID例程

----1. 新建分区
fdisk /dev/sda
partprobe
----2. 利用mdadm建立RAID
mdadm --create --auto=yes /dev/md0 --level=5
--raid-devices=4 --spare-devices=1 /dev/sda{6,7,8,9,10}
mdadm --detail /dev/md0
#查看系统软件磁盘阵列的情况
cat /proc/mdstat
----3. 格式化分区
mkfs -t ext3 /dev/md0
----4. 挂载
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
#查看挂载情况
df
mount

仿真RAID错误的救援模式

通过命令mdadm 进行仿真RAID出错时的救援

仿真RAID的配置文件 /etc/mdadm.conf

获取RAID的UUID

mdadm --detaill /dev/md0 | grep -i uuid

接着编辑配置文件/etc/mdadm.conf

vi /etc/mdadm.conf
#新增
ARRAY /dev/md0 UUID=刚刚查到的UUID

#开始设定开机自动挂载并测试
vi /etc/fstab
/dev/md0 /mnt/raid ext3 defaults 1 2

#重新挂载
umount /dev/md0; mount -a
df /mnt/raid

关闭RAID

  1. 先卸载并删除/etc/fstab的自动挂载设定
umount /dev/md0
vi /etc/fstab
删除 /dev/md0 /mnt/raid ext3 defaults 1 2
  1. 直接关闭md0
mdadm --stop /dev/md0
cat /proc/mdstat
  1. 删除配置文件/etc/mdadm.conf中的内容
vi /etc/mdadm.conf
删除 ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b

逻辑卷管理 LVM (Logical Volumn Manager)

LVM用于弹性调整文件系统的容量。LVM将实体的磁盘(/dev/sda)或分区(/dev/sda1)组成一个大的逻辑上的大磁盘VG(Volumn Group),将VG切割成大量等大小的最小单位区块PE(Pysical Extend),这些PE区块用于组成可以进行格式化和挂载的LV(Logical Volumn),LVM的弹性就是通过在LV中弹性地添加和移除PE实现的。

LVM能够通过软件的方式将几个实体的分区或磁盘组合成一个看起来是独立的大磁盘(VG,Volumn Group)。然后将这个大磁盘分割成可以使用的逻辑分割槽(LV Logical Volumn),最终就能挂载使用了。

PV (Physical Volumn)

实际的磁盘需要将system id改成8e(LVM的id),然后经过pvcreate指令将它转化为LVM最底层的PV,然后才能够对PV进行利用。可以通过fdisk命令调整system id。

大磁盘 VG (Volumn Group)

大磁盘VG 就是 将许多个PV进行整合所得。

实体扩展区块 PE (Pysical Extend)

LVM预设使用4MB的PE区块,而上面所说的大磁盘VG最多只能含有65536个PE区块。所有VG最大为4M*65536=256G。PE是LVM最小的存储区块,有点类似于文件系统中的block。

LV (Logical Volumn)

大磁盘VG会被分割成LV,而LV就是可以进行格式化的类似于分区的东西。因为PE是LVM的最小存储区块,所以LV的大小与LV包含的PE数量有关。为了方便LVM的管理,LV的装置档案名为/dev/vgname/lvname

LVM可以弹性调整文件系统的容量,是通过PE的转移和交换实现的。

整个LVM的逻辑过程

  1. 进行实体磁盘的分区,并将system id改成8e.

通过命令 fdisk

  1. 建立并观察PV

通过命令 pvcreate 和 pvscan

  1. 用PV建立VG

通过命令 vgcreate 和 vgdisplay

  1. 从VG中分割出LV

通过命令 lvcreate 和 lvdisplay

  1. 格式化lv并挂载使用

通过命令 mkfs 和 mount

LVM将数据写入硬盘的模式分为两种

  1. 线性模式:一个物理分区写完再写另外一个
  2. 交错模式:数据交错写入多个物理分区

PV阶段

pvcreate => 将物理分区建立成PV;
pvscan => 搜寻目前系统里面任何具有PV的磁盘;
pvdisplay => 显示目前系统上的PV状态;
pvremove => 将物理分区的PV属性移除

流程

pvscan
pvcreate /dev/sda{6,7,8,9}
pvscan
pvdisplay

VG阶段

vgcreate => 建立VG;
vgscan => 搜寻系统上是否为VG存在;
vgdisplay => 显示系统上VG的状态;
vgextend => 在VG内增加额外的PV
vgreduce => 在VG内移除PV
vgchange => 设定VG是否启动
vgremove => 删除VG

流程

vgcreate -s 16M vgname /dev/sda{6,7,8}
# vgcreate [-s PE大小] vg名称 pv名称
vgscan
pvscan
vgdisplay
# 增加VG容量 增加了/dev/sda9的容量
vgextend vgname /dev/sda9

LV阶段

lvcreate => 建立LV
lvscan => 查询系统上的LV
lvdisplay => 显示系统上的LV状态
lvextend => 增加LV的容量
lvreduce => 减少LV的容量
lvremove => 删除一个LV
lvresize => 对LV进行容量大小调整

流程

lvcreate -L 500M -n lvname vgname
# 也可以 lvcreate -l PE个数 -n lvname vgname
lvscan
lvdisplay

文件系统阶段

之后LV需要使用装置档案全名 /dev/vgname/lvname

流程

# 文件系统格式化
mkfs -t ext3 /dev/vgname/lvname
# 挂载
mkdir /mnt/lvm
mount /dev/vgname/lvname /mnt/lvm
df 
# 文件备份
cp -a /etc /var/log /mnt/lvm

LV扩容步骤

  1. 用fdisk创建新的具有8e system id的partition
  2. 利用pvcreate建立PV
  3. 利用vgextend将PV将入到先前的vgname
  4. 利用lvresize将新加入的PV内的PE加入到lvname中
  5. resize2fs 确定增加文件系统的容量

流程

fdisk /dev/sda
partprobe
fdisk -l

pvcreate /dev/sda10
pvscan

vgextend vgname /dev/sda10
vgdisplay

lvresize -l +179 /dev/vgname/lvname
lvdisplay

df /mnt/lvm

dumpe2fs /dev/vgname/lvname

resize2fs /dev/vgname/lvname
# resize2fs [-f] [device] [size]
# -f 强制resize动作
df /mnt/lvm

减少LV的容量

流程

pvdisplay
pvscan

## 不支持在线缩小容量
## 不能resize2fs /dev/vgname/lvname 6900M
umount /dev/vgname/lvname
resize2fs /dev/vgname/lvname 6900M
# 进行磁盘检查
e2fsck -f /dev/vgname/lvname
resize2fs /dev/vgname/lvname 6900M  

# 重新挂载
mount /dev/vgname/lvname /mnt/lvm
df /mnt/lvm

# 明确知道要抽离89个PE
lvresize -l -89 /dev/vgname/lvname
lvdisplay

# 先确认移除的分区 /dev/sda6的所有PE都移除了
pvdisplay

# PE的搬运
pvmove /dev/sda6 /dev/sda10

# 将PV从VG移除
vgreduce vgname /dev/sda6
pvscan

pvremove /dev/sda6

LVM系统快照

流程

vgdisplay
# 发现没有多余的PE可用

pvcreate /dev/sda6
vgextend vgname /dev/sda6
vgdisplay
# 发现有多余的PE可用,因此可以建立快照区

# 建立系统快照区,通过-s选项建立快照区
# -n 后接快照区的装置名称
lvcreate -l 60 -s -n ssname /dev/vgname/lvname
lvdislpay

mkdir /mnt/snapshot
# 注意 /dev/vgname/ssname ssname为snapshot的名称
mount /dev/vgname/ssname /mnt/snapshot
df

umount /mnt/snapshot

利用LVM快照区恢复系统

恢复的容量必须小于LVM快照区的大小

流程

# 查看快照区状态
lvdislpay /dev/vgname/ssname

# 挂载快照区
mount /dev/vgname/ssname /mnt/snapshot
df

#将快照区的内容复制出来
mkdir -p /backups
cd /mnt/snapshot
tar -jcv -f /backups/lvm.tar.bz2 *

# 恢复系统
umount /mnt/snapshot
lvremove /dev/vgname/ssname
umount /mnt/lvm
mkfs -t ext3 /dev/vgname/lvname
mount /dev/vgname/lvname /mnt/lvm
tar jxv -f /backups/lvn.tar.bz2 -C/mnt/lvm

利用快照区可以进行各项练习和测试任务,然后利用快照复原

# 建立一个大一点的快照区
lvcreate -s -l 89 -n ssname /dev/vgname/lvname
lvdisplay /dev/vgname/ssname

# 挂载快照区
umount /mnt/lvm
mount /dev/vgname/ssname /mnt/snapshot
df /mnt/snapshot

# 开始恶搞 snapshot
mount /dev/vgname/lvname /mnt/lvm

# 复原
umount /mnt/snapshot
lvremove /dev/vgname/ssname

lvcreate -s -l 89 -n ssname /dev/vgname/lvname
mount /dev/vgname/ssname /mnt/snapshot

移除LVM

  1. 先卸载系统上的LVM文件系统
  2. 使用lvremove移除LV
  3. 使用vgchange -a n vgname 让vgname这个VG不再具有Active属性
  4. 使用vgremove移除 VG
  5. 使用pvremove移除 PV
  6. 使用fdisk修改system id

流程

umount /mnt/lvm
umount /mnt/snapshot
lvremove /dev/vgname/ssname
lvremove /dev/vgname/lvname

vgchange -a n vgname

vgremove vgname

pvremove /dev/sda{6,7,8,9,10}

# 最后利用fdisk将system id改成82
fdisk /dev/sda

在RAID上使用LVM

1.先umount卸载之前挂载的多余的文件系统

2.修改/etc/fstab 让开机不自动挂载

3.利用fdisk将分区删除

4.建立RAID

# 利用fdisk建立多个分区,例如 建立5个
fdisk /dev/sda

# 利用mdadm建立软件RAID
mdadm --create --auto=yes /dev/md0 --level=5 \
--raid-devices=4 --spare-devices=1 /dev/sda{6,7,8,9,10}

5.处理LVM

pvcreate /dev/md0
vgcreate vgname /dev/md0
lvcreate -L 2.8G -n lvname vgname
lvdisplay

6.文件系统的建立和挂载

mkfs -t ext3 /dev/vgname/lvname
mkdir /mnt/raidlvm
mount /dev/vgname/lvname /mnt/raidlvm

7.删除过程

umount /dev/raidlvm
lvremove /dev/vgname/lvname
vgchange -a n vgname
vgremove vgname
pvremove /dev/md0

mdadm --stop /dev/md0

# 还原原本的分区
fdisk /dev/sda

散乱知识 (随意记)

fdisk -l 查看所有分区

df 查看挂载情况

命令

  1. quotacheck (扫描文件系统,并建立Quota记录文件)

quotacheck [-avugfM] [/mount_point]
quotacheck -a 扫描所有在/etc/mtab中所有具有quota支持的文件系统
quotacheck -u 针对用户扫描档案和目录的使用情况,会建立quota.user
quotacheck -g 针对群组扫描档案和目录的使用情况,会建立quota.group
quotacheck -v 显示扫描过程信息
quotacheck -f 强制扫描文件系统,并写入新的quota配置文件(危险)
quotacheck -M 强制以读写的方式扫描文件系统只有在特殊情况下才会使用
一般直接使用 quota -avug
quota -avug -fm强制扫描已挂载的文件系统

  1. quotaon (启动quota服务)

quotaon [-avug]
quotaon [-vug] [/mount_point]
quotaon -u 针对使用者启动(quota.user)
quotaon -g 针对群组启动(quota.group)
quotaon -v 显示启动过程信息
quotaon -a 根据/etc/mtab内的设定启动qutao
没有-a选项则需要加上 /mount_point
一般直接使用 quotaon -avug
quotaon -vug /var 启动/var对quota的支持
该指令只需要第一次启动quota时执行
下次系统启动会通过/etc/rc.d/rc.sysinit自动下达该命令

  1. quotaoff (关闭quota服务)

quotaoff [-a]
quotaoff [-ug] [/mount_point]
quotaoff -a 根据/etc/mtab关闭所有文件系统的quota
quotaoff -u 仅针对后面那个/mount_point关闭user quota
quotaoff -g 仅针对后面那个/mount_point关闭group quota

  1. edquota (设置quota的限制值)

edquota [-u username] [-g groupname]
edquota -t 修改宽限时间grace time
edquota -p 范本账号 -u 新账号
edquota -u 后接用户名,可以进入quota的编辑页面(vi)设置username的限制值
edquota -g 后接群组名,可以进入quota的编辑页面(vi)设置groupname的限制值
edquota -t 可以修改宽限时间grace time
edquota -p 范本账号 -u 新账号 //复制范本账号的quota值给新账号

  1. quota (进行quota报表)

quota -uvs username
quota -gvs groupname
quota -v 显示每个用户filesystem的quota值
quota -s 显示易读的单位

  1. repquota (跟对整个文件系统进行quota报表)

repquota -a [-vugs]
repquota -a 找到/etc/mtab中具有quota标志的文件系统,并报告quota的结果
repquota -v 输出统计信息
repquota -u 显示用户的quota限制值
repquota -g 显示群组的quota限制值
repquota -s 使用易读的单位显示

  1. warnquota (进行quota的警告)

可以根据/etc/warnquota.conf的设定,找出超过soft的账号透过email进行警告

  1. setquota (直接在指令中设定quota的值)
  1. mdadm (设置软件磁盘阵列RAID)

mdadm --detail /dev/md0
mdadm --create --auto=yes /dev/md[0-9] --raid-device=N --level=[015] --spare-devices=N /dev/sdx /dev/hdx
---- 选项与参数 ----
--create 建立RAID
--auto=yes 决定建立后面接的软件磁盘阵列,即/dev/md0、/dev/md1..
--raid-devices=N 使用N个磁盘(Partition)作为磁盘阵列装置
--spare-devices=N 使用几个磁盘作为备用(Spare)装置
--level=[015] 设定这组磁盘阵列的等级
--detail 接磁盘阵列的详细信息
后面接的装置名可以是整个磁盘,也可以是Partition,但总数要和--raid-devices和--spare-devices的综合相同
---- 救援模式 ----
mdadm --manage /dev/md0[0-9] [--add 装置] [--remove 装置] [--fail 装置]
---- 选项和参数 ----
--add 将后面的装置加入到md中
--remove 将后面的装置由md中移除
--fail 将后面的装置设定成为出错状态
madam --manage /dev/md0 --fail /dev/sda8 另装置sda8出错
madam --manage /dev/md0 --add /dev/sda11 --remove /dev/sda8 移除sda8和增加sda11

参考

鸟哥的Linux私房菜 第三版

posted @ 2017-08-15 12:12  smallpi  阅读(742)  评论(0编辑  收藏  举报

页脚