文件系统
文件系统的定义
文件系统是磁盘上特有格式的一片区域,操作系统通过文件系统可以方便的查询和访问其中的磁盘块,是磁盘系统用来存储的管理文件的方法。从系统角度来看,文件系统对文件存储空间进行组织、分配,并对文件的存储进行保护和检查。从用户角度来看,文件系统可以帮助用户建立文件,并对文件的读,写和删除操作提供保护和控制。
常用文件系统的介绍
Linux:ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swp Windows:FAT32,ntfs UNIX:FFS, UFS, JFS2 网络文件系统:NFS, CIFS 集群文件:GFS2,OCFS2 分布式文件系统:ceph,moosefs, mogilefs, GlusterFS, Lustre
日志型文件系统
日志型文件系统的特点是:在存储数据时,现在日志区存储元数据,然后在数据区存储数据,结束后检测是否有错误,若无错误,则将日志区中的数据移至元数据区。所以,日志型文件系统在发生故障,恢复文件时速度很快,但在存储数据时速率较慢,但总体上能忽略这点不足之处。
-
ext3
-
ext4
-
xfs
非日志型文件系统
非日志文件系统是将元数据直接存储至元数据区,所以速率较快,但安全性不及非日志型。
-
ext2
-
vfat
ext2 ext3 ext4之间的区别和联系
1.ext2–>ext3
-
增加了日志功能
2.ext3–>ext4
-
更大的文件系统和更大的文件
-
无限数量的子目录
-
采用Extents的映射方式,不再采用Ext3的间接块映射
-
多块分配:一次调用分配多个数据块,而Ext3一次只能调用一个数据块
-
延迟分配:知道文件在cache中写完才开始分配数据块写入磁盘,与多块分配结合优化整个文件的数据块分配。而Ext3采用的是尽快分配。
-
加快fsck,无需检查所有的inode。检查时跳过了列出的未使用的inode列表中的inode号。
-
日志校验
-
允许关闭日志模式,即“无日志”模式
-
在线碎片整理
-
支持更大的inode大小,有Ext3默认的128字节,变为256字节。且能支持快速拓展属性。
-
持久预分配,就预先分配好与所下载文件大小相同的空间,以防空间不足下载失败。
-
默认启用barrier.不许再日志数据写入磁盘之后才能刺耳commit记录。
关于xfs文件系统的一些特性
查看详细内容点击此处
-
日志型文件系统
-
分配组
-
条带化分配
-
基于Extent的分配方式
-
可变块尺寸
-
延迟分配
-
稀疏文件
-
扩展属性
-
Derict I/O
-
确定速率I/O
-
DMAPI(数据库管理应用程序接口)
-
快照,不直接提供对文件系统快照的支持,结合LVM使用
-
在线尺寸调整,在线调整XFS文件系统的大小
-
原生备份、恢复工具,xfsdump,xfsretore,dump是无需卸载XFS, 且备份或恢复过程是可中断的,无需冻结数字流
-
源自磁盘配额,磁盘配额在文件系统被初次挂载时启用。
-
默认启用“写入屏障”
-
默认使用内置日志,但可将日志放置在一个分离的物理设备上,提高系统的性能。
-
文件系统无法被收缩
Btrfs文件系统的简要介绍和特点
trfs(B-tree 文件系统,通常念成 Butter FS,Better FS或B-tree FS),一种支持写入时复制(COW)的文件系统,运行在 Linux 操作系统上,采用 GPL 授权。Oracle 于 2007 年对外宣布这项计划,并发布源代码,2014 年 8 月发布稳定版。目标是取代 Linux 当时主流的 ext3 文件系统,摆脱 ext3 的一些限制,特別是单文件大小,文件系统总大小和文件校验,并加入 ext3 不支持的一些功能,比如可写快照(writable snapshots)、快照的快照(snapshots of snapshots)、内建磁盘阵列(RAID),以及子卷(subvolumes)。Btrfs 也宣称专注于「容错、修复及易于管理」。
-
联机碎片整理
-
联机卷生长和收缩
-
联机块设备增加和删除
-
联机负载均衡(块设备间的对象移动以达到平衡)
-
文件系统级的镜像(类RAID-1)、条带(类RAID-0)
-
子卷(一个或多个单独可挂载基于每个物流分区)
-
透明压缩(目前支持zlib和LZO)
-
快照(只读和可写,写复制,子卷复制)
-
文件克隆
-
数据和元数据的校验和(目前是CRC-32C)
-
就地转换(带回滚)ext3/4
-
文件系统种子
-
用户定义的事务
-
块丢弃支持
文件系统知识补充
文件名是元数据但不在inode中。 inode number: 访问文件时首先查找inode,根据inode中的指针查找block
Inode Note, 索引节点 地址指针:最大单个文件大小取决于地址指针的组织结构和地址指针所能占据的最大空间大小
-
直接指针:引入的块的数量较少,因为块的编号占空间。
-
间接指针
-
三级指针
元数据区是实现分配好的,但是没被填充数据。 inode有标志位,区分是空的还是已填充数据的。 做全盘扫描,太慢,做索引。在索引上,做对位索引。
inode bitmap: 对位标识每个inode空闲与否的状态信息。 索引位图需要一个磁盘块保存。
先分块组,在块组上分数据区和元数据区。在元数据区有块位图,inode table,索引位图。块组自己的布局结构是保存在数据区的GDP(Group DescriPtion) 使用dumpe2fs查看。
文件访问时,先找到inode,通过目录查找inode号
要找/var/log/message时,先要找根的inode,这是必须事先知道的,然后通过inode号找到根的磁盘块,在块中找到var及var所在inode的编号,通过inode编号找到inode,在inode中找到var对应的磁盘块,在块中找到log及其inode编号,。。。最后找到message的的磁盘块。称为路径映射。 速度慢,所以将目录存储在buffer。
硬链接:
不能创建目录的硬链接。 inode编号引用不能跨分区,即不能跨分区创建硬链接。 有两个文件路径指向同一个inode编号。 删除文件时是将inode标志位减1,为0时,则表示为空,可将其覆盖。实际上数据未被真实删除。 指向相同inode的不同路径。创建文件的硬链接即为为inode创建新的引用路径,因此会增加其应用次数
软链接: 符号链接
可对目录进行 可跨分区 执行另一个文件的路径,其大小为执行路径字符串的长度,不增加或减少目标文件inode的引用计数。 在inode编号中应存放地址指针的位置存放了一串字符串即另一文件路径。 它的文件大小是指向的文件名的大小 软链接的文件权限是777 指向不同inode
ln [-sv] SRC DEST -s: symbolic link v;verbose
创建文件系统
在linux中我们可以创建许多种类型的文件系统,下面我们就以ext4为例。
1.我们先来了解fdisk命令。
[root@localhost ~]# fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x00099a93 Device Boot Start End Blocks Id System /dev/sda1 * 2048 616447 307200 83 Linux /dev/sda2 616448 58728447 29056000 83 Linux /dev/sda3 58728448 62924799 2098176 82 Linux swap / Solaris
这个命令是显示当前系统所磁盘的空间使用信息,这段信息显示当前只有一个磁盘/dev/sda,共有三个分区/dev/sda1,/dev/sda2,/dev/sda3
我们第一步要做的是创建新分区。
[root@localhost ~]# fdisk /dev/sda #对/dev/sda进行操作,如增加分区,删除分区,修改分区等 Command (m for help): n #添加分区 Partition type: p primary (3 primary, 0 extended, 1 free) #主分区 e extended #逻辑分区 Select (default e): e #选择创建逻辑分区 Selected partition 4 #选择创建第4个分区 First sector (62924800-83886079, default 62924800): #默认 Using default value 62924800 Last sector, +sectors or +size{K,M,G} (62924800-83886079, default 83886079): Using default value 83886079 #默认,但也可以使用+5G之类的用法 Partition 4 of type Extended and of size 10 GiB is set Command (m for help): n #添加分区 All primary partitions are in use Adding logical partition 5 First sector (62926848-83886079, default 62926848): #默认分区其实地址 Using default value 62926848 Last sector, +sectors or +size{K,M,G} (62926848-83886079, default 83886079): +5G #设置分区大小 Partition 5 of type Linux and of size 5 GiB is set Command (m for help): w #保存设置 The partition table has been altered!
现在,我们已经创建好分区了。 注意:此时的分区好没有保存到内核中。我们需要以下命令将其加载到内核中。
[root@localhost ~]# partx -a /dev/sda #通知内核添加新增加的分区 partx: /dev/sda: error adding partitions 1-6 #不需要在意这些错误,已经添加成功了
2.创建好了分区,就要在分区上创建文件系统。此时我们创建ext4文件系统
[root@localhost ~]# mkfs.ext4 -L 'MYDATA' -b 1024 /dev/sda5 mke2fs 1.42.9 (28-Dec-2013) Filesystem label=MYDATA # 由 -L 指明的卷标 OS type: Linux Block size=1024 (log=0) # 由-b 设置的块大小,默认为4096 Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 5242880 blocks 262144 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=38797312 640 block groups 8192 blocks per group, 8192 fragments per group 512 inodes per group Superblock backups stored on blocks: #超级块在以下块中备份 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553, 1024001, 1990657, 2809857, 5120001 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done #成功
关于ext系列的文件系统,我们还有一种专用的创建的命令:
mke2fs: ext系列文件系统专业管理工具 -t {ext2|ext3|ext4} -b {1024|2046|4096} -L 'LABEL' -j: 相当于 -t ext3 -i #: 数据空间每多少个字节创建一个inode: 此大小不应小于block的大小 -N #:为数据空间创建多少个inode -m #:为管理人员预留的空间占据的百分比 -O FEATURE[,...] -O ^FEATURE: 关闭指定特性
3.好啦,现在我们就创建好了。只要再将该分区挂载到一个目录就可以了。
[root@localhost ~]# mkdir /test [root@localhost ~]# mount /dev/sda5 /test
此时我们就全部成功了。 注意此时挂载只在当前shell有效,若想是开机后自动挂载可在/etc/fstab文件中添加如下信息:
/dev/sda5 #挂载设备 /test #挂载点 ext4 #设备文件类型 defaults #默认挂载选项 0 #转储频率 0 #自检次序
卸载方法: umount /dev/sda5 #或者是挂载点 /test
4.我们现在可以查看关于新增加的文件系统的信息
[root@localhost ~]# blkid #显示块设备属性 /dev/block/8:2: UUID="50aa3cc7-ffb8-4d3b-98a4-ac5896810534" TYPE="xfs" /dev/block/8:1: UUID="f449ee2d-e77a-43f0-aab1-eadc353c19f9" TYPE="xfs" /dev/block/8:3: UUID="039dd390-88b5-424b-862c-3d68a88bf193" TYPE="swap" /dev/sda5: LABEL="MYDATA" UUID="ae0314bd-b6e8-4e9b-8bb5-507ee5f7770c" TYPE="ext4" [root@localhost ~]# blkid -L 'MYDATA' # 根据对应的LABEL来查看对应的设备 /dev/sda5 [root@localhost ~]# blkid -U 'ae0314bd-b6e8-4e9b-8bb5-507ee5f7770c' # 根据指定的UUID来查找对应的设备 /dev/sda5 [root@localhost ~]# dumpe2fs /dev/sda5 #显示指定块设备的超级块信息及块组信息 -h:只显示超级块信息 [root@localhost ~]# tune2fs -l /dev/sda5 #显示指定块设备的超级块信息 -l:查看指定文件系统超级块信息: -L 'LABEL': 修改卷标 等同于: e2label: 管理ext系列文件系统的LABEL # e2label DEVICE [LABEL] -m #;修改预留给管理员的空间百分比 -j:将ext2升级为ext3 -O:文件系统属性启用或禁用 -o:调整文件系统的默认挂载选项 -U UUID:修改UUID号
5.最后就是文件系统的检测和修复。
[root@localhost ~]# fsck /dev/sda5 #或挂载点,卷名 fsck from util-linux 2.23.2 e2fsck 1.42.9 (28-Dec-2013) MYDATA: clean, 11/327680 files, 120141/5242880 blocks 可以指定文件系统类型:fsck -t ext4 /dev/sda5 fsck.ext4 /dev/sda5 -a:自动修复错误 -r: 交互式修复错误
关于ext系列还有一个专用的命令:
[root@localhost ~]# e2fsck /dev/sda5 e2fsck 1.42.9 (28-Dec-2013) MYDATA: clean, 11/327680 files, 120141/5242880 blocks -y:自动回答yes -f: 强制修复
注意:检查修复是必须先卸载块设备
6.下面我们来说一说swap的创建和使用
mkswap: 创建交换分区 前提:设置分区类型为82 挂载交换分区: 启用:swapon swapon [OPTION]...[DEVICE] -a: 激活所有的交换分区 -p PRIORITY: 指定优先级 禁用:swapoff 内存空间使用状态: free [OPTION] -m:以MB为单位 -g:以GB为单位 Mem:物理内存 -/+ buffers/cache: 加减缓冲或缓存的空间大小。 swap:交换空间大小 文件系统空间占用等信息的查看工具: df: -h: human-readable -i: inodes instead of blocks -P: 以Posix兼容的格式输出
7.最后补充一些命令的使用
mount: 显示当前系统以挂载的所有设备,通过查看/etc/mtab mount [-fnrsvw] [-t vfstype] [-o options] device dir device: 指明要挂载的设备 (1) 设备文件:/dev/sda5 (2) 卷标: -L 'LABEL' (3) UUID: -U (4) 伪文件系统名称:pric, sysfs, devtmpfs, comfigfs dir: 挂载点 事先存在:建议使用空目录 处于工作中的设备无法挂载 常用选项: -t vfstype: 指定要挂载的设备上的文件系统类型 -r: readonly 只读挂载 -w: read and write, 读写挂载 -n: 不更新/etc/mtab -a: 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab,且挂载选项中有“自动挂载选项”) -L 'LABEL';以卷标指定挂载设备 -U 'UUID': 以UUID指定挂载设备 -B:绑定目录到另一个目录上 注意: 查看内核追踪到的以挂载的所有设备:/proc/mounts -o options: (挂载文件系统的选项) async: 异步模式: 写时复制(copy on write) sync: 同步模式 同步I/O:写完后,直接将内存中的数据存储到磁盘上。数据可靠性高,但性能差 异步I/O:写完后,不立即将内存数据存储到磁盘上。可靠性差,但性能高。 atime/noatime:(包含,目录和文件) 更新访问时间戳,若要更改时间戳需在磁盘中修改。所以建议不更新访问时间戳。 diratime/nodiratime: 目录的访问时间戳 auto/noauto: 是否支持自动挂载 exec/noexec: 是否支持将文件系统上应用程序运行为进程,能起到一定范围上的安全防范功能。 dev/nodev: 是否支持在此文件系统上使用设备文件。 suid/nosuid: remount:重新挂载 ro: 只读挂载 rw: 读写挂载 user/nouser;是否允许普通用户挂载设备 acl: 启用此文件系统上的acl功能 注意: 上述选项可多个同时使用,彼此使用逗号分隔: 默认挂载选项:defaults rw,suid,dev.exec,auto,nouser,and async 文件系统空间占用等信息的查看工具: df: -h: human-readable -i: inodes instead of blocks -P: 以Posix兼容的格式输出 查看某目录总体总体空间占用状态 du: du [OPTION] ...DIR -s: sumary -h: human-readable
原创文章,作者:21期-扬州-蓝,如若转载,请注明出处:http://www.178linux.com/24167
评论列表(1条)
写的很好,排版也很漂亮,加油