十五、高级文件系统管理
· 配置配额系统
· 综述
· 在内核中执行
· 以文件系统为单位启用
· 对不同组或者用户的策略不同
· 根据块或者节点进行限制
· 执行软限制(soft limit)
· 硬限制(hard limit)
· 初始化
· 分区挂载选项:usrquota、grpquota
· 初始化数据库:quotacheck
· 执行
· 开启或者取消配额:quotaon、quotaoff
· quotacheck -cugm /app 创建用户、组的quota数据文件,位于挂载点的根目录
· quotaon /app 激活quota
· 直接编辑配额:edquota alice 交互式,调用vim编辑
· setquota guanyu 10M 20M 0 0 /app/ 非交互式
· 在shell中直接编辑
· setquota $USERNAME 4096 5120 40 50 /foo
· <block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit>
· 定义原始标准用户
· edquota -p user1 user2 以user1的quota为模版设置user2
· 报告
· 用户调查:quota username
· 配额概述:repquota /mountpoint
· 其它工具:warnquota
· 显示设置过quota的所有用户信息
· repquota -v /app
· RAID
· 提高IO能力
· 磁盘并行读写
· 提高耐用性
· 磁盘冗余来实现
· RAID实现的方式
· 外接式磁盘阵列:通过扩展卡提供适配能力
· 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
· 软件RAID:通过OS实现
· RAID级别
· RAID-0:条带卷,strip
· 读、写性能提升;
· 可用空间:N*min(S1,S2,...)
· 无容错能力
· 最少磁盘数:2, 2
· RAID-1: 镜像卷,mirror
· 读性能提升、写性能略有下降;
· 可用空间:1*min(S1,S2,...)
· 有冗余能力
· 最少磁盘数:2, 2N
· RAID-4
· 多块数据盘异或运算值存于专用校验盘
· RAID-5
· 读、写性能提升
· 可用空间:(N-1)*min(S1,S2,...)
· 有容错能力:允许最多1块磁盘损坏
· 最少磁盘数:3, 3+
· RAID-6
· 读、写性能提升
· 可用空间:(N-2)*min(S1,S2,...)
· 有容错能力:允许最多2块磁盘损坏
· 最少磁盘数:4, 4+
· RAID-10
· 读、写性能提升
· 可用空间:N*min(S1,S2,...)/2
· 有容错能力:每组镜像最多只能坏一块
· 最少磁盘数:4, 4+
· RAID-50
· 多块磁盘先实现RAID5,再组合成RAID0
· JBOD:Just a Bunch Of Disks
· 功能:将多块磁盘的空间合并一个大的连续空间使用
· 可用空间:sum(S1,S2,...)
· RAID7
· 可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式
· 软RAID
· mdadm:为软RAID提供管理界面
· 为空余磁盘添加冗余
· 结合内核中的md(multi devices)
· RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
· 软件RAID的实现
· mdadm:模式化的工具
· 命令的语法格式
· mdadm [mode] <raiddevice> [options] <component-devices>
· 模式[mode]
· 创建:-C
· -n #: 使用#个块设备来创建此RAID
· -l #:指明要创建的RAID的级别
· -a {yes|no}:自动创建目标RAID设备的设备文件
· -c CHUNK_SIZE: 指明块大小
· -x #: 指明空闲盘的个数
· 显示raid的详细信息:-D
· mdadm-D /dev/md#
· 装配: -A
· 监控: -F
· 管理:-f, -r, -a
· -f: 标记指定磁盘为损坏
· -a: 添加磁盘
· -r: 移除磁盘
· <raiddevice>: /dev/md#
· <component-devices>: 任意块设备
· 观察md的状态
· cat /proc/mdstat
· 软RAID配置示例
·
· 使用mdadm创建并定义RAID设备
· mdadm -C /dev/md0 -a yes -l5 -n3 -x1 /dev/sd{b,c,d}1
· 分区fdisk /dev/md0 非必需
· 格式化mkfs.ext4 /dev/md0
· 使用mdadm检查RAID设备的状况
· mdadm --detail|D /dev/md0
· 增加新的成员
· mdadm –G /dev/md0 –n4 -a /dev/sdf1
· 软RAID测试和修复
· 模拟磁盘故障
· mdadm /dev/md0 -f /dev/sda1
· 移除磁盘
· mdadm /dev/md0 –r /dev/sda1
· 从软件RAID磁盘修复磁盘故障
· 替换出故障的磁盘然后开机
· 在备用驱动器上重建分区
· mdadm /dev/md0 -a /dev/sda1(替换)
· mdadm、/proc/mdstat及系统日志信息
· 软RAID管理
· 生成配置文件:mdadm –D –s >> /etc/mdadm.conf
· 停止设备:mdadm –S /dev/md0
· 激活设备:mdadm –A –s /dev/md0 激活
· 强制启动:mdadm –R /dev/md0
· 删除raid信息:mdadm --zero-superblock /dev/sdb1
· 软RAID栗子
· 在VMwar虚拟机中创建RAID
· 1.在VMware当中为该主机增加虚拟硬盘
· 2.echo '- - -' > /sys/class/scsi_host/host0/scan 使新增的硬盘立刻生效
· 3.创建raid
· mdadm -C /dev/md0 -a yes -l0 -n2 /dev/sd{c,d}
· dadm -C /dev/md1 -a yes -l1 -n2 /dev/sd{e,f} -x1 /dev/sdg
· mdadm -C /dev/md2 -a yes -l5 -n3 /dev/sd{h,i,j}
· mdadm -C /dev/md1 -a yes -l10 -n4 /dev/sd{e..h}
· 4.分区fdisk /dev/md0 非必需
· 5.格式化mkfs.ext4 /dev/md0
· 5.挂载
· 逻辑卷管理器(LVM) Logical Volume Manager
· 允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
· 允许在多个物理设备间重新组织文件系统
· 将设备指定为物理卷
· 用一个或者多个物理卷来创建一个卷组
· 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
· 在物理卷上创建的逻辑卷是由物理区域(PE)组成
· 可以在逻辑卷上创建文件系统
· dm: device mapper:将一个或多个底层块设备组织成一个逻辑设备的模块
· 设备名:/dev/dm-#
· 软链接
· /dev/mapper/VG_NAME-LV_NAME
· /dev/mapper/vol0-root
· /dev/VG_NAME/LV_NAME
· /dev/vol0/root
· LVM可以弹性的更改LVM的容量
· 通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量
· pv管理工具
· 创建pv
· pvcreate /dev/DEVICE
· pvcreate /dev/md1 /dev/md5(可使用raid)
· 显示pv信息
· pvs:简要pv信息显示
· pvdisplay
· 删除:pvremove
· vg管理工具
· 创建卷组
· vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
· vgcreate vgmage /dev/md1 /dev/md5 /dev/sdi
· 显示卷组
· vgs
· vgdisplay
· 管理卷组
· vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
· vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
· 删除卷组
· vgremove
· lv管理工具
· 创建逻辑卷
· lvcreate -L #[mMgGtT] -n NAME VolumeGroup
· lvcreate -l 60%VG -n mylv testvg
· lvcreate -l 100%FREE -n yourlv testvg
· lvcreate -L 38M -n lvlinux31 vgmage
· lvcreate -l 20 -n lvpython31 vgmage
· 显示逻辑卷
· lvs
· Lvdisplay
· 删除逻辑卷
· lvremove /dev/VG_NAME/LV_NAME
· 重设文件系统大小
· fsadm [options] resize device [new_size[BKMGTEP]]
· resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
· 创建逻辑卷示例
· 创建物理卷
· pvcreate /dev/sda3
· 为卷组分配物理卷
· vgcreate vg0 /dev/sda3
· 从卷组创建逻辑卷
· lvcreate -L 256M -n data vg0
· 格式化并挂载
· mke2fs -j /dev/vg0/data
· mount /dev/vg0/data /mnt/data
· 扩展和缩减逻辑卷
· 扩展逻辑卷
· lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
· resize2fs /dev/VG_NAME/LV_NAME
· lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
· 逻辑卷的在线扩展
· 情况1:卷组大小足够扩展
· 方法一
· lvextend -L +1G /dev/vgmage/lvlinux31
· resize2fs /dev/vgmage/lvlinux31
· 方法二
· lvextend -L 1.5G /dev/vgmage/lvlinux31 -r
· 情况2:卷组大小不够扩展
· pvcreate /dev/sdj
· vgextend vgmage /dev/sdj
· lvextend -L +3G -r /dev/vgmage/lvlinux31
· XFS
· lvextend -r -L 1G /dev/vgmage/lvpython31
· xfs_growfs /dev/vgmage/lvpython31
· 缩减逻辑卷
· umount /dev/VG_NAME/LV_NAME
· e2fsck -f /dev/VG_NAME/LV_NAME(扫描空闲PE)
· resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
· lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
· mount
· 操作流程
· 1.卸载
· 2.扫描
· 3.减小文件系统大小
· 4.减小逻辑卷大小
· 栗子
· umount /app/data
· e2fsck -f /dev/vgmage/lvlinux31
· resize2fs /dev/vgmage/lvlinux31 50M
· lvreduce -L 50M /dev/vgmage/lvlinux31
· 如果顺序(先减lv再减vg以保证lv<=vg)反了,先执行了减逻辑卷,则扩展回去,再重新扫描
· lvextend -L 500M /dev/vg_mage/lv_home
· e2fsck -f /dev/vg_mage/lv_home
· resize2fs /dev/vg_mage/lv_home 200M
· lvreduce -L 200M /dev/vg_mage/lv_home
· 跨主机迁移卷组
· 源计算机上
· – 1 在旧系统中,umount所有卷组上的逻辑
· – 2 vgchange –a n vg0
· lvdisplay
· – 3 vgexport vg0
· pvscan
· vgdisplay
· 拆下旧硬盘
· 在目标计算机上
· – 4 在新系统中安装旧硬盘,并vgimport vg0.
· – 5 vgchange –ay vg0
· – 6 mount所有卷组上的逻辑卷
· 1.增加一个独立文件的虚拟磁盘到源主机
· 2.将该磁盘做为PV,扩展进卷组
· pvcreate /dev/sdk
· vgextend vgmage /dev/sdk
· 3.将所有数据都移动到将要拆卸的物理卷上
· pvmove /dev/md5 /dev/sdk
· 4.将源卷组设置为非激活
· vgchange -an vgmage
· 5.如果卷组中除了要拆卸的硬盘外还有其他的PV,则进行lvreduce,如没有,直接第6步
· vgreduce vgmage /dev/md1 /dev/md5 /dev/sdi /dev/sdj
· 6.将源卷组设置为export状态
· vgexport vgmage
· 7.拔硬盘,并加到目标主机
· 8.把vgmage设置为import
· vgimport vgmage
· 9.把卷组设置为激活
· lvchange -ay vgmage
· 10.挂载
· 逻辑卷管理器快照
· 快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝
· 对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择
· 快照只有在它们和原来的逻辑卷不同时才会消耗空间
· – 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
· – 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。
· – 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
· – 建立快照的卷大小只需要原始逻辑卷的15%~20%就够了,也可以使用lvextend放大快照
· 快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享
· 由于快照区与原本的LV共用很多PE的区块,因此快照去与被快照的LV必须在同一个VG.系统恢复的时候的文件大小不能高于快照区的实际容量
· 使用LVM快照
· 为现有逻辑卷创建快照
· lvcreate -l 64 -s -n data-snapshot -pr /dev/vg0/data
· 挂载快照
· mkdir -p /mnt/snap
· mount -o ro /dev/vg0/data-snapshot /mnt/snap
· 恢复快照
· umount /dev/vg0/data-snapshot
· umount /dev/vg0/data
· lvconvert --merge /dev/vg0/data-snapshot
· 删除快照
· umount /mnt/databackup
· lvremove /dev/vg0/databackup