文件系统简介
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
VFS(Virtual File System)
文件系统是内核的功能,属于内核空间;但是管理文件系统是一个软件,属于用户空间;一般是通过文件系统管理软件管理内核支持的某种文件系统;Linux中通过内核的虚拟文件系统VFS功能提供统一的系统调用来简化上层软件对多种文件系统的支持;一个实际的文件系统想要被 Linux 支持,就必须提供一个符合VFS标准的接口,才能与 VFS 协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS 层和内核的其他部分看来,所有文件系统都是相同的。
Linux下常用文件系统:(每个可挂载设备一个文件系统)
基本文件系统:Ext2、Ext3、Ext4、Reiserfs(海量小文件)、btrfs、xfs(支持单个巨大的文件)、JFS(AIX系统日志文件系统)
windows:vfat、NTFS
Unix:FFS、UFS、JFS2
交换分区:swap
集群文件系统:GFS2、OCFS2
网络文件系统:NFS、smbfs(window中叫CIFS)
分布式文件系统:ceph、moosefs、mogilefs、GlusterFS、Lustre
光盘文件系统:iso9660
cat /proc/filesystems 查看当前内核所支持文件系统类型
文件系统管理:重新创建文件系统会损坏原有文件
低级格式化:分区之前进行,是在磁盘上创建磁道
高级格式化:分区之后进行,是用来创建文件系统
journal日志文件系统
带日志的文件系统(ext3、ext4、xfs)拥有较强的稳定性,在出现错误时可以进行恢复;带日志的文件系统,使用一个叫"两阶段提交"的方式进行磁盘操作,当进行磁盘操作时。文件系统进行以下操作:
文件系统将准备执行的事物的具体内容写入日志区(格式化时如果开启日志功能会创建日志区)
文件系统进行操作
操作成功后,将事务的具体内容从日志区中删除
这样的好处是,当事务执行的时候如果出现意外(如断电或磁盘故障),可以通过查看日志区进行磁盘文件恢复操作(如果带日志功能,只需要扫描日志区那些文件没正常写入硬盘的数据区域,直接修复或删除这个损毁数据;如果不带日志功能,需要扫描整个文件系统检查,速度很慢)。缺点是会丧失一定的性能(额外的日志读写操作)
格式化设备会划分元数据区和数据区
文件元数据inode(index node)包含:inode Number、类型、权限、硬连接数、属主、属组、大小、时间戳、数据块指针等
Ext系列文件系统组织结构中的常见术语:
block groups:块组内分为元数据区(inode table中存放indoe信息)和数据区(block)
superblock:超级快记录当前整个分区上有哪些块组,以及块组的划分(记录整个分区的块组信息,有多个备份)
inode bitmap:inode位图索引 (标识哪些inode已经使用,哪些还没使用)
block bitmap:block位图索引(标识那些数据块已经使用,哪些还没有使用)
文件链接:创建访问同一个文件的多个路径
ln Source Destination
硬链接特点:
不能跨分区,因为inode不能夸分区引用
硬链接与源文件指向同一个inode,指向同一个inode的两个不同的路径
不能对目录创建硬链接
硬链接会改变文件被链接的次数
ln -s Source Destination
符号链接特点:
符号链接可以跨分区,只是引用的目标文件的文件路径
符号链接文件跟源文件不同一个inode
可以对目录创建符号链接
符号链接不会改变源文件被链接的次数
文件系统管理工具
创建文件系统工具:mkfs、mkfs.ext2、mkfs.ext3、mkfs.ext4、mkfs.xfs、mkfs.vfat
检测和修复文件系统工具:fsck、fsck.ext2、fsck.ext3,fsck.ext4
查看文件系统元数据工具:dumpe2fs、tune2fs
修改文件系统元数据工具:tune2fs
mkfs (make file system)用来格式化创建文件系统
-t FSTYPE 指定文件系统以后来格式化分区,实际上是去调用mkfs.ext3、mkfs.ext4等命令去创建相应文件系统
格式化为Ext4文件系统:三种方式都可以
mkfs -t ext4 /dev/sda2
mke2fs -t ext4 /dev/sda2
mkfs.ext4 /dev/sda2
格式化为Ext3(日志文件系统):
mkfs -t ext3 /dev/sda2
mke2fs -t ext3 /dev/sda2
mke2fs -j /dev/sda2
mkfs.ext3 /dev/sda2
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label= 磁盘分区的卷标
OS type: Linux 文件系统类型
Block size=1024 (log=0) 每个Block的大小为1024字节,也就是两个扇区一个Block
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
130560 inodes, 522080 blocks 一共创建了130560个inode,占据了522080 blocks
26104 blocks (5.00%) reserved for the super user 预留磁盘分区的5%,也就是26104个blocks用于管理使用,例如磁盘满了,要进行系统操作要有空间
First data block=1 第一个block编号
Maximum filesystem blocks=67633152
64 block groups 一共64个块组,第一个块叫superblock,用于存放块组信息,一共有多少个块组,每个块组包含哪些块
8192 blocks per group, 8192 fragments per group
2040 inodes per group
Superblock backups stored on blocks: superblock的备份的block编号
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Writing inode tables: done 创建inode表完成
Creating journal (8192 blocks): done 创建日志文件系统完成
Writing superblocks and filesystem accounting information: done 创建superblocks和统计信息完成
This filesystem will be automatically checked every 20 mounts or 文件系统每挂载20次或者180天自动检测文件系统是否有错误信息
180 days, whichever comes first. Use tune2fs -c or -i to override. (如果出现非正常关机导致数据写入错误占用磁盘块情况下清除错误块)
mke2fs 专门管理ext系列文件系统功能比mkfs功能强大;没指定选项用配置文件/etc/mke2fs.conf中的默认选项
-t 指定创建文件系统类型{Ext2|Ext3|Ext4}
-j 创建ext3类型文件系统
-b BLOCK_SIZE 指定块大小,默认为4096;可用取值为1024、2048或4096
-L LABEL 指定分区卷标,就可以直接通过卷标引用了
-m # 指定预留给管理员用户的块数百分比(当磁盘满的时候管理员去维护使用空间)
-i # 指定多少字节的空间创建一个inode;这里给出的数值应该为块大小的2^n倍
-I # 指定每个inode占据的磁盘空间大小
-N # 指定要创建inode个数
-F 强制创建文件系统
-E 用户指定额外文件系统属性
-O Feature 开启分区的指定特性
-O ^Feature 关闭分区指定特性
blkid 查看块设备属性信息(UUID、TYPE、LABEL)
blkid /dev/sda2
-U UUID 根据指定的UUID来查看对应的设备信息
-L LABEL 根据指定的LABEL来查看对应的设备信息
df 查看文件系统空间状态报告
-h 显示易读的使用信息
-i 显示inode的使用信息
-P 以POSIX格式显示
du 显示文件占用磁盘空间的情况(默认递归显示目录下面的所有文件和目录本身的大小)
-s 只显示目录大小(包含下面文件的大小);ls -l只显示的是目录文件自己的大小
-h 显示易读的使用信息
e2label 用于查看或定义卷标
e2lable /dev/sda2
e2label 设备文件 卷标
e2label /dev/sda2 LabName
tune2fs 修改文件系统元数据信息
-j 不损害原有数据,将ext2升级为ext3
-L LABEL 设定或修改卷标
-m # 调整预留给管理员用户的块数百分比
-r # 指定预留块数
-o 设定默认挂载选项(指定默认是否开启acl功能等)-l查看到的Default mount options
tune2fs -o acl /dev/sda2 默认挂载开启acl功能
tune2fs -o ^acl /dev/sda2 默认挂载关闭acl功能
-O 开启和关闭文件系统的特性;-l查看到的Filesystem features
tune2fs -O huge_file /dev/sda2 开启文件系统巨大文件功能
tune2fs -O ^huge_file /dev/sda2 关闭文件系统巨大文件功能
-c # 指定挂载次数达到#次之后进行自检,0或-1表关闭此功能
-i # 每挂载使用多少天后进行自检,0或-1表示关闭此功能
-l 查看超级块的信息
dumpe2fs 查看文件系统元数据信息
-h 只查看超级块的信息
fsck 检查并修复文件系统
-t FSTYPE 指定文件系统类型
-a 自动修复错误(不交互,有错误自动修复)
-f 即使文件系统处于"clean"状态也强制修复
-r 交互式修复错误
为什么要进行文件系统检测:
因进程意外中止或系统崩溃等原因导致操作非正常终止时,可能会造成文件损坏;此时应该检测并修复文件系统,建议离线进行;
在发生于死机或者非正常关机之后进行文件系统检测
挂载设备后,文件系统标记为"dirty"(tune2fs -l显示信息中的Filesystem state为"dirty")
e2fsck 专用于修复ext2/ext3文件系统
-f 即使文件系统处于"clean"状态也强制修复
-y 自动回答为yes
-p 自动修复错误(默认是-p也可以使用-a)
交换分区
windows中的虚拟内存,当内存不够用时,将内存中最近很少使用的数据放到硬盘上
mkswap 格式化磁盘上指定分区为虚拟内存分区(先通过fdisk命令调整分区类型为swap 82)
mkswap /dev/sda2
-L label 指定卷标(可以通过指定卷标对分区进行操作)
swapon 启动交换分区
swapon /dev/sda2
-a 启用所有的定义在/etc/fstab文件中的交换设备
-p # 指定优先使用哪个交换分区(多个交换分区通过指定的优先级优先使用哪个)
swapoff 关闭交换分区
swapoff /dev/sda2
交换分区大小设置:
物理内存大于2G,小于4G 交换分区设置为4G
物理内存小于2G 交换分区设置为2倍物理内存
物理内存大于8G,交换分区设置为4G
数据库服务器设置为1G,最好不要使用交换分区,物理内存不够就加内存
通过文件创建交换分区(用于在系统中没用可用分区的时候,通过文件临时创建swap设备)
创建一个1G的文件写满0
dd if=/dev/zero of=/var/swapfile bs=1M count=1024
通过该空的文件创建交换分区使用
mkswap -f /var/swapfile
-f 是强制创建
修改/etc/fstab文件挂载交换分区
/var/swapfile swap swap defaults 0 0
启动交换分区
swapon /var/swapfile
-s 查看当前启用的swap设备
free命令查看当前启用交换分区使用情况
swappiness
cat /proc/sys/vm/swapiness
swappiness的值的大小对如何使用swap分区是有着很大的联系的;swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。Centos6默认为60,Centos7默认为30
swappiness为60时内存在使用到100-60=40%的时候,就开始使用交换分区。使用交换分区会增加系统IO操作,同时造成大量页的换进换出,严重影响系统的性能,所以在操作系统层面,要尽可能使用物理内存
临时调整方法:sysctl vm.swappiness=10
永久调整方法:vim /etc/sysctl.conf
缓存(cache)是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期, Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache
缓冲(buffer)一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断(Centos7上缓存跟缓冲意思相同)
查看内存空间使用状态
cat /proc/meninfo
free
-m 显示结果以MB为单位
-g 显示结果以GB为单位