Linux 文件系统
文件系统
Linux 使用了树形文件存储结构,在磁盘上存储文件的时候,使用的则是目录加文件的形式。但实际上,对于磁盘等各种存储设备来说,无论是什么数据,都只有0和1的概念。但是对用于而言,0和1毫无意义。这时候就需要一种类似于"翻译"的机制存在于用户和磁盘之间(我的理解就是将0和1转换成为我们看到的文件的形式)。
在Linux中采用的是文件系统+虚拟文件系统(virtual File System,VFS)的解决方案。
什么是文件系统
文件系统是操作系统用于明确磁盘或分区上相关文件的方法和数据结构。
我的理解是:
将逻辑上的属于写入物理的设备,然后以用户能够理解的方式展现于屏幕上的方法。
在使用前,都需要针对磁盘做初始化操作,并将记录的数据结构写入磁盘,这种操作就是建立文件系统,在有些操作系统中称之为格式化。
Linux 支持多种不同的文件系统,但大多数Linux系统都具有类似的通用结构,包括如下结构:
- 超级块(superblock)
- i 节点(inode)-
- 数据块(data block)
- 目录块(directory block)
块 | 作用 |
---|---|
超级块 | 包含文件系统的总体信息,是文件系统的核心,所以在磁盘中会有多个超级块,以防止由于磁盘出现坏块导致全部文件无法使用 |
i 节点 | 存储所有与文件有关的元数据,也就是文件所有者、权限等属性数据以及指向的数据块,但是不包括文件名和文件内容 |
数据块 | 是真实存放文件数据的部分,一个数据块默认情况下是 4KB |
目录块 | 包括文件名和文件在目录中的位置,并包括文件的 i 节点数据 |
ext2 文件系统简介
在 Ext2 出现之前,Linux 采用的是 minix 。
但是它存在局限性,比如文件名最长仅支持14个字符,文件最大为64MB等。
Ext2 的原理:
采取的方法是将文件数据存放在数据块中,这些数据块的大小可以在创建文件系统的时候指定。对于存放的每个文件和莫露露,都会有一个 inode 指定,文件系统中所有的 inode 都是使用 inode 表来进行记录的。一定数量的块就会被组成一个块组。
在Ext2文件系统中,整个分区的文件系统信息被存放在超级块中,考虑到超级块的重要性,因此在每个块组的开头中都有相同的备份。
Ext2 的优缺点
优点:
Ext2 有着极好的存储性能,所以曾一度成为 Linux 中的标准文件系统。
缺点:
不支持日志功能,这很容易造成一些情况下丢失数据。
ext3文件系统简介
为了弥补ext2文件系统的不足,有日志功能的ext3文件系统应运而生了。它直接从ext2文件系统发展而来,所以完全兼容ext2文件系统,而且支持从ext2非常简单地(只需要两条命令)转换为ext3,这种特性让更多的老用户转为使用 ext3 文件系统。
为什么需要日志文件系统。
因为在写入数据之前,会先写入日志。在出现问题的时候,可以追溯原因。而Ext2修复文件系统时,需要遍历整个文件系统。因此相比后者,前者节省了大量的时间。且对系统做了优化,在性能上不会比 ext2 低。
磁盘分区、创建文件系统、挂载
磁盘使用前需要对其进行分割,这种行为被称为“分区”。
磁盘的分区分为两类,即主分区和扩展分区。
受限于磁盘分区表的大小(MBR大小为512字节,其中分区表占64字节),由于每个分区信息使用16字节,所以一块磁盘最多只能创建4个主分区,为了能够支持更多分区,可以使用扩展分区(在扩展分区中可以划分更多逻辑分区),但是即使如此,分区还是要受主分区+扩展分区最多不能超过4个的限制。
在完成磁盘分区后,需要进行创建文件系统的操作,最后将该分区挂载到系统中的某个挂载点才可以使用。
创建文件系统
fdisk -l // 查看磁盘
fdisk /dev/sdb // 分区
mkfs -t ext3 /dev/sdb1 // 格式化,创建文件系统
磁盘挂载
mkdir newDisk // 新建一个目录
mount DEVICE MOUNT_POINT // 挂载设备,挂载点为一个目录
mount // 默认为显示所有挂载
设置启动自动挂载
之前的挂载只是暂时的,需要配置 /etc/fstab 使得系统在重启后自动挂载
这样,以后系统重启时,设备就会自动挂载了。
磁盘检验
umount /dev/sdb1 // 取消挂载
或者
umount /root/newDisk
当磁盘出现逻辑错误的时候,可以使用 fsck 命令来修复
fsck -t ext3 /dev/sdb1
如果系统的根文件出现问题需要修复,则需要重启计算机,当系统在重启时检测到根文件出现问题,会提示用户输入root密码进入单用户模式,这样就可以使用 fsck 来修复根目录了。
与 fsck 不同,badblocks 主要是用来检测磁盘的物理坏道的,使用这个命令其实更多的只是确认磁盘是否有坏道,所以平时使用的较少,往往只是在怀疑磁盘有坏道的时候才会使用。
badblocks -v /dev/sdb1
Linux 逻辑卷
当磁盘不够用的时候,需要使用逻辑卷来补充磁盘容积。
什么是逻辑卷
卷 | 含义 |
---|---|
物理卷 | 物理磁盘分区,例如 /dev/sdb1 |
卷组 | 物理卷的集合 |
逻辑卷 | 从物理卷中划分出来的一块逻辑磁盘 |
创建逻辑卷
TODO 这里将要写入如何创建逻辑卷
硬链接和软链接
TODO 这里将要写入关于硬链接和软链接