高级文件系统管理

磁盘配额:

        当我们在一个指定分区内有多个用户使用时,为了保证磁盘空间的大小,我们可以限制某些用户在该磁盘空间中的使用量,此种功能我们称之为磁盘配额。

            初始化:

                    分区挂载选项:usrquota、grpquota

                    创建化数据库:quotachek -c

            执行:

                    开启或取消数据库:quotaon、quotaoff

                    直接编辑配额选项:edquota  username

                    通过命令直接编辑:setquota usename 4096 5120 40 50 /foo

                    指定多个用户:edquota -p user1 user2

            查看配置信息:

                    用户调查:quota

                    配额概述:repquota

                    其他工具:warnquota

        举例说明:限制wang用户创建的文件总大小不能超过200M

                    1、fdisk /dev/sdd 创建一个1G的分区,格式化成ext4文件系统,创建一个目录,将家目录中的文件拷贝移动到该目录中,然后挂载,挂载选项添加usrquota,grpquota,挂载成功后,将.quota目录中的文件拷贝到/home路径下。

mkdir /mnt/quota
cp -a /home/* /mnt/quota/
/dev/sdd1               /home             ext4    usrquota,grpquota       0       0
mount -a
mount -s
/dev/sdd1 on /home type ext4 (rw,usrquota,grpquota)
cp -a /mnt/quota/* /home/

                    2、创建配额数据库

root@cenots6.8  ~ # quotacheck -cug /home
quotacheck: Cannot create new quotafile /home/aquota.user.new: 权限不够
quotacheck: Cannot initialize IO on new quotafile: 权限不够
quotacheck: Cannot create new quotafile /home/aquota.group.new: 权限不够
quotacheck: Cannot initialize IO on new quotafile: 权限不够
root@cenots6.8  ~ # setenforce 0   (centos6可能会报如上错误)
root@cenots6.8  ~ # quotacheck -cug /home

                    3、启用数据库

root@cenots6.8  ~ # quotaon -p /home            ###查看数据库是否启用
group quota on /home (/dev/sdd1) is off         ###off 没有启用
user quota on /home (/dev/sdd1) is off
root@cenots6.8  ~ # quotaon /home               ###启用数据库
root@cenots6.8  ~ # quotaon -p /home            ###查看数据库是否启用       
group quota on /home (/dev/sdd1) is on          ###on 启用
user quota on /home (/dev/sdd1) is on

                    4、配置配额选项警告值为1,除了下面的方法也可以:setquota wang 102400 204800 0 0 /home 直接编辑。

root@cenots6.8  ~ # edquota wang
Disk quotas for user wang (uid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdd1                        36       102400       204800            9        0        0
##                                     超过该值时警告  最大值(单位K)

                    5、分别创建三个90M的文件测试

wang@cenots6.8  ~ # dd if=/dev/zero of=f1 bs=1M count=90
记录了90+0 的读入
记录了90+0 的写出
94371840字节(94 MB)已复制,0.0834356 秒,1.1 GB/秒
wang@cenots6.8  ~ # dd if=/dev/zero of=f2 bs=1M count=90
sdd1: warning, user block quota exceeded.    ############已经警告了
记录了90+0 的读入
记录了90+0 的写出
94371840字节(94 MB)已复制,0.20327 秒,464 MB/秒
wang@cenots6.8  ~ # ll -lh
总用量 180M
-rw-rw-r--. 1 wang wang 90M 8月  29 23:42 f1
-rw-rw-r--. 1 wang wang 90M 8月  29 23:43 f2
wang@cenots6.8  ~ # dd if=/dev/zero of=f3 bs=1M count=90
sdd1: write failed, user block limit reached.
dd: 正在写入"f3": 超出磁盘限额
记录了20+0 的读入
记录了19+0 的写出
20934656字节(21 MB)已复制,0.12074 秒,173 MB/秒
wang@cenots6.8  ~ # ll -lh
总用量 200M
-rw-rw-r--. 1 wang wang 90M 8月  29 23:42 f1
-rw-rw-r--. 1 wang wang 90M 8月  29 23:43 f2
-rw-rw-r--. 1 wang wang 20M 8月  29 23:44 f3   #####此处我们创建了90M的文件但是此处为20M,满足我们设置的200M的需求

                    6、查看配置信息的命令

wang@cenots6.8  ~ # quota wang
Disk quotas for user wang (uid 500): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdd1  204800* 102400  204800   6days      12       0       0  

root@cenots6.8  ~ # repquota /home
*** Report for user quotas on device /dev/sdd1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      52       0       0             10     0     0       
wang      +-  204800  102400  204800  6days      12     0     0       
tom       --      32       0       0              8     0     0

RAID:

        raid磁盘冗余阵列作用:
                提供io能力:磁盘并行读写
                提供其耐用性:提供冗余能力
            级别:多块磁盘组织在一起的工作方式有所不同。

        raid的实现方式:
                外界磁盘阵列:通过扩展卡提供适配能力
                内接式raid:主板集成raid控制器

        raid-0:
                至少需要2块磁盘,A磁盘存放数据块chunk1,B磁盘存放数据块chunk2,同时写入,同时读出,这样读写性能提升,每个磁盘块存放的数据块大小一致,所以磁盘空间以最小的为主。
                可用空间:N*min(s1,s2…..)
                无容错能力
                最小磁盘数:2,2+

        raid-1:
                至少需要2块磁盘,每块磁盘同事存放同样的数据,A磁盘存放数据块1,B磁盘存放数据块1,然后在同时存放数据块2。
                可用空间:1*mi
                读性能提升,写性能下降
                有容错能力
                最小磁盘数:2,2+

        raid-4:

                至少需要3块磁盘,其中一块A磁盘用于存放校验码,异或值,B磁盘存放数据块chunk1,C磁盘存放数据块chunk2,允许一块磁盘损坏,此时的工作方式叫做降级模式,可以通过校验和和另一个磁盘计算出坏磁盘中的数据,如果在有一块损坏,那就不能工作了。
                读写性能提升
                有容错能力
                可用空间(N-1)*min
                最小磁盘数:3,3+

        raid-5:
                至少需要3块磁盘,第一个数据存第一块盘上,第二个数据存第二块盘上,校验码存第三块盘上,下一次个数据存第三块盘,第二个数据存第2块盘,校验码存第一块盘,第二块盘存校验码,第二个数据放第一块盘,三快盘轮流做校验盘
                读写性能提升
                有容错能力,允许坏一块盘
                最少磁盘数:3,3+

        raid-6: 校验码存2次,校验盘2块
                读写性能提升
                可用空间:(N-2)*min
                有容错能力,允许坏2块盘
                最少磁盘数:4,4+

      raid-01:
                两两一组,组成raid0,然后将多个两两一组在组成raid1
                读写性能提升
                可用空间:N*min/2
                有容错能力:每组坏一个该组就不能用了
                最少磁盘数:4

        raid-10
                两两一组,组成raid1,然后将多个两两一组在组成raid0
                读写性能提升
                可用空间:N*min/2
                有容错能力:每组raid允许坏一个
                最少磁盘数:4

        raid7:

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

        JBOD:
                功能:将多块磁盘的空间合并一个大的连续空间使用;
                可用空间:sum(s1,s2,s3.。。)

        

        软RAID

                生产环境中,主要使用硬raid,但是我们也可以通过软raid 来模拟硬raid的工作方式。

                相关命令:

                    mdadm:模式化的工具
                    格式:mdadm [mode] <raiddevice> [options component-devices<>]
                                支持的raid级别:raid 0 1 4 5 6 10
                    mode:
                        创建:-C
                        装配:-A
                        监控: -F
                        管理:-f,-r,-a
                 <raiddevice>:/dev/md# 任意块设备
                    -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 -D -s >> /etc/mdadm.conf

                    停止md设备:
                            mdadm -S /dev/md#

                    激活:

                            mdadm -A -s /dev/md0

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

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

                1、首先创建两个1G大小的分区/dev/sdc{1,2},调整ID为fd。

                2、创建RAID1

mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sdc{1,2}            ###创建raid1时,如果要使用备用硬盘,-n 2(此处不能选3) -x 1
root@cenots6.8  ~ # mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Aug 30 09:19:25 2016
     Raid Level : raid1
     Array Size : 1048704 (1024.13 MiB 1073.87 MB)
  Used Dev Size : 1048704 (1024.13 MiB 1073.87 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Aug 30 09:19:32 2016
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : cenots6.8:0  (local to host cenots6.8)
           UUID : 7d304fed:b021d2d4:0cc8720b:af8683fb
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       34        1      active sync   /dev/sdc2

            3、格式化/dev/md0,并挂载

mkfs.ext4 /dev/md0
UUID=d5f1e3db-4f61-4651-9b7a-b2bf82446b59       /mnt/raid       ext4    defaults        0  0 
root@cenots6.8  ~ # mount -a
root@cenots6.8  ~ # mount -s
/dev/md0 on /mnt/raid type ext4 (rw)
root@cenots6.8  ~ # cd /mnt/raid/
root@cenots6.8  /mnt/raid # touch a
root@cenots6.8  /mnt/raid # echo bbbb > a
root@cenots6.8  /mnt/raid # cat a
bbbb

           4、生成配置文件

mdadm -Ds /dev/md0 > /etc/mdadm.conf

          5、测试模拟损坏sdc2,然后移除,重新添加,在原有两块raid盘的基础上添加/dev/sdc3

root@cenots6.8  ~ # mdadm /dev/md0 -f /dev/sdc2            ###模拟损坏/dev/sdc2
mdadm: set /dev/sdc2 faulty in /dev/md0
root@cenots6.8  ~ # mdadm -D /dev/md0                      ### 查看状态
    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       2       0        0        2      removed

       1       8       34        -      faulty   /dev/sdc2
root@cenots6.8  ~ # mdadm /dev/md0 -r /dev/sdc2            ###移除损坏硬盘
mdadm: hot removed /dev/sdc2 from /dev/md0
root@cenots6.8  ~ # mdadm -D /dev/md0                      ###查看状态
   Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       2       0        0        2      removed
root@cenots6.8  ~ # mdadm /dev/md0 -a /dev/sdc2            ###重新添加新的硬盘
    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       2       8       34        1      active sync   /dev/sdc2
root@cenots6.8  ~ # mdadm -G /dev/md0 -n 3 -a /dev/sdc3         ###添加/dev/sdc3 到原有raid
mdadm: added /dev/sdc3
raid_disks for /dev/md0 set to 3
root@cenots6.8  ~ # mdadm -D /dev/md0 
    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       2       8       34        1      active sync   /dev/sdc2
       3       8       35        2      spare rebuilding   /dev/sdc3

            6、删除raid

umount /mnt/raid
mdadm -S /dev/md0          ###停止raid
rm -f /etc/mdadm.conf
vi /etc/fstab              ###删除挂载点
fdisk /dev/sda            ###删除分区
mdadm --zero-superblock /dev/sdd1   ###清楚记录

       

创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录

root@cenots6.8  ~ # mdadm -C /dev/md0 -l 5 -a yes -n 3 -x 1 -c 256 /dev/sdc{1,2,3,4}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
root@cenots6.8  ~ # mkfs.ext4 /dev/md0
root@cenots6.8  ~ # mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Aug 30 09:56:31 2016
     Raid Level : raid5
     Array Size : 2117632 (2.02 GiB 2.17 GB)
  Used Dev Size : 1058816 (1034.00 MiB 1084.23 MB)
   Raid Devices : 3
  Total Devices : 4

     Chunk Size : 256K

           Name : cenots6.8:0  (local to host cenots6.8)
           UUID : d1c039d1:44071753:bd67c401:7f2898af
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       34        1      active sync   /dev/sdc2
       4       8       35        2      active sync   /dev/sdc3

       3       8       36        -      spare   /dev/sdc4
       
root@cenots6.8  ~ # vim /etc/fstab 
UUID=d5f1e3db-4f61-4651-9b7a-b2bf82446b59       /mydata       ext4    defaults        0  0 
root@cenots6.8  ~ # mount -a

LVM逻辑卷管理器:

        lvm:logical volume manager逻辑卷管理器,通过DM模块设备映射组件,能够将一个或者多个底层的块设备组织成一个逻辑设备的模块。
            功能特点:可以动态的扩展和缩减而不影响磁盘中的数据内容。
            缺点:lv是通过软件控制的,不是直接存储在物理设备上面,如果有数据损坏不容易恢复,真正使用的时候应该放到有冗余的raid上面。

        lvm的创建过程:
                假如现在底层有一个硬盘设备或者一个分区,或者一个RAID在或者基于任何块设备进行,现在把这个分区做成物理卷PV(能够自我存储设备),我们可以把PV当中所提供的存储空间,在一个更低的单位上划分多个独立的存储单元,并且把存储把多个存储单元合并在一个高层上形成一个组件,我们成为卷组VG,卷组可以包含多个物理卷,卷组所有可用的空间都是有物理卷PV提供的,卷组类似于扩展分区,不能直接使用,需要分区为逻辑分区,在格式化挂载使用,所以在VG的基础上还要在创建LV组件,lV才是真正的逻辑卷,可以才格式化挂载使用的,lv可以跨越多个PV 可以扩展和缩减,这里也有一个块的概念那就是PE,PE是在创建VG的时候创建的,且默认大小为4M,如果已经创建好了VG了,则不能修改PE的大小,只能重新创建VG修改PE,如果PE已经分配给LV使用,那么这里PE叫做LE。

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

            1、通过fdisk 创建两个10G的分区/dev/sdb1 、/dev/sdb2,调整分区ID 为8e。

            2、创建物理卷PV

                        pvcreate /dev/sdb{1,2}

                                pvs 或pvdispaly 可以查看物理卷信息

            3、创建卷组,指定PE大小为16M,注意:PE大小只能在此处指定。

                        vgcreate -s 16M testvg /dev/sdb{1,2}

                                vgs或vgdisplay 查看卷组VG的信息

            4、创建一个5G的逻辑卷LVM

                        lvcreate -L 5G -n testlv testvg

                                lvs或lvdisplay查看逻辑卷lvm的信息

                                ls /dev/mapper 查看testvg-testlv就存在了,可以格式化挂载使用了

            5、格式化挂载逻辑卷LVM,成功之后就可以使用了。   

                        mkfs.ext4 -L TESTLV /dev/testvg/testlv

                        vim /etc/fstab

                                UUID=5aae9d44-745c-46dc-9c6d-68fce7b159b3       /users          ext4 defaults   0    0
                        mount -a
                        mount -s
                                /dev/mapper/testvg-testlv on /users type ext4 (rw)

                         df -h
                                /dev/mapper/testvg-testlv  4.8G   10M  4.6G   1% /users         

            6、扩展卷组VG 和 逻辑卷lVM

                        pvcreate /dev/sdb3

                        vgextend testvg /dev/sdb3   如果此时卷组不够用了,可以动态添加卷组VG

                                    vgs或vgdisplay 查看卷组VG的信息

                        lvextend -L 10G /dev/testvg/testlv  扩展到10G,但是由于扩展的5G没有文件系统,所以df的时候发现,空间没有变为10G,因此需要执行:

                        resize2fs /dev/testvg/testlv     扩展文件系统 resize2fs只能针对ext类型的文件系统进行扩展,因此在使用xfs 创建lvm时如需扩展要使用xfs_growfs                                                  

                                                          扩展所有空间:lvextend –r –l +100%FREE /dev/testvg/testlv    -r的作用可以替代resize2fs 的功能

                        df -h

                                    /dev/mapper/testvg-testlv  9.8G   12M  9.3G   1% /users

            7、逻辑卷lvm缩减

                         umount /users   

                         e2fsck -f /dev/testvg/testlv   强制检测和修复

                       resize2fs /dev/testvg/testlv 3G        调整到3个G
                        lvreduce -L 3G /dev/testvg/testlv     减小到3个G
                        mount /dev/testvg/testlv /users        重新挂载

                         df -h
                            /dev/mapper/testvg-testlv   2.9G  7.5M  2.7G   1% /users

            8、创建快照

                        lvcreate -s -L 512M -n testlv-snap -p r /dev/testvg/testlv

                        mount /dev/testvg/testlv-snap /snap

            9、如果想移除PV可以做如下操作

                        pvmove /dev/sdb1 此时执行的操作是将sdb1上面的PE移动到其他物理卷上面

                        vgreduce testvg /dev/sdb1 

                        pvremove /dev/sdb1

            10、删除快照

                        umount  /snap

                        lvremove /dev/testvg/testlv-snap

            11、删除lv、vg、pv

                        umount /users

                        lvremove /dev/testvg/testlv

                        vgremove testvg

                        pvremove /dev/sdb{1,2,3}

        注意:注意快照也是一个逻辑卷,刚创建完成的时候是一个空的磁盘空间,当我们的源数据要修改时,我们就会把源数据拷贝到快照卷中,然后在修改源数据,如果源数据修改多少次,快照卷的文件也不会变化,只是保留创建快照卷之后,文件第一次变化之前的状态,其他文件如果不修改,则不会备份到快照卷中,但是当我们创建完快照卷的时候,我们是可以看到里面是有文件存在的,这是因为里面的文件不是真正存储在快照卷中,打开的时候里面的文件都在我们通过快照卷事实上是提供了访问原卷的另外一个通路,且在设置快照卷大小时,原卷的数据量变化量不要超过快照卷大小。

                        

        

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

(0)
NarutoNaruto
上一篇 2016-08-30
下一篇 2016-08-30

相关推荐

  • 文本处理工具之awk

                    文本处理工具之AWK 一、linux文本处理工具三剑客:grep 、sed、 awk。其中grep是一种文本过滤器,sed是文本行编辑器,而awk是一种报表生成器,就是对文件进行…

    2017-05-21
  • Redis集群明细文档

    Redis目前版本是没有提供集群功能的,如果要实现多台Redis同时提供服务只能通过客户端自身去实现(Memchached也是客户端实现分布式)。目前根据文档已经看到Redis正在开发集群功能,其中一部分已经开发完成,但是具体什么时候可以用上,还不得而知。文档来源:http://redis.io/topics/cluster-spec 一、介绍   该文档是…

    Linux干货 2015-04-04
  • 网络管理命令

    linux网络属性     ifconfig命令家族:ifconfig,route,netstat ifconfig命令:接口及地址查看和管理     ifconfig [interface]:     ifconfig -a:显示所有接口…

    Linux干货 2016-09-13
  • Linux救援模式

        学习了Linux的启动流程,为了加深理解,今天做了如下的实验:删除掉Linux系统在启动过程中比较重要的几个文件,查看启动时出现的现象。加深对知识的理解。学习机器因为某些文件的缺失的修复方式。     一、删除grub.conf    &nb…

    Linux干货 2016-11-23
  • bash编程初体验(二)

    bash编程初体验(二) read if case 概述 在本篇文章中,我们将介绍bash编程中有关if语句的简单用法,if语句的基本思路是判断给定的条件是否满足,即结果是真还是假,从而选择执行哪种操作。如此,如果条件为真,if会执行一种指令,如果条件为假,if会选择执行另一种指令,这种执行就是所谓的选择结构,它能够改变命令的基本顺序流结构,以选择流的形式运…

    Linux干货 2016-08-19
  • linux-第一周

    inux命令:(type)                  1,集成在bash中的命令,内部命令。依赖于shell类型。                  2,在文件系统路径下有…

    Linux干货 2017-05-20