文件系统管理/高级文件系统管理
2021-03-21 17:09:02 0 举报
AI智能生成
文件系统管理/高级文件系统管理 part-7
作者其他创作
大纲/内容
Linux基础知识-Part_7
文件系统管理
一、硬盘结构
1、硬盘的逻辑结构
0磁道和0扇区放的时系统的驱动程序
碳钢合金
每个扇区的大小事固定的,为512Byte。扇区也是磁盘的最小存贮单位。
机械式硬盘 133MB/s 速度慢,易损坏
硬盘的大小是使用“磁头数×柱面数×扇区数×每个扇区的大小”这样的公式来计算的。
其中磁头数(Heads)表示硬盘总共有几个磁头,也可以理解成为硬盘有几个盘面,然后乘以二;
柱面数(Cylinders)表示硬盘每一面盘片有几条磁道;
扇区数(Sectors)表示每条磁道上有几个扇区;每个扇区的大小一般是512Byte。
2、硬盘接口
IDE硬盘接口(Integrated Drive Electronics,并口,即电子集成驱动器)也称作“ATA硬盘”或“PATA硬盘”,是早期机械硬盘的主要接口,ATA133硬盘的理论速度可以达到133MB/s(此速度为理论平均值),IDE硬盘接口
SATA接口(Serial ATA,串口)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是SATA三代,理论传输速度达到600MB/s(此速度为理论平均值)
SCSI接口(Small Computer System Interface,小型计算机系统接口)广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU占用率低及支持热插拔等优点,理论传输速度达到320MB/s
PCI-E
2000MB/s
cpu分级缓存
一级缓存,二级缓存,三级缓存
内存
硬盘
二、文件系统
1. Linux文件系统的特性:
super block(超级块)
记录整个文件系统的信息,包括block与inode的总量,已经使用的inode和block的数量,未使用的inode和block的数量,block与inode的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。
dump2fs {硬盘挂载文件} 查看分组情况
date block(数据块,也称作block)
用来实际保存数据的(柜子的隔断),block的大小(1KB、2KB或4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化(制作柜子的时候,隔断大小就已经决定,不能更改,除非重新制作柜子)。每个blcok只能保存一个文件的数据,要是文件数据小于一个block块,那么这个block的剩余空间不能被其他文件是要;要是文件数据大于一个block块,则占用多个block块。Windows中磁盘碎片整理工具的原理就是把一个文件占用的多个block块尽量整理到一起,这样可以加快读写速度。
inode(i节点,柜子门上的标签)
用来记录文件的权限(r、w、x),文件的所有者和属组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的block编号。每个文件需要占用一个inode。
2. Linux常见文件系统
ext
Linux中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
ext2
是ext文件系统的升级版本,Red Hat Linux 7.2版本以前的系统默认都是ext2文件系统。于1993年发布,支持最大16TB的分区和最大2TB的文件(1TB=1024GB=1024×1024KB)
ext3
是ext2文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和最大2TB的文件
ext4
是ext3文件系统的升级版。ext4 在性能、伸缩性和可靠性方面进行了大量改进。ext4的变化可以说是翻天覆地的,比如向下兼容ext3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用barrier等。它是CentOS 6.x的默认文件系统
xfs
XFS最早针对IRIX操作系统开发,是一个高性能的日志型文件系统,能够在断电以及操作系统崩溃的情况下保证文件系统数据的一致性。它是一个64位的文件系统,后来进行开源并且移植到了Linux操作系统中,目前CentOS 7.x将XFS+LVM作为默认的文件系统。据官方所称,XFS对于大文件的读写性能较好。
swap
swap是Linux中用于交换分区的文件系统(类似于Windows中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。一般大小为内存的2倍,但是不要超过2GB。它是Linux的必需分区
NFS
NFS是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
iso9660
光盘的标准文件系统。Linux要想使用光盘,必须支持iso9660文件系统
fat
就是Windows下的fat16文件系统,在Linux中识别为fat
vfat
就是Windows下的fat32文件系统,在Linux中识别为vfat。支持最大32GB的分区和最大4GB的文件
NTFS
就是Windows下的NTFS文件系统,不过Linux默认是不能识别NTFS文件系统的,如果需要识别,则需要重新编译内核才能支持。它比fat32文件系统更加安全,速度更快,支持最大2TB的分区和最大64GB的文件
ufs
Sun公司的操作系统Solaris和SunOS所采用的文件系统
proc
Linux中基于内存的虚拟文件系统,用来管理内存存储目录/proc
sysfs
和proc一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs
tmpfs
也是一种基于内存的虚拟文件系统,不过也可以使用swap交换分区
三、常用的硬盘管理命令
1、df命令
查看硬盘占用情况
[root@localhost ~]# df –ahT#-a 显示特殊文件系统,这些文件系统几乎都是保存在内存中的。如/proc,因为是挂载在内存中,所以占用量都是0#-h 单位不再只用KB,而是换算成习惯单位#-T 多出了文件系统类型一列
ll 命令 不支持统计目录大小,只支持文件大小
统计目录时不会统计子文件的大小,只会统计文件名所只占用的block大小。是4K的倍数但是Boot分区的block默认大小是1Kb
2、du命令
查看目录的情况
[root@localhost ~]# du [选项] [目录或文件名]选项:-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量-h 使用习惯单位显示磁盘占用量,如KB,MB或GB等-s 统计总占用量,而不列出子目录和子文件的占用量
du与df的区别
du是用于统计文件大小的,统计的文件大小是准确的;df是用于统计空间大小的,统计的剩余空是准确的
两个大小不一致的原因是因为,系统产生的临时文件
lsof | grep deleted”查看被删除的文件,然后一个进程一个进程的手工kill也是可以的,
建议重启系统
3、fsck文件系统修复命令
[root@localhost ~]# fsck –y /dev/sdb1#自动修复
在系统开始时,会自动执行,不需要手动执行
作用不大
4、显示磁盘状态dumpe2fs
[root@localhost ~]# dumpe2fs /dev/sda3dumpe2fs 1.41.12 (17-May-2010)Filesystem volume name: <none> 卷标名Last mounted on: / 挂载点Filesystem UUID: c2ca6f57-b15c-43ea-bca0-f239083d8bd2 UUIDFilesystem magic number: 0xEF53Filesystem revision #: 1 (dynamic)Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isizeFilesystem flags: signed_directory_hashDefault mount options: user_xattr acl 挂载参数Filesystem state: clean 文件系统状态,正常Errors behavior: ContinueFilesystem OS type: LinuxInode count: 1826816 inode总数Block count: 7300864 块总素Reserved block count: 365043Free blocks: 6634637Free inodes: 1753533First block: 0Block size: 4096 块大小Fragment size: 4096Reserved GDT blocks: 1022Blocks per group: 32768Fragments per group: 32768Inodes per group: 8192Inode blocks per group: 512Flex block group size: 16Filesystem created: Mon Nov 12 22:30:41 2012Last mount time: Tue Apr 9 23:53:29 2013Last write time: Mon Nov 12 22:45:55 2012Mount count: 3Maximum mount count: -1Last checked: Mon Nov 12 22:30:41 2012Check interval: 0 (<none>)Lifetime writes: 3199 MBReserved blocks uid: 0 (user root)Reserved blocks gid: 0 (group root)First inode: 11Inode size: 256 inode的大小
5、查看文件的详细时间
stat 文件名 查看文件的详细时间
例如[root@localhost ~]# stat test.shFile: `test.sh'#文件名Size: 427 Blocks: 8 IO Block: 4096 regular file#文件大小 占用块 系统分区块大小Device: fd00h/64768d Inode: 23724038 Links: 1#存放文件的设备 inode号 硬链接数Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)权限 属主 属组Access: 2011-10-29 22:27:45.000000000 +0800Modify: 2011-09-14 18:02:00.000000000 +0800Change: 2011-10-25 22:21:44.000000000 +0800access 访问时间modify 数据修改时间change 状态修改时间
6、判断文件类型
file 文件名 判断文件类型
type 命令名 判断命令类型
内部命令
提示 cd is a shell builtin
说明是内部命令
外部命令
没有提示上述命令
说明是外部命令
四、fdisk命令手工分区
1.查看系统所有硬盘及分区
fdisk -l
注意fdisk只识别MBR分区表,不识别GPT分区表
2.进行磁盘分区(分区还没有分区号)
fdisk /dev/sdb
fdisk 交互指令说明
a 设置可引导标记
b 编辑 bsd 磁盘标签
c 设置 DOS 操作系统兼容标记
d 删除一个分区
l 显示已知的文件系统类型。82 为 Linux swap 分区,83 为 Linux 分区
m 显示帮助菜单
n 新建分区
o 建立空白 DOS 分区表
p 显示分区列表
q 不保存退出
s 新建空白 SUN 磁盘标签
t 改变一个分区的系统 ID
u 改变显示记录单位
v 验证分区表
w 保存退出
x 附加功能(仅专家)
流程
主分区
n---p 主----1 分区号----1 起始柱面-----分区大小+100M-----w
扩展分区
n---e 扩展---2 分区号---124 起始柱面----1024 柱面(所有剩余空间都分配给扩展分区)
逻辑分区
n---l 逻辑---不用指定分区号---124 起始柱面----+100M(指定大小)-----w
有时因为系统的分区表正忙,则需要重新启动系统之后才能使新的分区表生效。
Command (m for help): w 保存退出The partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: Device or resource busy.The kernel still uses the old table.The new table will be used at the next reboot. 要求重启动,才能格式化Syncing disks.
3 partprobe
强制重读所有分区文件,重新挂载分区文件内所有分区。这不是分区必须命令,如果没有提示重启,可以不执行,也可以重启系统
(Warning: Unable to open /dev/hdc read-write (Read-only file system). /dev/hdc has been opened read-only.光盘只读挂载,不是错误,不用紧张)如果这个命令不存在请安装 parted-2.1-18.el6.i686 这个软件包
4 格式化
建立文件系统
命令
mkfs -t ext4 /dev/sdb1mkfs -t ext4 /dev/sdb5
mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096),这些默认参数除非特殊情况,否则不需要调整,如果想要调整就需要使用 mke2fs 命令进行重新格式化,命令格式如下:
[root@localhost ~]# mke2fs [选项] 分区设备文件名选项:-t 文件系统: 指定格式化成哪个文件系统,如 ext2,ext3,ext4-b 字节: 指定 block 块的大小-i 字节: 指定“字节/inode”的比例,也就是多少个字节分配一个 inode-j: 建立带有 ext3 日志功能的文件系统-L 卷标名: 给文件系统设置卷标名,就不使用 e2label 命令设定了举个例子:[root@localhost ~]# mke2fs -t ext4 -b 2048 /dev/sdb6 #格式化分区,并指定 block 的大小为 2048
5 建立挂载点
mkdir /disk1-----------------/dev/sdb1 把 sdb1 打算挂载到/disk1 目录中
mkdir /disk5----------------/dev/sdb5
6 挂载
mount /dev/sdb1 /disk1
mount /dev/sdb5 /disk5
7 查看
mount 查看所有已经挂载的分区和光盘fdisk -l 查看系统分区df 查看分区占用百分比
8 自动挂载
修改分区自动挂载文件
vi /etc/fstab 注意:此文件直接参与系统启动,如果修改错误,系统启动报错
移动设备是禁止自动挂载的,原因是当系统启动时没有检测到此设备,就会报错
/dev/sdb1 /disk1 ext3 defaults 1 2
第一列: 设备文件名
第二列 挂载点
第三列 文件系统
第四列 挂载选项
第五列 1 是否可以被备份 0 不备份 1 每天备份 2 不定期备份
第六列 2 是否检测磁盘 fsck 0 不检测 1 启动时检测 2 启动后检测
根分区建议启动检测其他区可以启动后检测
也可以使用 UUID 进行挂载,UUID(硬盘通用唯一识别码,可以理解为硬盘的 ID)
这个字段在 CentOS 5.5 的系统当中是写入分区的卷标名或分区设备文件名的,现在变成了硬盘的 UUID。这样做的好处是当硬盘增加了新的分区,或者分区的顺序改变,再或者内核升级后,任然能够保证分区能够正确的加载,而不至于造成启动障碍
使用UUID的作用是,当设备更换时,系统能够检测到设备的变化不会混乱,从而正确地挂载,从而防止了系统报错
那么每个分区的 UUID 到底是什么呢?我们讲过的 dumpe2fs 命令是可以查看到的,命令如下:
[root@localhost ~]# dumpe2fs /dev/sdb5
[root@localhost ~]# ls -l /dev/disk/by-uuid/
9.重启测试
或 mount -a 重新挂载所有内容,用它进行测试
五、/etc/fstab/文件修复
,如图9-16所示:
他提示你输入root密码啊,好像还有戏啊,我们输入密码试试,
赶快把/etc/fstab文件修改回来吧。晕,报错了
分析下原因提示是没有写权限,那么只要把/分区重新挂载下,挂载为读写权限不就可以修改了吗?命令如下
再去修改/etc/fstab文件,把它改回来就可以正常启动了啊。
六、parted命令分区
我们Linux系统中有两种常见的分区表MBR分区表(主引导记录分区表)和GPT分区表(GUID分区表),其中:
MBR分区表:支持的最大分区是2TB(1TB=1024GB);最多支持4个主分区,或3个主分区1个扩展分区
GPT分区表:支持最大18EB的分区(1EB=1024PB=1024*1024TB);最多支持128个分区,其中1个系统保留分区,127个用户自定义分区
parted地缺陷
不过parted命令也有点小问题,就是命令自身分区的时候只能格式化成ext2文件系统,不支持ext3文件系统,那就更不用说ext4文件系统了(截止到CentOS 6.8还是这样,这里只是指不能用parted命令把分区格式化成ext4文件系统,但是parted命令还是可以识别ext4文件系统的)。不过这没有太多的影响,因为我们可以先分区再用mkfs进行格式化嘛!
一)parted交互模式
[root@localhost ~]# parted /dev/sdb#打算继续划分/dev/sdb硬盘GNU Parted 2.1使用 /dev/sdbWelcome to GNU Parted! Type 'help' to view a list of commands.(parted) parted的等待输入交互命令的位置
parted交互命令
check NUMBER
做一次简单的文件系统检测
cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER
复制文件系统到另外一个分区
help [COMMAND]
显示所有的命令帮助
创建新的磁盘卷标(分区表)
mkfs NUMBER FS-TYPE
在分区上建立文件系统
mkpart PART-TYPE [FS-TYPE] START END
创建一个分区
mkpartfs PART-TYPE FS-TYPE START END
创建分区,并建立文件系统
move NUMBER START END
移动分区
name NUMBER NAME
给分区命名
显示分区表,活动设备,空闲空间,所有分区
quit
退出
rescue START END
修复丢失的分区
resize NUMBER START END
修改分区大小
rm NUMBER
删除分区
select DEVICE
选择需要编辑的设备
set NUMBER FLAG STATE
改变分区标记
toggle [NUMBER [FLAG]]
切换分区表的状态
unit UNIT
设置默认的单位
Version
显示版本
二)建立分区
1、 查看分区
使用print可以查看分区表信息,包括硬盘参数,硬盘大小,扇区大小,分区表类型和分区信息。分区信息总共七列,分别是:
Number:分区号
Start:分区起始位置,这里不再像fdisk用柱面表示,而是使用Byte更加直观
End:分区结束位置
Size:分区大小
Type:分区类型
File system:文件系统类型。我不是说parted不支持ext4文件系统吗?注意,我一直都是说parted不能直接把分区直接格式化成ext4文件系统,但是它是可以识别的。
标志:Flags,就是分区的标记
2、修改成GPT分区表
修改了分区表,如果这块硬盘已经有分区了,那么原有分区和分区中的数据都会消失,而且需要重启系统才会生效。
还有我们转换分区表的目的是为了支持大于2TB的分区,如果分区并没有大于2TB,那么这步是可以不执行的。
注意:一定要把/etc/fstab文件中和原有分区的内容删除掉,才能重启动。要不系统启动就一定会报错的。
3、 建立分区
因为修改过了分区表,所以/dev/sdb中的所有数据都消失了,所以我们可以重新对这块硬盘分区了。不过建立分区时,默认文件系统就只能建立成ext2了,命令如下:
不知道大家注意到了吗?我们现在的print查看的分区,和第一次查看MBR分区表的分区时有些不一样了,少了Type这个字段,也就是分区类型的字段,多了Name分区名字段。分区类型是标识主分区、扩展分区和逻辑分区的,不过这种标识只在MBR分区表中使用,我们现在已经变成了GPT分区表了,所以就不再有Type类型了。
4、 建立文件系统
分区分完了,我们还需要格式化。不过我们已经知道如果使用parted交互命令格式化的话,只能格式化成ext2文件系统。我们这里是要演示下parted命令的格式化方法,所以就格式化成ext2吧,命令如下:
(parted) mkfs#font color=\"#c41230\
如果要格式化成ext4文件系统,请mkfs命令帮忙吧(注意不是parted交互命令中的mkfs,而是系统命令mkfs)!
5、 调整分区大小
parted命令还有一大优势,就是可以调整分区的大小(windows中也可以实现,不过要不需要转换成动态磁盘,要不需要依赖第三方工具,如硬盘分区魔术师)。起始Linux中LVM和RAID是可以支持分区调整的,不过这两种方法也可以看成是动态磁盘方法,我们在下一个章节中介绍。使用parted命令调整分区要更加简单。
注意:parted调整已经挂载使用的分区时,是不会影响分区中的数据的,也就是说数据不会丢失。但是一定要先卸载分区,再调整分区大小,否则数据是会出现问题的。还有要调整大小的分区必须已经建立了文件系统(格式化),否则会报错
命令如下:
6、 删除分区
还有件事要注意,parted中所有的操作都是立即生效,没有保存生效的概念。这点和fdisk交互命令明显不同,所以所做的所有操作大家要倍加小心。
那么到底使用fdisk进行分区?还是parted命令呢?这个完全看个人习惯,我们更加习惯fdisk命令。
七、分配swap分区
1、分区,并修改为swap分区ID
[root@localhost ~]# fdisk /dev/sdb#拿/dev/sdb分区Command (m for help): t 修改分区的系统IDSelected partition 1 只有一个分区,所以不用选择分区了Hex code (type L to list codes): 82 改为swap的IDChanged system type of partition 1 to 82 (Linux swap / Solaris)
2、格式化
[root@localhost ~]# font color=\"#c41230\
3 使用swap分区
在使用swap分区之前,我们先来说说free命令,命令如下:
用来查看内存和swap分区地占用情况
系统会自动调整大小
[root@localhost ~]# freetotal used free shared buffers cachedMem: 1030796 130792 900004 0 15292 55420-/+ buffers/cache: 60080 970716Swap: 2047992 0 2047992
buffer 指写入硬盘时地数据缓冲
cached 指读取硬盘数据时地数据缓存
[root@localhost ~]# swapon 分区设备文件名例:[root@localhost ~]# swapon /dev/sdb1
让swap分区开机之后自动挂载
/dev/sdb1 swap swap defaults 0 0#加入新swap分区的相关内容,我这里是直接使用的分区的设备文件名,大家当然也可以#使用UUID号了。
高级文件系统管理
一、磁盘配额
1、磁盘配额概念
限制用户和用户组使用磁盘空间和文件个数的作用
限制普通用户在分区上的容量和文件数量的作用,不能限制超级用户
2、磁盘配额条件
内核必须支持磁盘配额
[root@localhost ~]# grep CONFIG_QUOTA /boot/config-2.6.32-279.el6.i686CONFIG_QUOTA=yCONFIG_QUOTA_NETLINK_INTERFACE=y# CONFIG_QUOTA_DEBUG is not setCONFIG_QUOTA_TREE=yCONFIG_QUOTACTL=y
系统中必须安装了quota工具,我们的Linux默认是安装了quota工具的,查看命令如下
[root@localhost ~]# rpm -qa | grep quotaquota-3.17-16.el6.i686
要支持磁盘配额的分区必须开启磁盘配额功能,这个功能需要手工开启,不再是默认就开启的
3、概念
1)用户配额和组配额
组配额中地用户并不是平均分配磁盘大小,而是先到先得,分配不合理,一般不使用组配额
用户配额可以用shell 脚本
2)磁盘容量限制和文件个数限制
文件个数限制,由于每个文件拥有一个Inode节点,Inode节点是有限地,因此在限制磁盘容量的同时应该限制Inode节点号
3)软限制和硬限制
软限制,可以超过容量
硬限制,不能超容量限制
4)宽限时间
如果用户的空间占用数处于软限制和硬限制之间,统会在用户登陆时警告用户磁盘将满,,这个时间就是宽限时间,默认是7天。如果达到了宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。
4、磁盘配额规划
1、磁盘配额是限制的普通用户在分区上使用磁盘空间和文件个数的,所以我们需要指定一个分区。那么我们手工建立一个5GB的/dev/sdb1分区,把它挂载到/disk目录当中。
2、还有我们需要建立被限制的用户和用户组。那么我们假设需要限制user1、user2和user3用户,这三个用户属于test用户组。
3、其中test组磁盘容量硬限制为500MB,软限制450MB,文件个数不做限制。user1用户为了便于测试,磁盘容量硬限制为50MB,软限制为40MB,文件个数硬限制限制为10个,软限制为8个。user2和user3用户磁盘容量硬限制为250MB,软限制为200MB,文件个数不做限制。
4、大家发现user1、user2和user3用户加起来的磁盘容量限制为550MB,超过了test组的磁盘容量限制500MB。这样的话,某个用户可能达不到自己的用户限制,而达到组限制时就不能再写入数据了。也就是说,如果用户限制和组限制同时存在,那么哪个限制更小,哪个限制优先生效。
5、系统宽限时间我们改为8 天。
5、磁盘配额步骤
1)分5GB 的/dev/sdb1 分区,并将它挂载到/disk 目录当中
2)建立需要做限制的用户和用户组
[root@localhost ~]# groupadd test[root@localhost ~]# useradd -G test user1[root@localhost ~]# useradd -G test user2[root@localhost ~]# useradd -G test user3[root@localhost ~]# passwd user1[root@localhost ~]# passwd user2[root@localhost ~]# passwd user3
3)、在分区上开启磁盘配额功能
我们要想永久生效,则需要修改/etc/fstab 文件,改成:
4)、建立磁盘配额的配置文件
[root@localhost ~]# quotacheck [选项] [分区名]选项:-a:扫描/etc/mtab 文件中所有启用磁盘配额功能的分区。如果加入此参数,命令后面就不需要加入分区名了-c:不管原有的配置文件,重新扫描并建立新的配置文件-u:建立用户配额的配置文件,也就是生成aquota.user 文件-g:建立组配额的配置文件,会生成aquota.group 文件-v:显示扫描过程-m:强制以读写的方式扫描文件系统,和-M 类似。一般扫描根分区时使用。-f:强制扫描文件系统,并写入新的配置文件。一般扫描新添加的硬盘分区时使用
[root@localhost ~]# quotacheck -avug
[root@localhost ~]# ll /disk/总用量 24-rw------- 1 root root 6144 4 月 17 01:08 aquota.group-rw------- 1 root root 6144 4 月 17 01:08 aquota.user#/disk 目录中两个配额配置文件已经建立
说明生效
需要关闭SELinux,否则会报错
命令(临时)关闭SELinux 0 为关闭 ,1 为生效
修改配置文件,永久生效
如果需要给根分区开启配额功能,需要:
如果我们自动扫描/分区建立配额配置文件时,因为/分区已经挂载成读写系统,而quotacheck需要把分区先挂载成只读分区,然后建立配置文件,最后再挂载回来,所以不能直接在/分区建立配置文件。这时就需要使用-m 强制以读写方式扫描文件系统了
5)、 设置用户和组的配额限制
[root@localhost ~]# edquota [选项] [用户名或组名]选项:-u 用户名: 设定用户配额-g 组名: 设定组配额-t: 设定宽限时间-p: 复制配额限制。如果已经设定好某个用户的配额限制,其他用户的配额限制如果和这个用户相同,那么可以直接复制配额限制,而不用都手工指定
我们给user1 用户设定的配额限制是:磁盘空间软限制是40MB,硬限制是50MB;文件个数的软限制是8 个,硬限制是10 个(稍微小一点,一会测试时方便测试)。命令如下:
[root@localhost ~]# edquota -u user1#edquota 命令进入之后,就是标准的vi 操作方法Disk quotas for user user1 (uid 500):#磁盘配额是设定用户user1(UID 是500)Filesystem blocks soft hard inodes soft hard/dev/sdb1 0 0 0 0 0 0#分区名 已占用容量 软限制 硬限制 已占用文件数 软限制 硬限制Disk quotas for user user1 (uid 500):Filesystem blocks soft hard inodes soft hard/dev/sdb1 0 40000 50000 0 8 10#不用对齐,是七列就行
再给user2 用户配置限额,user2 用户要求是空间软限制250MB,硬限制250MB,文件个数不做限制:
[root@localhost ~]# edquota -u user2Disk quotas for user user2 (uid 501):Filesystem blocks soft hard inodes soft hard/dev/sdb1 0 250000 300000 0 0 0
接下来给test 组配置限额,test 组要求是空间软限制是450MB,硬限制500MB,文件个数不做限制:
[root@localhost ~]# edquota -g testDisk quotas for group test (gid 500):Filesystem blocks soft hard inodes soft hard/dev/sdb1 0 450000 500000 0 0 0
6)、 配额复制
user3 用户的配额值和user2 用户完全一样,我们就可以使用user2 用户作为模板进行复制。这样我们如果需要建立大量的配额值一致的用户时,就会非常方便,不用一个个手工建立了。复制命令如下:
[root@localhost ~]# edquota -p user2 -u user3#命令 -p 源用户 -u 目标用户
7)、修改宽限时间
我们要求把宽限时间改为8 天,修改命令如下:
8)、启动和关闭配额
配额的配置完成,接下来只需要启动配额就大功告成了
启动命令如下:
[root@localhost ~]# quotaon [选项] [分区名]选项:-a:依据/etc/mtab 文件启动所有的配额分区。如果不加-a,后面就一定要指定分区名-u:启动用户配额-g:启动组配额-v:显示启动过程的信息[root@localhost ~]# quotaon -vug /disk//dev/sdb1 [/disk]: group quotas turned on/dev/sdb1 [/disk]: user quotas turned on#启动/disk 分区的配额[root@localhost ~]# quotaon –avug#这条命令也可以
关闭配额的命令如下:
[root@localhost ~]# quotaoff [选项] [分区名]选项-a:依据/etc/mtab 文件关闭所有的配额分区。如果不加-a,后面就一定要指定分区名-u:关闭用户配额-g:关闭组配额[root@localhost ~]# quotaoff –a#依据/etc/mtab 文件关闭配额分区
6、磁盘配额查询
quota 查询用户或用户组配额:
[root@localhost ~]# quota [选项] [用户名或组名]选项:-u 用户名: 查询用户配额-g 组名: 查询组配额-v: 显示详细信息-s: 以习惯单位显示容量大小,如M,G
[root@localhost ~]# quota -uvs user1
repquota 查询文件系统配额
[root@localhost ~]# repquota [选项] [分区名]选项:-a: 依据/etc/mtab 文件查询配额。如果不加-a 选项,就一定要加分区名-u: 查询用户配额-g: 查询组配额-v: 显示详细信息-s: 以习惯单位显示容量大小
[root@localhost ~]# repquota –augvs
7、测试
[user1@localhost disk]$ dd if=/dev/zero of=/disk/testfile bs=1M count=60#建立testfile 文件,指定大小60MB
8、非交互设定用户磁盘配额
[root@localhost ~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 \\个数硬限制 分区名[root@localhost ~]# useradd user4[root@localhost ~]# passwd user4#建立用户[root@localhost ~]# setquota -u user4 10000 20000 5 8 /disk#设定用户在/disk 分区的容量软限制为10MB,硬限制20MB。文件个数软限制5 个,硬限制#8 个。
这个命令在写脚本批量设置时更加方便。当然写脚本时也可以先建立一个模板的用户,设定好磁盘配额,再进行配额复制,也是可以的。
二、LVM 逻辑卷管理
1、简介
LVM 是Logical Volume Manager 的简称,中文就是逻辑卷管理。
物理卷(PV,Physical Volume):就是真正的物理硬盘或分区。
卷组(VG,Volume Group):将多个物理卷合起来就组成了卷组,组成同一个卷组的物理卷可以是同一个硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一个逻辑硬盘。
逻辑卷(LV,Logical Volume):卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区我们称作逻辑卷。逻辑卷可以格式化和写入数据。我们可以把逻辑卷想象成为分区。
物理扩展(PE,Physical Extend):PE 是用来保存数据的最小单元,我们的数据实际上都是写入PE 当中,PE 的大小是可以配置的,默认是4MB。
注意/boot不能使用LVM分区,只能使用普通分区的方式
2、建立LVM 的步骤:
首先需要把物理硬盘分成分区,当然也可以是整块物理硬盘。
然后把物理分区建立成为物理卷(PV),也可以直接把整块硬盘都建立为物理卷。
接下来把物理卷整合成为卷组(VG)。卷组就已经可以动态的调整大小了,可以把物理分区加入卷组,也可以把物理分区从卷组中删除。不建议删除
最后就是把卷组再划分成为逻辑卷(LV),当然逻辑卷也是可以直接调整大小的。我们说逻辑卷可以想象成为分区,所以也需要格式化和挂载。
3、物理卷管理
1)、硬盘分区
创建方式就是使用fdisk 交互命令,不过需要注意的是分区的系统ID 不再是Linux 默认的分区ID 号83 了,而要改成LVM 的ID 号8e。
2)、建立物理卷
[root@localhost ~]# pvcreate [设备文件名]
建立物理卷时,我们说即可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。如果要把整块硬盘都建立成物理卷,命令如下
[root@localhost ~]# pvcreate /dev/sdb
在我们的使用中,是要把分区建立成为物理卷,所以执行以下命令:
[root@localhost ~]# pvcreate /dev/sdb5
3)查看物理卷
[root@localhost ~]# pvscanPV /dev/sdb5 lvm2 [1.01 GiB]PV /dev/sdb6 lvm2 [1.01 GiB]PV /dev/sdb7 lvm2 [1.01 GiB]Total: 3 [3.03 GiB] / in use: 0 [0 ] / in no VG: 3 [3.03 GiB]
我们可以看到在我的系统中,/dev/sdb5-7 这三个分区是物理卷。最后一行的意思是:总共3 个物理卷[大小] / 使用了0 个卷[大小] / 空闲3 个卷[大小]。
第二个查询命令是pvdisplay,它可以查看到更详细的物理卷状态,命令如下:
[root@localhost ~]# pvdisplay\"/dev/sdb5\" is a new physical volume of \"1.01 GiB\"--- NEW Physical volume ---PV Name /dev/sdb5 PV 名VG Name 属于的VG 名,还没有分配,所以空白PV Size 1.01 GiB PV 的大小Allocatable NO 是否已经分配PE Size 0 PE 大小,因为还没有分配,所以PE 大小也没有指定Total PE 0 PE 总数Free PE 0 空闲PE 数Allocated PE 0 可分配的PE 数PV UUID CEsVz3-f0sD-e1w0-wkHZ-iaLq-O6aV-xtQNTB PV 的UUID
4)删除物理卷
[root@localhost ~]# pvremove /dev/sdb7
4、卷组管理
1)建立卷组
我们又三个物理卷/dev/sdb5-7,我们先把/dev/sdb5 和/dev/sdb6 加入卷组,留着/dev/sdb7 一会实验调整卷组大小,命令如下:
[root@localhost ~]# vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6Volume group \"scvg\" successfully created
2)、查看卷组
查看卷组的命令同样是两个,vgscan 主要是查看系统中是否有卷组,而vgdisplay 则是查看卷组的详细状态的。命令如下:
[root@localhost ~]# vgscanReading all physical volumes. This may take a while...Found volume group \"scvg\" using metadata type lvm2#scvg 的卷组确实存在
[root@localhost ~]# vgdisplay--- Volume group ---VG Name scvg 卷组名System IDFormat lvm2Metadata Areas 2Metadata Sequence No 1VG Access read/write 卷组访问状态VG Status resizable 卷组状态MAX LV 0 最大逻辑卷数Cur LV 0Open LV 0Max PV 0 最大物理卷数Cur PV 2 当前物理卷数Act PV 2VG Size 2.02 GiB 卷组大小PE Size 8.00 MiB PE 大小Total PE 258 PE 总数Alloc PE / Size 0 / 0 已用PE 数量/大小Free PE / Size 258 / 2.02 GiB 空闲PE 数量/大小VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
3)、增加卷组容量
[root@localhost ~]# vgextend scvg /dev/sdb7Volume group \"scvg\" successfully extended#把/dev/sdb7 物理卷也加入scvg 卷组[root@localhost ~]# vgdisplay--- Volume group ---VG Name scvgSystem IDFormat lvm2Metadata Areas 3Metadata Sequence No 2VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 3Act PV 3VG Size 3.02 GiB 卷组容量增加PE Size 8.00 MiBTotal PE 387 PE 总数增加Alloc PE / Size 0 / 0Free PE / Size 387 / 3.02 GiBVG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
4)、减小卷组容量
[root@localhost ~]# vgreduce scvg /dev/sdb7Removed \"/dev/sdb7\" from volume group \"scvg\"#在卷组中删除/dev/sdb7 物理卷[root@localhost ~]# vgreduce -a#删除所有的未使用物理卷
一般不允许缩减
5)、删除卷组
[root@localhost ~]# vgremove scvgVolume group \"scvg\" successfully removed
卷组删除之后,才能删除删除物理卷。还要注意的是scvg 卷组还没有添加任何的逻辑卷,那如果拥有了逻辑卷,记得先删除逻辑卷再删除卷组。还记得我刚说的吗?删除就是安装的反过程,每一步都不能跳过。
5、逻辑卷管理
1)、建立逻辑卷
注意建立逻辑卷的大小和单个物理卷的大小无关,只要卷组的大小足够就行
[root@localhost ~]# lvcreate [选项] [-n 逻辑卷名] 卷组名选项:-L 容量:指定逻辑卷大小,单位MB,GB,TB 等-l 个数:按照PE 个数指定逻辑卷大小,这个参数需要换算容量,太麻烦-n 逻辑卷名:指定逻辑卷名
那我们就建立一个1.5GB 的userlv 逻辑卷吧,建立命令如下:
[root@localhost ~]# lvcreate -L 1.5G -n userlv scvgLogical volume \"userlv\" created#在scvg 卷组中建立1.5GB 的userlv 逻辑卷
[root@localhost ~]# mkfs -t ext4 /dev/scvg/userlv#格式化[root@localhost ~]# mkdir /disklvm[root@localhost ~]# mount /dev/scvg/userlv /disklvm/#建立挂载点,并挂载[root@localhost ~]# mount…省略部分输出…/dev/mapper/scvg-userlv on /disklvm type ext4 (rw)#已经挂载了
当然如果需要开机自动挂载,也要修改/etc/fstab 文件。
2)、查看逻辑卷
同样的查看命令是两个,第一个命令lvscan 只能看到系统中是否拥有逻辑卷,命令如下:
[root@localhost ~]# lvscanACTIVE '/dev/scvg/userlv' [1.50 GiB] inherit#能够看到激活的逻辑卷,大小事1.5GB
第二个命令是lvdisplay 可以看到逻辑卷的详细信息,命令如下:
3)调整逻辑卷大小
注意
往小的容量修改逻辑卷大小有可能造成数据丢失
我们先在/disklvm 中建立点文件,一会调整完大小,我们看看数据是否会丢失:
[root@localhost ~]# cd /disklvm/[root@localhost disklvm]# touch testf[root@localhost disklvm]# mkdir testd[root@localhost disklvm]# lslost+found testd testf
userlv 逻辑卷的大小到2.5GB 吧:
逻辑卷的大小已经改变了,但是好像有些问题啊:
[root@localhost disklvm]# df -h /disklvm/文件系统 容量 已用 可用 已用%% 挂载点/dev/mapper/scvg-userlv 1.5G 35M 1.4G 3% /disklvm
怎么/disklvm 分区的大小还是1.5GB 啊?刚刚只是逻辑卷的大小改变了,如果需要让分区使用这个新逻辑卷,我们还要使用resize2fs 命令来调整分区的大小。不过这里就体现了LVM 的优势,我们不需要卸载分区,直接就能调整分区的大小。resize2fs 命令如下:
[root@localhost ~]# resize2fs [选项] [设备文件名] [调整的大小]选项:-f: 强制调整设备文件名:指定调整哪个分区的大小调整的大小:指定把分区调整到多大,要加M,G 等单位。如果不加大小,会使用整个分区
那么我们已经把逻辑卷调整到了2.5GB,这时我们就需要把整个逻辑卷都加入/disklvm 分区,命令如下:
4)删除逻辑卷
[root@localhost ~]# lvremove 逻辑卷设备文件名
我们删除userlv这个逻辑卷,记得删除时要先卸载。命令如下:
[root@localhost ~]# umount /dev/scvg/userlv[root@localhost ~]# lvremove /dev/scvg/userlv
0 条评论
回复 删除
下一页