zoukankan      html  css  js  c++  java
  • 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私房菜 第三版

  • 相关阅读:
    mongodb3.6 (四)net 客户端如何连接、访问mongodb集群
    mongodb3.6 副本集(三)mongodb 如何做数据备灾
    winform中如何使用确认对话框
    Centos6.5在线配置安装Java环境与Tomcat环境
    IBatis.Net 下使用SqlBulkCopy 大批量导入数据 问题解决
    【easyui-combobox】下拉菜单自动补全功能,Ajax获取远程数据源
    IDEA创建springboot异常(Failed to load class "org.slf4j.impl.StaticLoggerBinder")
    Elasticsearch6.5安装&&常见问题与答案解释
    JS实现多Div模块拖拽功能
    IView入门练习~CDN模式全局加载JS
  • 原文地址:https://www.cnblogs.com/smallpi/p/7364423.html
Copyright © 2011-2022 走看看