高级文件系统管理

磁盘配额

现在有这样一个场景,当我们将一个文件系统挂载一个目录下,大小为10个G,用户都可以在这个目录下创建和删除目录,如果一个用户在这个目录下存储了10G的文件,那么其他的用户就不可以写文件了,所以我们就需要对这个文件系统进行磁盘的配额,限制每个用户能够存储的最大空间

quotacheck

通过扫描指定的文件系统,获取磁盘的使用情况,创建、检查和修复磁盘配额(quota)文件。执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和群组的磁盘空间限制。常用选项:

  • -c:创建一个配额文件
  • -u:配合c使用,创建一个用户配额文件
  • -g:配合c使用,创建一个组的配额文件

限制配额

  1. 先准备一个空闲的文件系统,并将其挂载在/testdir下,记得一定要加挂载选项usrquota和grpquota

    [root@centos7 /]# cat /etc/fstab |grep quota
    UUID=4e788a6f-2f77-4cee-b36f-9c5254204fb1 /testdir                ext4    defaults,usrquota,grpquota 0 0
    [root@centos7 /]# df | grep sdb4
    /dev/sdb4       10190100    36888   9612540   1% /testdir
    [root@centos7 /]# cat /proc/mounts |grep sdb4
    /dev/sdb4 /testdir ext4 rw,seclabel,relatime,quota,usrquota,grpquota,data=ordered 0 0
    
  2. 使用quotacheck创建用户、组的配额数据文件,位于挂载点的根目录

    [root@centos7 /]# quotacheck -cug /testdir/
    [root@centos7 /]# ll /testdir/
    total 32
    -rw-------. 1 root root  6144 Jun  7 20:58 aquota.group
    -rw-------. 1 root root  6144 Jun  7 20:58 aquota.user
    drwx------. 2 root root 16384 Jun  7 20:46 lost+found
    
  3. quotaon启用配额(使用quotaoff关闭配额)

    [root@centos7 /]# quotaon /testdir/
    
  4. 使用edquota USERNAME对指定的用户进行配,调用的是VIM,其中blocks和inodes列是不需要指定的,前面一对soft和hard表示的是大小的软硬限制,当超过软限制的时候,会有警告,并给用户一定的期限(默认是7天),后面是一对soft和hard表示的是inode数量的软硬限制,其实就是文件数量的限制。这里设置了liubei用户的配置

    isk quotas for user liubei (uid 1001):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/sdb4                         0       2G         3G          0       10       15
    
  5. 查看用户的配额信息

    [root@centos7 ~]# quota -v liubei
    Disk quotas for user liubei (uid 1001): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sdb4       0  2097152 3145728               0      10      15
    
  6. 尝试创建一个大小大于软限制的文件,并查看配额信息

    [liubei@centos7 testdir]$ dd if=/dev/zero of=lliubei.file bs=1M count=3000
    sdb4: warning, user block quota exceeded.
    3000+0 records in
    3000+0 records out
    3145728000 bytes (3.1 GB) copied, 2.71819 s, 1.2 GB/s
    [liubei@centos7 testdir]$ quota -v liubei
    Disk quotas for user liubei (uid 1001): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sdb4 3072004* 2097152 3145728   7days       1      10      15
    
  7. 可以使用setquota非交互式的设置配额

    [root@centos7 testdir]# setquota zhangfei 2G 4G 10 15 /testdir/
    [root@centos7 testdir]# setquota guanyu 3G 4G 10 15 /testdir/ 
    Disk quotas for user zhangfei (uid 1002): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sdb4       0  2097152 4194304               0      10      15        
    [root@centos7 testdir]# quota -v guanyu
    Disk quotas for user guanyu (uid 1003): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sdb4       0  3145728 4194304               0      10      15
    
  8. 使用repquota -v显示设置过配额的用户的信息

    [root@centos7 testdir]# repquota -v /testdir/
    *** Report for user quotas on device /dev/sdb4
    Block grace time: 7days; Inode grace time: 7days
                            Block limits                File limits
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    root      --      20       0       0              2     0     0       
    liubei    +- 3072004 2097152 3145728  6days       1    10    15       
    zhangfei  --       0 2097152 4194304              0    10    15       
    guanyu    --       0 3145728 4194304              0    10    15       
    
    Statistics:
    Total blocks: 7
    Data blocks: 1
    Entries: 4
    
  9. 使用warnquota向已经超过软限制的用户发邮件,邮件的内容可在warnquota的配置文件中定制

    [root@centos7 Packages]# warnquota
    [root@centos7 Packages]# su - liubei
    Last login: Thu Jun  7 22:33:19 CST 2018 on pts/0
    [liubei@centos7 ~]$ mail
    Heirloom Mail version 12.5 7/5/10.  Type ? for help.
    "/var/spool/mail/liubei": 2 messages 2 new
    >N  1 root@example.com      Thu Jun  7 22:56  29/1030  "NOTE: You are exceeding your allocat"
     N  2 root@example.com      Thu Jun  7 22:56  29/1030  "NOTE: You are exceeding your allocat"
    &
    

RAID

概念

就是把多个硬盘组合起来,成为一个硬盘阵列组,操作系统会把他当成是一个硬盘,其性能能够达到甚至超过过单个昂贵容量大的硬盘。RAID提供了多种硬盘组合的方式,相比当个硬盘来说,提高了硬盘的I/O能力。多个磁盘之间相互冗余,提供了耐用性。

实现模式

软件磁盘阵列,由CPU处理和协调一个RAID里面各个硬盘的作业,这样就会给CPU带来较多的运算压力,分为3种:(虽然软RAID实现的有多种,但是在生产环境还是不建议使用的 )

硬件磁盘阵列,在RAID卡上内置了CPU处理器,这样就不占用服务器的CPU了。一般硬件磁盘阵列都会有备份的电源模块和NVRAM(非易失性内存),当系统断掉后,备份电源开始供电,将硬盘读写的日志保存在内存中,当系统恢复,备份电源关闭供电,再在NVRAM读取日志数据,继续完成上次断电前没有完成的作业。

RAID 0

RAID 0

也称条带卷(striping)。在RAID0中,数据会被切成片,按一定顺序会被写到所有的磁盘里面,优缺点:

  1. 速度快,写和读的能力得到了提高
  2. RAID0没有冗余的能力,一旦一块磁盘出现了故障,则所有的数据都将不会恢复
  3. RAID0需要N块磁盘才能实现(N>=2)
  4. 能够存储数据的大小为N*min(S1,S2,S3,S4….)

RAID 1

RAID 1

也称镜像化,在RAID1中,数据会被复制成多份,存储在多个磁盘上,优缺点:

  1. 冗余性和数据的可靠性最高,只要不是磁盘同时损坏了,一般都不会带来数据丢失的问题
  2. RAID1的容量取决容量最小的那个磁盘,写入速度也是取决于最小的那个磁盘,较大的磁盘的剩余空间可以分区使用,不会造成浪费
  3. RAID1的读取速度理论上来说是磁盘个数的倍数
  4. RAID1需要N块磁盘才能实现(N>=2)
  5. 能够存储数据的大小为min(S1,S2,S3…)

RAID 5

RAID 5

数据被条带化存储到了磁盘上,并且每个磁盘上都能够存储奇偶检验值,其读写速度和RAID0差不多,可能写的时候要慢一点,毕竟要计算奇偶检验,这样,即使坏掉一块磁盘,只需要更换上好的磁盘,RAID会利用剩下奇偶检验去重建磁盘上的数据,优缺点:

  1. 较高的容错能力;
  2. 读写速度快;
  3. RAID5需要N块磁盘(N>=3);
  4. 能够存储数据的大小为(N-1)*min(S1,S2,S3,S4….)

RAID 10

RAID 10

RAID10和RAID01在读写速度上没有什么太大的差别,RAID01可靠性较低,这里就不在敖述,但是RAID10的数据安全性比较高,若下图左边那组RAID1中磁盘损坏了一个,另外一个也能用,右边那组RAID1再损坏一个数据也是恢复的,除非一组RAID1中的磁盘都坏掉了,优缺点:

  1. 较高的容错能力
  2. RAID10需要N个磁盘(N>=4)

RAID 50

RAID 50

RAID 50是RAID5和RAID0的组合,先做RAID5,再做RAID0,RAID 5至少需要3颗硬盘,因此要以多组RAID 5构成RAID 50,至少需要6颗硬盘,在底层的任意一组或者多组的RAID5中出现了一个磁盘的损坏是可以接受的,但是若出现了2个或者以上的磁盘损坏,整个RAID50就会损坏,优缺点:

  1. 较高的容错能力
  2. RAID10需要N个磁盘(N>=6)

mdadm

模式化工具,用于实现软RAID,常用选项:

  • -C:创建
    • -n #:使用#个块设备来创建此RAID
    • -l #:指明要创建的RAID的级别
    • -a yes/no:自动创建目标RAID设备的设备文件
    • -c CHUNK_SIZE:指明块大小
    • -x #:指明空闲盘的个数
  • -D:显示raid的详细信息
  • -f:标记指定磁盘为损坏
  • -a:添加磁盘
  • -r:移除磁盘
  • cat /proc/mdstat:观察md的状态

软RAID

  1. 创建RAID10

    [root@centos7 ~]# mdadm -C /dev/md1 -a yes -l 10 -n 4 /dev/sda{6,7,8,9}
    
  2. 给RAID添加新成员

    [root@centos7 ~]# mdadm –G /dev/md0 –n 3  -a /dev/sda10
    
  3. 删除RAID:先卸载,再停掉,最后清空每个成员的superblock

    [root@centos7 ~]# mdadm -S /dev/mdX
    [root@centos7 ~]# mdadm --zero-superblock /dev/sdX /dev/sdY ……
    
  4. 模拟损坏

    [root@centos7 ~]# mdadm /dev/md0 -f /dev/sda6
    
  5. 模拟移除

    [root@centos7 ~]# mdadm /dev/md0 -r /dev/sda10
    
  6. 模拟增加

    [root@centos7 ~]# mdadm /dev/md0 -a /dev/sda10
    
  7. 保存指定raid状态

    [root@centos7 ~]# mdadm -D -s /dev/md0 > /etc/mdadm.conf
    
  8. 保存当前所有RAID状态

    [root@centos7 ~]# mdadm -D -s > /etc/mdadm.conf
    
  9. 共享热备盘(没啥用,企业也不差钱)

    1. 编辑mdadm.conf

      ARRAY /dev/md1 metadata=1.2 name=instructor.magedu.com:1 UUID=eb6fbe24:2449dde5:da515f42:48694ac4 spar
      e-group=magedisk
      ARRAY /dev/md5 metadata=1.2 spares=1 name=instructor.magedu.com:5 UUID=19dea50d:2cecbdbf:5891cb66:463e
      6c2c  spare-group=magedisk
      MAILADDR root
      
    2. 启动服务

      centos6:service mdmonitor restart
      centos7:systemctl restart mdmonitor
      

练习

  1. 创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录

    [root@centos6 ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sda{6,7} -x 1 /dev/sda8
    [root@centos6 ~]# mkfs.ext4 /dev/md1
    [root@centos6 ~]# fdisk /dev/md1
    [root@centos6 ~]# blkid /dev/md1
    [root@centos6 ~]# echo "UUID=cf3c163b-74a4-4616-a263-058395ad7f8a   /backup ext4 deflaults 0 0" >> /etc/fstab
    
  2. 创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录

    [root@centos6 ~]# mdadm -C /dev/md5 -a yes -l 5 -c 256k -n 3 /dev/sda{9,10,11}
    [root@centos6 ~]# mkfs.ext4 /dev/md5
    [root@centos6 ~]# fdisk /dev/md5
    [root@centos6 ~]# blkid /dev/md5
    [root@centos6 ~]# echo "UUID=cf3c163b-74a4-4616-a263-058395ad7f8a   /mydata ext4 deflaults 0 0" >> /etc/fstab
    

LVM

概念

LVM.png

pv管理工具

pvcreate /dev/DEVICE ...:创建pv

pvs/pvdisplay:显示简要或详细pv信息

vg管理工具

vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath:创建vg

vgs/vgdisplay:显示简要或详细vg信息

vgextend/vgreduce:vg扩增或减少

vgremove:删除vg,主要要先做pvmove

lv管理工具

lvcreate -L #[mMgGtT] -n NAME VolumeGroup:创建lv
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg

lvs/lvdisplay:显示简要或详细lv信息

lvremove /dev/VG_NAME/LV_NAME:删除逻辑卷

重设文件系统大小

fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f][-F] [-M][-P][-p] device [new_size]

创建逻辑卷

  1. 创建pv

    [root@centos7 ~]# pvcreate /dev/sda{6..9}
    
  1. 创建vg

    [root@centos7 ~]# vgcreate vgfanjie /dev/sda{6..9}
    
  2. 创建lv

    [root@centos7 ~]# lvcreate -l 50%VG -n lvfanjie vgfanjie
    [root@centos7 ~]# lvcreate -L 1.99G -n lvfanjie vgfanjie
    
  3. 格式化并创建文件系统

    [root@centos7 ~]# mkfs.ext4 /dev/vgfanjie/lvfanjie
    
  4. 挂载到指定目录

    [root@centos7 ~]# mount /dev/vgfanjie/lvfanjie /app
    

扩容逻辑卷

卷组可以提供足够空间,那么直接进行扩容

  1. ext文件系统

    # 先扩展逻辑卷,再扩展文件系统
    [root@centos7 ~]# lvextend -L +1G /dev/vgfanjie/lvfanjie
    [root@centos7 ~]# resize2fs /dev/vgfanjie/lvfanjie
    
    # 直接一步到位
    [root@centos7 ~]# lvextend -L +1G /dev/vgfanjie/lvfanjie -r
    
  2. xfs文件系统

    # 先扩展逻辑卷,再扩展文件系统
    [root@centos7 ~]# lvextend -L +1G /dev/vgfanjie/lvxfs
    [root@centos7 ~]# xfs_growfs /dev/vgfanjie/lvxfs
    
    # 直接一步到位
    [root@centos7 ~]# lvextend -L +1G /dev/vgfanjie/lvxfs -r
    

卷组无法提供足够空间,那么要先扩容vg,在依次扩容

  1. 扩容vg

    [root@centos7 app]# pvcreate /dev/sda10
    [root@centos7 app]# vgextend vgfanjie /dev/sda10
    
  2. 扩容lv

    [root@centos7 app]# lvextend -L +1G /dev/vgfanjie/lvfanjie -r
    

缩减逻辑卷

  1. 卸载逻辑卷

    [root@centos7 ~]# umount /dev/vgfanjie/lvfanjie
    
  2. 扫描逻辑卷

    [root@centos7 ~]# e2fsck -f /dev/vgfanjie/lvfanjie 
    
  3. 缩减文件系统

    [root@centos7 ~]# resize2fs /dev/vgfanjie/lvfanjie 2G
    
  4. 缩减逻辑卷

    [root@centos7 ~]# lvreduce -L 2G /dev/vgfanjie/lvfanjie
    

跨主机迁移卷组

  1. 因为vg占用的有可能只是某个硬盘的一个分区,直接拆卸这些磁盘,会导致错误,因此最好将所有数据都移动到一块独立的物理卷上,如果卷组当前没有满足条件的物理卷,那就直接新增一块硬盘,移到此盘上

    [root@centos7 ~]# pvmove /dev/md5 /dev/sdk
    
  2. 将源卷组设置为非激活

    [root@centos7 ~]# vgchange -an vgfanjie
    
  3. 移除不需要拆卸的pv

    [root@centos7 ~]# vgreduce vgfanjie /dev/md1 /dev/md5 /dev/sdi /dev/sdj
    
  4. 将源卷组设置为export状态,并拆下指定硬盘,装在欲迁移的主机上

    [root@centos7 ~]# vgexport vgfanjie
    
  5. 把vgmage设置为import

    [root@centos7 ~]# vgimport vgfanjie
    
  6. 把卷组设置为激活

    [root@centos7 ~]# lvchange -ay vgfanjie
    
  7. 挂载

    [root@centos7 ~]# mount /dev/vgfanjie/lvfanjie /app/ext4
    

LVM快照

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

逻辑卷快照

为现有逻辑卷创建快照,-l选项指定pe数量

[root@centos7 ~]# lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
[root@centos7 ~]# lvcreate -L 1G -s -n data-snapshot -p r /dev/vg0/data

挂载快照

[root@centos7 ~]# mount -o ro/dev/vg0/data-snapshot /mnt/snap

恢复快照,注意要先卸载

[root@centos7 ~]# umount/dev/vg0/data;umount/dev/vg0/data-snapshot
[root@centos7 ~]# lvconvert--merge /dev/vg0/data-snapshot

删除快照,注意也要先卸载

[root@centos7 ~]# umount/mnt/databackup;lvremove/dev/vg0/databackup

练习

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

    [root@centos7 ~]# vgcreate -s 16M testvg /dev/sda11 /dev/sda12
    [root@centos7 ~]# lvcreate -L 5G -n testlv testvg
    [root@centos7 ~]# [root@centos7 ~]# mkfs.ext4 /dev/testvg/testlv;mount /dev/testvg/testlv /users
    
  2. 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录

    [root@centos7 ~]# useradd -d /users/archlinux archlinux
    [archlinux@centos7 ~]$ cp -a /etc/pam.d/ /users/archlinux/
    
  3. 扩展testlv至7G,要求archlinux用户的文件不能丢失

    [root@centos7 ~]# lvextend -L 7G /dev/testvg/testlv -r
    
  4. 收缩testlv至3G,要求archlinux用户的文件不能丢失

    [root@centos7 ~]# umount /users/
    [root@centos7 ~]# e2fsck -f /dev/testvg/testlv
    [root@centos7 ~]# resize2fs /dev/testvg/testlv 3G
    [root@centos7 ~]# lvreduce -L 3G /dev/testvg/testlv
    [root@centos7 ~]# mount /dev/testvg/testlv /users/
    
  5. 对testlv创建快照,并尝试基于快照备份数据,验证快照的功能

    [root@centos7 ~]# lvcreate -l 64 -s -n testlv-snapshot -p r /dev/testvg/testlv
    [root@centos7 ~]# cp /etc/* /users/
    [root@centos7 ~]# umount /users/
    [root@centos7 ~]# lvconvert --merge /dev/testvg/testlv-snapshot
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342