Linux文件系统
1.文件系统介绍
文件系统filesystem是操作系统内核中负责组织管理磁盘的程序。
在传统的磁盘与档案系统(又称为文件系统filesystem)的应用中,一个磁盘分割槽/分区只能被格式化成为一个文件系统,所以我们可以说一个filesystem就是一个partition分区。但是由于新技术的利用,例如我们常听到的LVM与软体磁盘阵列(software raid,又称软raid),这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM, RAID)!所以说,目前我们在格式化时已经不再说成针对分区来格式化了,通常我们可以称呼一个可被挂载的资料为一个文件系统而不是一个分区!。
linux常见文件系统有xfs、ext4 和 btrfs 文件系统,它们都是日志文件系统(其特点是文件系统将没提交的数据变化保存到日志文件,以便在系统崩溃或者掉电时恢复数据),三者各有优势和劣势:
- btrfs (B-tree 文件系统) 是个很新的文件系统(Oracel 在2014年8月发布第一个稳定版),它将会支持许多非常高大上的功能,比如 透明压缩( transparent compression)、可写的COW 快照(writable copy-on-write snapshots)、去重(deduplication )和加密(encryption )。因此,Ceph 建议用户在非关键应用上使用该文件系统。 更多的参考包括 (1)(2)(3)。
- xfs 和 btrfs 相比较ext3/4而言,在高伸缩性数据存储方面具有优势。
- Ceph 的这篇文章 明确推荐在生产环境中使用 XFS,在开发、测试、非关键应用上使用 btrfs。
- 网上有很多的文章比较这几种文件系统,包括:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T97b34Nq-1623076613084)(img/image-20210410143016586.png)]
ps:windows文件系统格式: FAT32、NTFS
总结
操作系统---------》文件系统 文件系统 文件系统
硬盘------------》 分区1 分区2 分区3
2.文件系统工作原理
文件系统如何工作的呢?
须知一个文件的由两部分内容组成:
- 1、文件的元信息,例如权限(rwx)、拥有者、群组、时间参数等。
- 2、文件的实际内容
文件系统通常会将这两部份的分别存放在不同的区块
- 1、文件的元信息放置到inode区块中
- 2、文件的实际内容则放置到data block区块中。
# 强调:每个inode 与block 都有自己的编号
另外,文件还有一个超级区块(superblock)会记录整个档案系统的整体信息,包括inode与block的总量、使用量、剩余量等。
补充说明:
# 硬盘的最小存取单位-》扇区
# 操作系统的最小存取单位-》block块
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个扇区一个扇区地读取,这样效率太低,于是操作系统中的文件系统负责将磁盘的多扇区组织成一个个的block块,这样操作系统就可以一次性读取一个"块"(block),即一次性连续读取多个扇区。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
总结文件系统的三种区块inode、block、superblock的意义如下:
# 1、superblock:
记录此filesystem的整体信息,包括inoke/block的总量、使用量、剩余量、以及文件系统的格式与相关信息等。
# 2、inode:
记录文件元信息、包括文件对应的一个过多个block块号码
一个文件被分配唯一一个inode
# 3、block:
记录文件实际内容
一个文件过大时可能会被分配多个block块,即一个文件可能对应多个block块的号码,这些号码都存放在该文件的inode里。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EB09TqBt-1623076613090)(img/image-20210410143749259.png)]
举例
[root@localhost ~]# ls -di /
64 /
[root@localhost ~]# ls -di /etc
8388673 /etc
[root@localhost ~]# ls -i /etc/passwd
8769396 /etc/passwd
cat /etc/passwd的整体过程如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pnf1YJm5-1623076613093)(img/image-20210410143816273.png)]
依据上述存取方式的特点,我们通常称ext文件系统为索引式文件系统(indexed allocation)。
3.扩展阅读
inode信息
文件的inode中文译名为"索引节点",是 UNIX 操作系统中的一种数据结构,其本质是结构体。
Inode负责储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小inode 。
从根本上讲, inode 中存放的是除了文件的名字以及文件真实内容之外、所有有关文件的信息/元数据(metadata),如下
● inode 编号
● 用来识别文件类型,以及用于 stat C 函数的模式信息
● 链接数,即有多少文件名指向这个inode。
● 属主的ID (UID)
● 属主的组 ID (GID)
● 文件的字节数
● 文件所使用的磁盘块的实际数目
● 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
● 指向数据块的指针
可以用stat命令,,查看某个文件的inode信息:
[root@localhost ~]# stat egon.txt
文件:"egon.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:803h/2051d Inode:16813492 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2022-12-16 16:25:29.664259627 +0800
最近更改:2022-12-16 16:25:29.664259627 +0800
最近改动: