磁盘配额
基于用户或者组,限制用户的使用空间以及文件个数
限制使用空间
mount -o usrquota /dev/sdb(磁盘) /mnt (挂载点)开启用户配额
edquota -u robin 对用robin配额
Disk quotas for user robin (uid 1007):
Filesystem blocks soft hard inodes soft hard
/dev/sdb 0 0 102400 0 0 20
/dev/sdb 0 0 102400 0 0 20
blocks 表示用户已使用空间(不能修改)
soft 空间软限
hard 空间硬限
inodes 表示用已创建文件个数(不能修改)
soft 个数软限
hard 个数硬限
[root@localhost ~]# quotaon /mnt/ 激活配额
[root@localhost ~]# chmod o=rwx /mnt 测试权限
测试空间限制
[robin@localhost mnt]$ dd if=/dev/zero of=data bs=101M count=1
dd: 写入"data" 出错: 超出磁盘限额
[robin@localhost mnt]$ ll -h
-rw-r--r-- 1 robin devel 100M 12月 30 15:19 data
测试文件个数
[robin@localhost mnt]$ touch abc{1..21}.txt
touch: 无法创建"abc21.txt": 超出磁盘限额
组配额
[root@localhost mnt]# groupadd devel
[root@localhost mnt]# useradd -g devel robin
[root@localhost mnt]# useradd -g devel zorro
[root@localhost ~]# mount -o grpquota /dev/sdb /mnt
[root@localhost ~]# edquota -g devel
Disk quotas for group devel (gid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sdb 0 0 102400 0 0 20
[root@localhost ~]# quotaon /mnt/
[root@localhost ~]# quotaoff /mn
[robin@localhost mnt]$ dd if=/dev/zero of=/mnt/robin1 bs=110M count=1
dd: 写入"/mnt/robin1" 出错: 超出磁盘限额
[robin@localhost mnt]$ ll -h
-rw-r--r-- 1 robin devel 100M 12月 30 16:27 robin1
[root@localhost mnt]# su - zorro
[zorro@localhost ~]$ dd if=/dev/zero of=/mnt/zorro1 bs=10M count=1
[zorro@localhost ~]$ ll -h /mnt/
-rw-r--r-- 1 robin devel 100M 12月 30 16:27 robin1
-rw-r--r-- 1 zorro devel 0 12月 30 16:28 zorro1
软限制:
[root@localhost ~]# edquota -t 查看宽限时间
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sdb 10seconds 10seconds
[root@localhost ~]# edquota -u robin
Disk quotas for user robin (uid 1007):
Filesystem blocks soft hard inodes soft hard
/dev/sdb 0 51200 102400 0 10 20
测试
[robin@localhost ~]$ dd if=/dev/zero of=/mnt/robin1 bs=60M count=1
[root@localhost ~]# repquota -a
*** Report for user quotas on device /dev/sdb
Block grace time: 00:00; Inode grace time: 00:00
Block limits File limits
User used soft hard grace used soft hard grace
root -- 0 0 0 3 0 0
robin +- 61440 51200 102400 none 1 10 20
grace=none后
[robin@localhost ~]$ dd if=/dev/zero of=/mnt/robin2 bs=10M count=1
dd: 打开"/mnt/robin2" 失败: 超出磁盘限额
恢复限制
[robin@localhost ~]$ rm -rf /mnt/robin1
[robin@localhost ~]$ dd if=/dev/zero of=/mnt/robin2 bs=110M count=1
dd: 写入"/mnt/robin2" 出错: 超出磁盘限额
[robin@localhost ~]$ ll -h /mnt/
-rw-r--r-- 1 robin devel 100M 12月 30 16:44 robin2
GPT分区
GPT: global parttion table 全局分区表
1.磁盘大于2TB
2.分区超过14个可用分区
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
新的磁盘标签类型? GPT
警告: 正在使用 /dev/sdb 上的分区。
忽略/Ignore/放弃/Cancel? i 忽略已有分区表
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you
want to continue? 确认后移除现有数据
是/Yes/否/No? yes
(parted) mkpart
分区名称? []? sdb1 分区名字
文件系统类型? [ext2]? xfs 将使用文件系统
起始点? 0 分区起始位置
结束点? 500M 分区结束位置
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? i 确认
(parted) p 查看分区信息
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 17.4kB 500MB 500MB sdb1
(parted) quit 退出分区命令
删除分区
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) rm 1 删除分区编号
(parted) quit 退出命令
XFS文件系统
ext4文件系统
mkfs.ext4 /dev/sdb1
超级块: block总数 inode总数 free block空闲块 free inode空闲inode block size 块大小 block per group 一个组内有8192块
若干块组:
块组:
[root@robin ~]# dumpe2fs /dev/sda1 查看块组与超级块信息
主superblock 备superblock
块描述:
保留块
block bitmap 和 inode bitmap
inode表: 一个inode占用那些数据块
XFS文件系统的配置
[root@localhost ~]# xfs_info /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=30517 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=122066, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =external bsize=4096 blocks=122112, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
基本上XFS就是一个日志式文件系统,之所以现在把它当预设的文件系统 是因为它原本就是被开发用于高容量磁盘以及高性能文件系统之用的,相当适合于现在的环境。此外,几乎所有EXT4文件系统具有的功能,xfs都具备。
xfs文件系统在资料的分布上,主要规划为三个部分:资料区(data section),文件系统活动登录区(日志区)(log section),实时运作(realtime section)。具体如下:
1资料区(data section)
这个区域基本上与之前说的EXT家族一样,包括inode、block、superblock等数据都放在这个区块。这个数据区与ext家族的block group类似,分多个储存区群组(allocation groups)。每个储存区群组中都包含了整个文件系统的superblock,剩余空间的管理机制,inode的分配与追踪。此外,inode,block都是系统需要用到时才会动态配置产生,所以格式化动作较EXT家族快了很多。
其实,只需要把这个数据区的储存区群组当成ext的block群组就可以了,只是inode与block是动态产生的,并非一开始于格式化就完成配置的。
2.文件系统活动日志区(log section)
日志和数据分离
这个区域主要被用来记录文件系统的变化,具体原理和之前说的相同。
因为系统所有的动作都会在这个区域做个记录所以这个区域的磁盘活动是相当频繁的,xfs的设计在这里有一个巧妙之处,你可以指定外部的磁盘来作为xfs文件系统的日志管理区块。例如,你可以将SSD磁盘作为xfs的文件系统活动日志区,这样,当系统需要进行任何活动时,就可以更迅速的工作。
3.实时运作区(realtime section)
当有文件要被建立时,xfs会在这个区段里找一个到数个extent区块,将文件放置在这个区块中,等到分配完毕后,再写入到data section的inode和block中。这个extent区块的大小得要在格式化的时候就先指定,最小值为4K最大可到1G。一般非磁盘阵列的磁盘默认为64K容量,而具有类似磁盘阵列的stripe情况下,则建议extent设定为与stripe一样大较佳。这个extent最好不要乱动,因为可能会影响到实体磁盘的效能。
下面解释一下以上输出的信息:
isize : inode的容量,这里为256bytes。
agcount:储存区群组的个数,这里有4个。
agsize : 每个储存区群组里的block个数,这里为32000个。
sectsz:逻辑扇区(sector)的容量,这里为512bytes。
bsize:每个block的容量为4 k。
blocks:共有128000个block在这个文件系统内。
sunit,swidth:与磁盘阵列的stripe相关性较高,这里暂时不说明。
internal,指这个登录区的位置在文件系统内,而不是外部系统的意思,占用了4K * 853空间。
第9行:realtime区域,extent容量为4k,none=>不过目前没有使用。
xfs局限性
1.XFS是一个单节点文件系统,如果需要多节点同时访问需要考虑使用GFS2文件系统
2.XFS支持16EB文件系统,而redhat仅支持100TB文件系统
3.XFS较少的适用在单线程元数据密集的工作负荷,在单线程创建删除巨大数量的小文件的工作负荷下,其他文件系统(ext4)表现的会更好一些
4.xfs文件在操作元数据时可能会使用2倍的CPU资源,在CPU资源有限制的情况下可以研究使用不同文件系统
5.xfs更多适用的特大文件的系统快速存储,ext4在小文件的系统或系统存储带宽有限的情况下表现的更好
xfs文件系统磁盘配额
[root@localhost ~]# mount -o usrquota,grpquota /dev/sdb1 /mnt/ #开启配额 user group
[root@localhost ~]# xfs_quota -x -c 'report' /mnt/ # 报告配额状态
User quota on /mnt (/dev/sdb1)
Blocks
User ID Used Soft Hard Warn/Grace
root 0 0 0 00 [--------]
Group quota on /mnt (/dev/sdb1)
Blocks
Group ID Used Soft Hard Warn/Grace
root 0 0 0 00 [--------]
[root@localhost ~]# xfs_quota -x -c 'limit bsoft=50M bhard=100M robin' /mnt 指定配额
[root@localhost ~]# xfs_quota -x -c 'report' /mnt/ 查看配额
User quota on /mnt (/dev/sdb1)
Blocks
User ID Used Soft Hard Warn/Grace
root 0 0 0 00 [--------]
robin 0 51200 102400 00 [--------]
Group quota on /mnt (/dev/sdb1)
Blocks
Group ID Used Soft Hard Warn/Grace
root 0 0 0 00 [--------]
prject配额(对目录配额): 该目录下所有文件大小总和不超过设定大小
mkdir /quota #创建配额目录
mount -o prjquota /dev/sda8 /quota #挂载设备并开启支持目录配额的选项 prjquota和usrquota,grpquota冲突
mkdir /quota/test #创建测试目录
mount
/dev/sda8 on /quota type xfs (rw,relatime,attr2,inode64,prjquota) #保证参数开启
[root@localhost ~]# echo 50:/quota/test >> /etc/projects #[配置project 的id 和 对应的目录
[root@localhost ~]# echo test:50 >> /etc/projid #项目名称和对应的id
[root@localhost ~]# cat /etc/projects
50:/quota/test
[root@localhost ~]# cat /etc/projid
test:50
xfs_quota -x -c 'project -s -p /quota/test 50' #项目名称
xfs_quota -x -c 'limit -p bhard=100M 50' /quota #限制目录大小
查询
xfs_quota -x -c 'report' /quota #查询
[root@localhost ~]# yum install xfsprogs -y xfs文件系统得工具(命令)
日志和数据分离
使用一个块硬盘不同得分区做数据和日志分离没有意义
不分离
[root@localhost ~]# mkfs.xfs /dev/sdb1
分离
[root@localhost ~]# mkfs.xfs -f -l logdev=/dev/sdb2 /dev/sdb1
[root@localhost ~]# mount -t xfs -o logdev=/dev/sdb2 /dev/sdb1 /mnt
修复文件系统
[root@localhost ~]# umount /mnt
[root@localhost ~]# xfs_repair -l /dev/sdb2 /dev/sdb1
磁盘碎片整理
[root@localhost ~]# mkfs.xfs -l logdev=/dev/sdb2 /dev/sdb1
[root@localhost ~]# mount -o logdev=/dev/sdb2 /dev/sdb1 /mnt
[root@localhost ~]# for FILE in file{0..3} ; do dd if=/dev/zero of=/xfs/${FILE} bs=4M count=100 & done
[root@localhost ~]# filefrag /mnt/file* #整理磁盘碎片
xfs_db -c frag -r /dev/vdb1 磁盘碎片当前状态
[root@localhost ~]# xfs_fsr -v #查看磁盘碎片状态
差异备份只以完全备份为基础备份变更数据;增量备份以上一次增量备份为基础备份变更数据。
备份
[root@localhost ~]# mount /dev/sdb1 /mnt/
[root@localhost ~]# touch /mnt/abc{1..3}.txt
[root@node6 ~]# yum install xfsdump #安装备份工具
[root@localhost ~]# xfsdump -L full -M dumpfile -l 0 - /mnt | xz > /tmp/mnt-$(date +%y-%m-%d).0.xz#完全备份
-L label
-M 备份
-l 级别(level)
[root@node6 ~]# xfsdump -I
file system 0:
fs id: 467c218c-22b5-45bc-9b0e-cd5782be6e2e
session 0:
mount point: node6.uplooking.com:/xfs
device: node6.uplooking.com:/dev/vdb1
time: Sat Sep 14 17:39:47 2013
session label: "full"
session id: 75f91e6b-c0bc-4ad1-978b-e2ee5deb01d4
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: stdio
start: ino 131 offset 0
end: ino 135 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 1678152296
mfile start: ino 131 offset 0
mfile end: ino 135 offset 0
media label: "dumpfile"
media id: de67b2b5-db72-4555-9804-a050829b2179
xfsdump: Dump Status: SUCCESS
恢复
[root@localhost mnt]# rm -rf rm -rf /mnt/ #模拟删除
[root@localhost ~]# xzcat /tmp/mnt-23-01-03.xz | xfsrestore - /mnt #完全恢复
[root@localhost ~]# ls /mnt/
abc1.txt abc2.txt abc3.txt
增量备份
[root@localhost ~]# touch /mnt/aa.txt
[root@localhost ~]# xfsdump -L add -M dumpfile -l 1 - /mnt | xz > /tmp/mnt.$(date +%y-%m-%d).add1.xz
[root@localhost ~]# echo 111111111111 >> /mnt/aa.txt
[root@localhost ~]# xfsdump -L add -M dumpfile -l 2 - /mnt | xz > /tmp/mnt.$(date +%y-%m-%d).add2.xz
全备+增量恢复
[root@localhost mnt]# xzcat /tmp/mnt-23-01-03.xz | xfsrestore - /mnt
[root@localhost mnt]# xzcat /tmp/mnt.23-01-03.add1.xz | xfsrestore - /mnt
[root@localhost mnt]# xzcat /tmp/mnt.23-01-03.add2.xz | xfsrestore - /mnt
[root@localhost mnt]# cat /mnt/aa.txt
111111111111
差异备份
[root@localhost mnt]# touch /mnt/xx.txt
[root@localhost mnt]# echo xxxxxxx >> /mnt/xx.txt
[root@localhost mnt]# xfsdump -L cha -M dumpfile -l 1 - /mnt | xz > /tmp/xfs.$(date +%y%m%d).cha1.xz
完全备份+差异备份恢复
[root@localhost mnt]# rm -rf /mnt/*
[root@localhost mnt]# xzcat /tmp/mnt-23-01-03.xz | xfsrestore - /mnt
[root@localhost mnt]# xzcat /tmp/mnt.230103.cha1.xz | xfsrestore - /mnt/
清除备份记录
rm -rf /var/lib/xfsdump/inventory/*