Linux的修仙之路——文件系统

文件系统简介

概述

  • 文件系统是磁盘上有特定格式的一片区域,操作系统利用文件系统保存和管理文件
  • 不同的操作系统需要使用不同的文件系统
  • 磁盘或分区需要创建文件系统之后才能为操作系统使用
  • 创建文件系统的过程又称为格式化
  • 没有文件系统的设备又称为裸设备(raw)

常见的文件系统

FAT32NTFSextext2ext3
ext4jsfprocxfsswap
vfatReiserFSISO9660

各个文件系统区别:日志、支持分区大小、支持的单个文件大小、性能

  • Windows主流NTFS
  • Linux主流EXT3、EXT4

Linux文件系统

Linux 文件系统会为每个文件分配两个数据结构:索引节点(index node)和目录项(directory entry),它们主要用来记录文件的元信息和目录层次结构。

  • 索引节点
    也就是 inode,用来记录文件的元信息,比如 inode 编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置等等。索引节点是文件的唯一标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间。
  • 目录项
    也就是 dentry,用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成目录结构,但它与索引节点不同的是,目录项是由内核维护的一个数据结构,不存放于磁盘,而是缓存在内存。

磁盘读写的最小单位是扇区,扇区的大小只有 512B 大小,文件系统把多个扇区组成了一个逻辑块,每次读写的最小单位就是逻辑块(数据块),Linux 中的逻辑块大小为 4KB,也就是一次性读写 8 个扇区,这将大大提高了磁盘的读写的效率。

文件系统详解

ext文件系统结构的核心组成部分是超级块、索引节点表、数据块

超级块,用来存储文件系统的详细信息,比如块个数、块大小、空闲块等等。 - 索引节点区,用来存储索引节点; - 数据块区,用来存储文件或目录数据;
在这里插入图片描述
在这里插入图片描述

文件系统简介
extext是第一个专门为Linux的文件系统类型,叫做扩展文件系统
ext2ext2是为解决ext的缺陷而设计的可扩展、高性能的文件系统,又称二级扩展文件系统,存储性能极好,可以支持256字节的长文件名,但是写入文件内容的同时并没有同时写入文件的meta-data(如权限、所有者、创建和访问时间),文件上容量上限2048GB
ext3ext3是有开放资源社区开发的日志文件系统,在ext2基础上加入了记录元数据的日志功能。不能提高文件数据处理速度和解压的高性能
ext4ext4是一种针对ext3系统的扩展日志式文件系统,能提供系统更高的性能,消除存储限制,和获取新的功能,并且提供了很好的兼容性;ext4不需要重新格式化分区,ext4会在新的数据上用新的文件结构,旧的文件保留原状.最大支持1EB文件系统,和单个16TB文件,无限制数目的子目录。使用多块分配减少系统开销
JOURNAL日志带日志的文件系统(ext3、ext4)拥有较强的稳定性,在出现错误时可以进行恢复。使用带日志的文件系统,文件系统会使用一个叫做”两阶段提交"的方式进行磁盘操作,当进行磁盘操作时,文件系统进行以下操作:(1)文件系统将准备的执行的事务的具体内容写入日志;(2)文件使用进行操作;(3)操作成功后,将事务的具体内容从日志中删除〉日志的好处:当事务执行的时候,如果出现意外(断电,磁盘故障),可以通过查询日志进行恢复操作。缺点:会丧失一定的性能(额外的日志读写操作)
jsfjsf提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的,也是一个有大量用户安装使用的企业级文件系统。它具有可伸缩性和健壮性,与非日志文件系统相比,它的优点是其快速重启能力: Jsf能够在几秒或几分钟内就把文件系统恢复到一致状态。虽然jsf主要是为满足服务器(从单处理器系统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计的,jsf还可用于想得到高性能和可靠性的客户机配置因为在系统崩溃时,jsf能提供快速文件系统重启时间,所以它是因特网文件服务器的关键技术。jsf的缺点:使用jsf日志文件系统,性能上会有一-定损失,系统资源占用的比率也偏高。是因为当它保持一一个日志时,系统需要写许多数据。
ReiserFS 3.6.xReiserFS 3.6.x (作为Linux 2.4一部分的版本)有助于创建独立的共享环境或者命名空间的文件系统,应用程序可以在其中更直接、有效和有力地相互作用。使用了特殊的优化b*平衡树(每个文件系统 一个)来组织所有的文件系统数据。这为其自身提供了非常不错的性能改进,也能够减轻文件系统设计上的人为约束。同时被看作是一个更加激进和现代的文件系统。传统的UNIX文件系统是按盘块来进行空间分配的,对于目录和文件等的查找使用了简单的线性查找。这些设计在当时是合适的,但随着磁盘容量的增大和应用需求的增加,传统文件系统在存储效率,速度和功能上已显落后。
xfsxfs是一种非常优秀的日志文件系统,它是SGI公司设计的。被称为业界最先进的、最具可升级性的文件系统技术。它是一个全64位快速、稳固的日志文件系统,多年用用于SGI的IRLX操作系统。SGI的xfs可为linux和开放资源社区带来的新特性有:可升级性:xfs被设计成可升级,以面对大多数的存储容量和i/0存储需求,可处理大型文件和包含巨大数量文件的大型自录,满足二十一世纪快速增长的磁盘需求。xfs有能力动态地为文件分配索引空间,使系统形成高效支持大数量文件的能力。在它的支持下用户可使用1 exabyte (1gx 1gb)大的文件,远远天于现在最大的文件系统。优秀的i/o性能:.典型的现代服务器使用大型的条带式磁盘阵列,以提供达数gb/秒的总带宽。XfS可以很好地满足I/O请求的大小和并发I/O请求的数量。xfs可作为root文件系统,并被lilo支持。
swapswap文件系统是Linux的交换分区所采用的文件系统。在Linux中使用交换分区管理内存的虚拟交换空间。一般交换分区的天小设置为系统物理内存的2倍。在安装Linux操作系统时必须建立交换分区,并且其文件系统类型必须为swap。交换分区由操作系统自行管理。
vfatvfat文件系统是Linux下对DOS、Windows操作 系统下的FAT1 6和FAT32文件系统的统称。Linux支持FAT1 6和FAT32格式的分区,也可以创建和管理FAT分区。
NFSNFS即网络文件系统,用于UNIX系统间通过网络进行文件共享,用户可以把网络中NFS服务器提供的共享自录挂载到本地目录下,可以向访问本地文件系统中的内容一样访问NFS文件系统中的内容。
ISO 9660ISO 9660是光盘所使用的标准文件系统,Linux系统对该文件系统有很好的支持,不仅能读取光盘中的内容而且还可以支持光盘刻录功能。

磁盘分区

一块硬盘可以被划分成一个或多个逻辑磁盘,我们将其称作分区。我们对硬盘进行的划分信息被储存于建立在扇区 0 的分区表(MBR 或 GPT)中。
Linux 需要至少一个分区来当作根文件系统,所以我们不能在没有分区的情况下安装 Linux 系统。当我们创建一个分区时,我们必须将它格式化为一个适合的文件系统,否则我们就没办法往里面储存文件了。

fdisk命令

fdisk 的意思是 固定磁盘(Fixed Disk) 或 格式化磁盘(Format Disk),它是命令行下允许用户对分区进行查看、创建、调整大小、删除、移动和复制的工具。fdisk 允许我们在每块硬盘上创建最多四个主分区。它们中的其中一个可以作为扩展分区,并下设多个逻辑分区。1-4 扇区作为主分区被保留,逻辑分区从扇区 5 开始。

[root@localhost beinan]# fdisk /dev/sda
Command (m for help): 在这里按 m ,就会输出帮助;
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition 
注:这是删除一个分区的动作;
l list known partition types 
注:l 是列出分区类型,以供我们设置相应分区的类型;
m print this menu 
注:m 是列出帮助信息;
n add a new partition 
注:添加一个分区;
o create a new empty DOS partition table
p print the partition table 
注:p 列出分区表;
q quit without saving changes 
注:不保存退出;
s create a new empty Sun disklabel
t change a partition's system id 
注:t 改变分区类型;
u change display/entry units
v verify the partition table
w write table to disk and exit 
注:把分区表写入硬盘并退出;
x extra functionality (experts only) 
注:扩展应用,专家功能;
  • fdisk -l 查看磁盘情况
  • fdisk /dev/sda 对硬盘等设备操作

如果删除了扩展分区,扩展分区之下的逻辑分区都会删除;所以操作时一定要小心;如果知道自己操作错了,请不要惊慌,用q不保存退出!

创建文件系统

mke2fs用来创建文件系统

格式:mke2fs -t ext4 /dev/sdb1
常用参数

参数作用
-bblocksize指定文件系统块大小
-c指定文件系统时检查块损坏
-Llable指定卷标
-j建立文件系统的日志

mkfs用来创建文件系统

格式:mkfs.ext4 /dev/sdb1
常用参数

参数作用
-t指定要创建的文件系统类型
-c建立文件系统前首先检查坏块
- lfile从文件中读磁盘坏块列表,file文件一般都是由磁盘坏块检查程序产生的
-V输出建立文件系统详细信息

dumpe2fs查看分区的文件系统信息

格式:dumpe2fs /dev/sdb1

e2label给文件系统添加标签

格式:
e2label /dev/sdb1 显示sdb1系统标签
e2label /dev/sdb1 LINUXLI 将sdb1系统标签设置为LINUXLI

fsck检查并修复损坏文件系统
格式:fsck /dev/sdb1
常用参数

参数作用
-y不提示直接修复
-t指定文件系统类型(损坏较大时使用)
-s一个一个地执行fsck命令进行检查
-A对/etc/fstab中所有列出来的分区进行检查
-C显示完整的检查进度
-d列出fsck的debug结果
-P在同有-A选项时,多个fsck的检查一起执行
-a如果检查中发现错误,则自动修复
-r如果检查有错误,询问是否修复

损坏数据放入lost+found目录
系统启动时会对磁盘进行fsck操作

挂载文件系统

  • 磁盘或分区创建好文件系统之后,需要挂在到一个目录上才能够使用
  • Windows和Mac系统会自动进行挂载

手动挂载

mount命令

格式:mount /dev/sdb1(要挂载的分区) /mnt(挂载点)
常用参数
不带参数的mount命令会显示所有已挂载的文件系统

参数作用
-t指定文件系统的类型
-o指定挂载选项
ro,rw以只读或读写形式挂载,默认是rw
sync代表不使用缓存,而是对所有操作直接写入磁盘 async 代表使用缓存,默认是async
noatime代表每次访问文件时不更新文件的访问时间
atime代表每次访问文件时更新文件的访问时间 remount 重新挂载文件系统

卸载已挂载文件系统
umount命令

格式:umount /dev/sdb1
如果出现device is busy报错,说明该文件系统正在使用,可以查看文件系统进程:fuser -m /dev/sdb1
也可以使用losf查看正在被使用的文件:lsof /dev/sdb1

自动挂载

在这里插入图片描述
要挂载的设备也可以使用LABEL进行识别,使用LABEL=LINUXLI取代/dev/sdb1
mount -a 命令会挂载所有fstab中定义的自动挂载项

配套练习

子项目1.创建/dev/sdb1和/dev/sdb5
● 使用fdisk命令创建/dev/sdb1主分区。
● 使用fdisk命令创建/dev/sdb2扩展分区。
● 使用fdisk命令创建/dev/sdb5逻辑分区。
● 输入子命令w,把设置写入硬盘分区表,退出fdisk并用partprobe让修改立刻生效。
● 用mkfs命令在上述刚刚创建的分区上创建ext4文件系统和vfat文件系统。
● 用fsck命令检查上面创建的文件系统。

答案

fdisk /dev/sdb n(添加新分区) p(主分区) 1(分区编码) +3G(分区大小) p(查看分区表)
fdisk /dev/sdb n(添加新分区) e(主分区) 2(分区编码) +2G(分区大小) p(查看分区表)
fdisk /dev/sdb n l 5 +2G p
w partprobe fidisk -l(查看)
mkfs -t ext4 /dev/sdb1、mkfs -t vfat /dev/sdb5
fsck -a /dev/sdb1、fsck -a /dev/sdb5

子项目2.挂载/dev/sdb1和/dev/sdb5
● 利用mkdir命令,在/mnt目录下建立挂载点,sdb1和sdb5。
● 把上述新创建的ext4分区挂载到/mnt/sdb1上。
● 把上述新创建的vfat分区挂载到/mnt/sdb5上。
● 利用mount命令列出挂载到系统上的分区,查看挂载是否成功。
● 利用umount命令卸载上面的两个分区。

答案
cd /mnt、mkdir sdb1 、mkdir sdb5
mount /dev/sdb1 /mnt/sdb1
mount -t vfat /dev/sdb5 /mnt/sdb5
mount -l
umount /mnt/sdb1、umount /mnt/sdb5

子项目3.实现/dev/sdb1和/dev/sdb5的自动挂载
● 编辑系统文件/etc/fstab文件,把上面两个分区加入此文件中。
● 重新启动系统,显示已经挂载到系统上的分区,检查设置是否成功。

答案
vi /etc/fstab、/dev/sdb1 /mnt/sdb1 ext4 defaults 1 2、/dev/sdb5 /mnt/sdb5 ext4 defaults 1 2
cd /mnt、df

[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Oct 5 15:21:46 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=546c4e25-7b06-468b-89a1-e66280c4ee98 /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

补充:
第一字段:分区设备文件名或UUID

1.UUID为硬盘通用唯一识别码
2.查看UUID方法:

[root@localhost ~]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root
    6.5G 1.6G 4.7G 26% /
    tmpfs 246M 0 246M 0% /dev/shm
    /dev/sda1 477M 28M 425M 7% /boot
    
    [root@localhost ~]# dumpe2fs -h /dev/sda1
    Filesystem UUID: 546c4e25-7b06-468b-89a1-e66280c4ee98

3.之前系统都是用的分区设备文件名,后来才兼容了UUID
  
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区是否被dump备份,0:否,1:每天备份,2:不定期备份
第六字段:指定分区是否被fsck检测,0:否,其他数字代表检测优先级,1高

1.分区自动挂载:

 a.[root@localhost ~]# vi /etc/fstab
	/dev/sdb5 /disk5 ext4 defaults 1 2
 b.[root@localhost ~]# mount -a
 c.[root@localhost ~]# reboot

2.这个文件很危险,如果写错了,系统就无法启动
    a.根分区写错了——彻底跪了
    b.其他分区写错了
      1.系统启动会报错,然后提示你输入root密码
      2.进入root后修改/etc/fstab文件,把错的改对就好了
        如果提示文件是只读的,即使是root也改不了:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠笙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值