linux高级文件管理系统

磁盘配额:

   linux是一个多用户的系统,磁盘配额是分配给每个用户的磁盘可用空间的限制。每一用户只能使用最大配额范围内的磁盘空间。root是不受配额限制的,只有普通用户才受限制。

  Quota是在RedHatlinux下实现linux磁盘配额的工具,它支持单独的挂载文件系统,而不是一个目录。quota默认是安装的,如果没有安装,请用yum install quota命令进行安装。

  磁盘配额用于对新加载的分区进行磁盘配额,对系统安装时设定的分区无效。

综述

在内核中执行

以文件系统为单位启用

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

根据块或者节点进行限制

执行软限制(soft limit)

硬限制(hard limit)

配额中的术语: 

<1>软限制: 警告限制,可以被突破; 

<2>硬限制: 最大可用限制,不可突破; 

<3>配额大小:以大小K为单位,以文件个数为单位; 

<4>配额宽限日期:把硬限制降回到软限制的宽限时间;


如何建立磁盘配额?

以创建home分区为例:

1、创建一个独立的分区   

fdisk /dev/sdb

2、格式化文件系统

 mkfs.ext4 /dev/sdb1

3、挂载,

    由于使用mount挂载,重启后会失效,我们使用vim写入文件

    vim  /etc/fstab
/dev/sdb1    /home   ext4    defaults,usrquota,grpquota      0   0

4、重新读取文件,使挂载生效,使用mount -a ,

5、创建配额数据库

   quotacheck  -cug /home

如果出现

 quotacheck: Cannot create new quotafile /data/aquota.user.new: Permission denied
 quotacheck: Cannot initialize IO on new quotafile: Permission denied

 说明selinux没关闭。使用#setenforce 0关闭selinux,同时编辑/etc/selinux/config文件,将SELINUX的值设为permissive或disabled。)

6、启用数据库

quotaon -p /home 查看是否启用数据库

quotaon  /home 启用数据

7、配置配额项

edquota wang

wKiom1fE8bfzEHSxAAAR6bIJLuQ501.png

edquota  -p wang tom 复制wang的配额给tom

setquota tom 60000 80000 15 18 /home 命令行直接指定配额

5、测试

quota wang

wKiom1fE85jT7_b1AAAYqR-hhqA158.png

达到软限制,显示警告,文件正常创建

wKioL1fE8__TeB0WAAAdWO3nCcU238.png

超过硬限制,显示写入失败。

wKioL1fE9EOScvRRAAAiRoWcFqk377.png

repquota  /home 查看磁盘配额

wKioL1fE87jQdfxAAAAkn5Hx1vk219.png

磁盘阵列:RAID

什么是RAID?

  磁盘阵列的英文全名为:Redundant Arrays of Inexpensive(Independent)Disks (RAID) ,即容错廉价磁盘阵列。

RAID可以通过一些技术(软件或硬件)将多个较小的磁盘整合为一个较大的磁盘设备;而这个较大的磁盘功能不止是存储唯一,它还具有数据保护的功能。整个RAID由于选择的等级不同,而是的整合后的磁盘具有不同的功能,常见的等级有以下几种:

RAID-0(条带卷,stripe):等量模式,性能最佳

 这种模式如果使用相同型号与容量的磁盘来组成时,效果最佳。这种模式的RAID会将磁盘先切除等量的区块,然后当一个文件要写入RAID时,该文件会依据块的大小先切割好,之后在依序放到各个磁盘里去。因此当写入数据时,数据会被等量放置在各个磁盘上面。

  • 读、写性能提升;

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

  • 无容错能力

  • 最少磁盘数:2

wKioL1fFHwXzqSX5AACGJZrJoRo587.jpg

RAID-1(镜像卷,mirror):完整备份

 这种模式也是需要形同的磁盘容量的,最好是一样的磁盘。如果是不同容量的磁盘 组成RAID-1时,那么总容量将以最小的那一块磁盘为主!这种模式主要是让同一份数据完整保存在两块磁盘上面。因此,整体RAID的容量,会是全部磁盘容量的一半。

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

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

  • 有冗余能力

  • 最少磁盘数:2

wKiom1fFHx7S07IfAABANy_uCUQ970.jpg

RAID-5:性能与数据备份的均衡考虑

  RAID-5至少需要三块以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似RAID-0,不过每个循环的写入过程中,在每块磁盘还加入一个同位检查数据(Parity)这个数据会记录其他磁盘的备份数据,用于当有磁盘损坏的救援。

  • 读、写性能提升

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

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

  • 最少磁盘数:3

wKiom1fFH-CQODi3AAPN4ortLcY708.png

RAID-6:RAID-5的升级版

  RAID6技术是在RAID 5基础上,为了进一步加强数据保护而设计的一种RAID方式,实际上是一种扩展RAID 5等级。与RAID 5的不同之处于除了每个硬盘上都有同级数据XOR校验区外,还有一个针对每个数据块的XOR校验区。当然,当前盘数据块的校验数据不可能存在当前盘而是交错存储的,具体形式见图。这样一来,等于每个数据块有了两个校验保护屏障(一个分层校验,一个是总体校验),因此RAID 6的数据冗余性能相当好。但是,由于增加了一个校验,所以写入的效率较RAID 5还差,而且控制系统的设计也更为复杂,第二块的校验区也减少了有效存储空间。

  • 读、写性能提升

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

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

  • 最少磁盘数:4

wKiom1fFISvQPkUwAAGWxxVDkOw692.png

RAID-10(1+0):结合RAID-1和RAID-0,先组建RAID-1再组建RAID0

  RAID-10即为组成RAID-1,再将RAID-1组成RAID-0,所以RAID-10即弥补了RAID-1的数据安全但性能不佳,又弥补了RAID-0的性能佳但数据不安全。由于具有了RAID-0的优点,所以性能的一提升,由于具有RAID-1的优点,所以数据得以备份。但是也由于RAID-1的缺点。所以总容量会少一半用来作为备份。

  • 读、写性能提升

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

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

  • 最少磁盘数:4

wKioL1fFI5KQRbxeAAFoamxJKq0904.pngRAID-01(0+1):和RAID10相似,结合RADI-0和RAID-1,先组建RAID-0再组建RAID-1 

RAID-50 (5+0):结合RAID-5和RAID-0,先组建RAID-5再组建RAID-0

   此配置在RAID5的子磁盘组的每个磁盘上进行包括奇偶信息在内的数据的剥离。每个RAID5子磁盘组要求三个硬盘。RAID50具备更高的容错能力,因为它允许某个组内有一个磁盘出现故障,而不会造成数据丢失。而且因为奇偶位分部于RAID5子磁盘组上,故重建速度有很大提高。优势:更高的容错能力,具备更快数据读取速率的潜力。需要注意的是:磁盘故障会影响吞吐量。故障后重建信息的时间比镜像配置情况下要长。

RAID7:可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式  

JBOD:Just a Bunch Of Disks

 功能:将多块磁盘的空间合并一个大的连续空间使用

 可用空间:sum(S1,S2,…)

Spare Disk:预备磁盘的功能

  将一块 或多块没有包含在原本磁盘阵列等级中的磁盘,这块磁盘平时并不会被磁盘阵列所使用,当磁盘阵列有任何磁盘损坏时,则这块spare disk会被主动拉近磁盘阵列中,并将坏掉的那块硬盘移除磁盘阵列,然后重建数据系统。


软件磁盘阵列设置

软RAID

mdadm:为软RAID提供管理界面

为空余磁盘添加冗余

结合内核中的md(multi devices)

RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等等


软件RAID的实现

mdadm命令:模式化的工具

命令的语法格式:mdadm[mode] <raiddevice> [options] <component-devices>

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

 模式:

    创建:-C

    装配: -A

    监控: -F

    管理:-f, -r, -a

<raiddevice>: /dev/md#

<component-devices>: 任意块设备

-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

停止md设备:

    mdadm -S /dev/md#

使用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

增加新的成员

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


例:创建一个10G可用空间的RAID5

# fdisk /dev/sdb
Device Boot   Start   End      Blocks   Id  System
/dev/sdb1     1     654     5253223+  83  Linux
/dev/sdb2    655    1308     5253255   83  Linux
/dev/sdb3    1309    1962     5253255   83  Linux
/dev/sdb4    1963    26108   193952745    5  Extended
/dev/sdb5    1963    2616     5253223+  83  Linux   
# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{1,2,3,5}
# cat /proc/mdstat    #查看创建状态
# mkfs.ext4 /dev/md0   #格式化
# mount /dev/md0 /mnt/raid5/  #挂载
# mdadm -D /dev/md0    #查看
/dev/md0:
        Version : 1.2
  Creation Time : Tue Aug  2 03:02:01 2016
     Raid Level : raid5
     Array Size : 10498048 (10.01 GiB 10.75 GB)
  Used Dev Size : 5249024 (5.01 GiB 5.38 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

软RAID测试和修复

 模拟磁盘故障

    #mdadm /dev/md0 -f /dev/sdb1

   # mdadm -D /dev/md0
  Number  Major  Minor  RaidDevice State
   3    8    21     0    spare rebuilding /dev/sdb5
   1    8    18     1    active sync   /dev/sdb2
   4    8    19     2    active sync   /dev/sdb3
   
   0    8    17     -    faulty      /dev/sdb1

 移除磁盘

    #mdadm /dev/md0 –r /dev/sdb1

   # mdadm -D /dev/md0
   Number   Major   Minor   RaidDevice State
    3     8     21      0   active sync   /dev/sdb5
    1     8     18      1   active sync   /dev/sdb2
    4     8     19      2   active sync   /dev/sdb3

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

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

    在备用驱动器上重建分区

    # mdadm /dev/md0 -a /dev/sda1

   # mdadm -D /dev/md0
   Number   Major   Minor   RaidDevice State
    3     8     21      0   active sync   /dev/sdb5
    1     8     18      1   active sync   /dev/sdb2
    4     8     19      2   active sync   /dev/sdb3
   
    5     8     17      -      spare   /dev/sdb1

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

软RAID管理

 生成配置文件:mdadm –D –s >> /etc/mdadm.conf

 停服务:mdadm –S /dev/md0

 激活:mdadm –A –s /dev/md0 激活

 删除raid信息:mdadm –zero-superblock /dev/sdb1

例::创建一个可用空间为10G的RAID1设备,要求其chunk大小为128k,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录

# fdisk /dev/sdc
# mdadm -C /dev/md1 -a yes -n 2 -x 1 -l 1 -c 128 /dev/sdc{1,2,3} 
# cat /proc/mdstat    #查看创建状态
# mkfs.ext4 /dev/md1   #格式化
# vim /etc/fstab
  /dev/md1  /backup      ext4    defaults        0 0  
#  mount -a    #挂载
# mdadm -D /dev/md0  
 /dev/md1:
        Version : 1.2
  Creation Time : Tue Aug  2 03:52:13 2016
     Raid Level : raid1
     Array Size : 10466176 (9.98 GiB 10.72 GB)
  Used Dev Size : 10466176 (9.98 GiB 10.72 GB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent


LVM逻辑卷管理器

LVM: (Logical Volume Manager)

   是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

特点:

允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小

允许在多个物理设备间重新组织文件系统

  • 将设备指定为物理卷

  • 用一个或者多个物理卷来创建一个卷组

  • 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的

  • 在物理卷上创建的逻辑卷是由物理区域(PE)组成

  • 可以在逻辑卷上创建文件系统

基本概念介绍:

  • PP:物理分区(Physical Partition),如硬盘的分区,或 RAID 分区。

  • PV:物理卷(Physical Volume),是 PP 的 LVM 抽象,它维护了 PP 的结构信息,是组成 VG 的基本逻辑单元,一般一个 PV 对应一个 PP。

  • PE:物理扩展单元(Physical Extends),每个 PV 都会以 PE 为基本单元划分。

  • VG:卷组(Volume Group),即 LVM 卷组,它可由一个或数个 PV 组成,相当于 LVM 的存储池。

  • LE:逻辑扩展单元(Logical Extends),组成 LV 的基本单元,一个 LE 对应一个 PE。

  • LV:逻辑卷(Logical Volume),它建立在 VG 之上,文件系统之下,由若干个 LE 组成。

wKioL1fFUMGgoOJyAAA3ITXDHbM281.png

  LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!


    PE与VG的相关性图示:

171413294737298.gif

实现流程:

 通过PV,VG,LV的规划后,再利用mkfs就可以将LV格式化为可以利用的文件系统,而且这个文件系统的容量在将来还能进行扩充或减少,里面的数据还不会被影响。

 LVM各组件的实现流程图示:wKioL1fFe0yD9BksAACPlJmUjVs567.png

1、实现partition阶段

   创建分区,并将分区的System ID 改为 8e

wKioL1fFac3RraTdAAAeVfhZjKM768.png

2、PV阶段:

pv管理工具

 显示pv信息

   pvs:简要pv信息显示

   pvdisplay

 创建pv

   pvcreate /dev/DEVICE

    pvcreate /dev/sdb{1,2,3}创建 PV

    pvscan 查看PV,分别显示每个pv的信息与系统所有pv的信息

    pvdisplay 详细的列出系统上的每个PV的信息

wKiom1fFa3mibsmrAAAz_T9tk8Q651.png

3、VG阶段

vg管理工具

 显示卷组

   vgs

   vgscan

   vgdisplay

 创建卷组

  vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]

 管理卷组

   vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]

   vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]

 删除卷组

   先做pvmove,再做vgremove

wKiom1fFbqCRenH8AABIvPbA_Lc355.png

4、LV阶段:

lv管理工具

 显示逻辑卷

   lvs

   lvdisplay

 创建逻辑卷

   lvcreate -L #[mMgGtT] -n NAME VolumeGroup

 删除逻辑卷

   lvremove/dev/VG_NAME/LV_NAME

 重设文件系统大小

   fsadm [options] resize device [new_size[BKMGTEP]]

   resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]

wKioL1fFcDXTN4aWAAA-2T_JMIc394.png

5、文件系统阶段

   格式化、挂载、查看使用lv

    mkfs.ext4 /dev/testvg/testlv 
    mkdir /mnt/lvm
    mount /dev/testvg/testlv /mnt/lvm/

扩展和缩减逻辑卷:

扩展逻辑卷:

 # lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME  #扩展LV 

 # resize2fs /dev/VG_NAME/LV_NAME         #完整的LV的容量扩充至整个文件系统

# fdisk /dev/sdb   # 新增pv
# pvcreate /dev/sdb5
# vgextend testvg /dev/sdb5    # 扩展vg
# lvextend -L 20G /dev/testvg/testlv   # 扩展lv
# resize2fs  /dev/testvg/testlv  #扩展文件系统

wKiom1fFf-2APBbhAABHzzsby_s761.png

缩减逻辑卷:

 # umount/dev/VG_NAME/LV_NAME       #首先取消挂载

 # e2fsck -f /dev/VG_NAME/LV_NAME    #强制检测文件系统

 # resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] #缩小文件系统

 # lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME  #缩减LV

 # mount        #重新挂载

 # umount /mnt/lvm/
 # e2fsck -f /dev/testvg/testlv 
 # resize2fs  /dev/testvg/testlv 10G
 # lvreduce -L 16G /dev/testvg/testlv 
 # mount /dev/testvg/testlv /mnt/lvm/

wKiom1fFhTfRHXYrAABHYD1OHHI272.png

LVM的系统快照:

 快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。

 由于快照区与原本的LV共用很多PE的区块,因此快照去与被快照的LV必须要要在同一个VG上!系统恢复的时候的文件数量不能高于快照区的实际容量。

wKioL1fFkXqC7HAbAABsaBTkmE8093.png

  1. 快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝

  2. 对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择。

  3. 快照只有在它们和原来的逻辑卷不同时才会消耗空间。

  • 在生成快照时会分配给它一定空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间

  • 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。

  • 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据

  • 建立快照的卷大小只需要原始逻辑卷的15%~20%就够了。也可以使用lvextend放大快照。

使用LVM快照

 为现有逻辑卷创建快照

  # lvcreate -n testlv-s  -L 10G -s -p r  /dev/testvg/testlv

 挂载快照

  # mkdir /mnt/testlv-s

  # mount /dev/testvg/textlv-s /mnt/testlv-s/

 删除快照

  # umount /mnt/testlv-s

  # lvremove /dev/testvg/testlv

示例:

1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录

[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# pvcreate /dev/sdb1
[root@localhost ~]# pvcreate /dev/sdb2
[root@localhost ~]# vgcreate -s 16M testvg /dev/sdb{1,2}
[root@localhost ~]# lvcreate -n textlv -L 5G /dev/testvg
[root@localhost  ~]#  mkfs.ext4 /dev/testvg/testlv
[root@localhost  ~]#  mkdir /users
[root@localhost  ~]#  mount /dev/testvg/testlv /users/

wKiom1fHhQnSGdUKAAA1VKn_6UE142.png

wKiom1fHirbix1NsAABF8jtgRX4218.png

wKioL1fHizvTRZSxAABKnD33y9Q310.png

2、新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录

[root@localhost ~]# useradd -d /users/archlinux archlinux
[root@localhost ~]# su - archlinux 
[archlinux@localhost ~]$ pwd
/users/archlinux
[archlinux@localhost ~]$ cp -r  /etc/pam.d .
[archlinux@localhost ~]# ll pam.d/ | wc
     46     419    2386

3、扩展testlv至7G,要求archlinux用户的文件不能丢失

[root@localhost ~]# lvextend -L 7G /dev/testvg/textlv
[root@localhost ~]# resize2fs /dev/testvg/textlv
[root@localhost ~]# su - archlinux 
[archlinux@localhost ~]$ ll pam.d/ | wc
     46     419    2836

wKiom1fHi3XSyQZ8AABKc7qVvl4034.png

4、收缩testlv至3G,要求archlinux用户的文件不能丢失

[root@localhost ~]# umount /dev/testvg/testlv
[root@localhost ~]# e2fsck -f /dev/testvg/testlv 
[root@localhost ~]# resize2fs /dev/testvg/testlv 3G
[root@localhost ~]# lvreduce -L 3G /dev/testvg/testlv 
[root@localhost ~]# mount /dev/testvg/testlv /users/
[root@localhost ~]# ll /users/archlinux/pam.d/ | wc
     46     419    2836

wKiom1fHj2aTQdPpAABKJu78CTY026.png

5、对testlv创建快照,并尝试基于快照备份数据,验正快照的功能

[root@localhost ~]#  lvcreate -L 1G -p r -s  -n testlv-snap  /dev/testvg/testl
[root@localhost ~]# mkdir /mnt/snap
[root@localhost ~]# mount /dev/testvg/testlv-snap /mnt/snap/
[root@localhost ~]# rm -f /users/archlinux/pam.d/c*
[root@localhost ~]# ls /users/archlinux/pam.d/c*
ls: cannot access /users/archlinux/pam.d/c*: No such file or directory
[root@localhost ~]# ls /mnt/snap/archlinux/pam.d/c*
/mnt/snap/archlinux/pam.d/chfn         /mnt/snap/archlinux/pam.d/crond
/mnt/snap/archlinux/pam.d/chsh         /mnt/snap/archlinux/pam.d/cups
/mnt/snap/archlinux/pam.d/config-util

wKiom1fHkffwsMu8AABRq4o8Pf4377.png

原创文章,作者:Groot,如若转载,请注明出处:http://www.178linux.com/42618

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code