Linux 文件系统

简介: Linux 文件系统

文件系统的作用#



数据存放在硬盘中, 但是linux不会让用户直接针对磁盘进行操作,这太底层了,对用户说,想存储个文件还得去学学硬盘的构成??? linux推出文件系统作为用户和底层针对磁盘读写之间的缓冲,


文件系统是一种结构, 用来组织管理文件, 比如磁盘的可用信息, 已占用和剩下的空间


常见的文件系统#


名称 描述
ext2 Linux基本文件系统
ext3 ext2的增强版本
ext4 ext文件系统的第四个版本,centos6常用
xfs centos7使用
swap 交换文件系统
nfs 网络文件系统,适合Linux或Unix机器间共享
smbfs 适合Linux或Unix和windows机器间共享
vfat windows早期文件系统
ntfs windows默认文件系统,功能非常强大
so9660 CD光盘的只读文件系统
GFS google专用存储海量搜索数据而设计的专用文件系统
reiserfs 早期linux使用的日志功能的文件系统


VFS(虚拟文件系统)#


Linux支持多文件系统

Linux内核是采用 vfs 虚拟文件系统,通过这个中间层对各类文件系统提供了完美的支持,对于用户来说,这些文件系统几乎是透明的,用户不再需要关系底层的文件系统的具体实现


VFS 基本结构#


  • super block
  • dentry
  • inode
  • data


什么是 块?#


若干个物理相邻的扇区成为一个块, 文件系统每次读取的数据都是按照快为单位的,每次读取一个块 ,这就引发了一个问题, 块划分的越小,空间的利用率就越高,但是读写的性能就降低, 块划分的越大,可能就会出现空间浪费严重的情况,但是读写性能好

一般默认每一块大小 4k


Super block 超级块#


超级块是文件系统中存放的第一个块,如果它被破坏了,文件系统就完蛋了, 因为它存储了文件系统的整体信息, 包括inode/block,以及文件系统的格式


Inode 索引节点#


索引节点保存的就是文件的元数据, 比如文件大小,文件所有者,文件属性,权限,文件读取,修改的时间戳等, 与此同时,它还记录了文件的数据所在的block号码和文件类型

文件数据 = 元数据+数据本身

一般inode的数量在格式化时就已经确定了,一般的都是2kb大小, 当我们创建一个目录, 这个目录下能存储的文件数=inode数, 并且一般是使用不完的

inode号是唯一的,表示不同的文件,Linux内核访问文件也是通过inode号来实现的, 所谓的文件名,其实就是inode的别名,作用就是方便给用户看

linux如何找到指定的文件?

linux系统根据文件名找到这个文件的inode号,拿着这个inode号去 inode table 中查找pointer指针,找到指定的blocks数据块



dentry 目录项#


目录项是描述文件的逻辑属性,只存在内存中,有了它可以提高查询的性能,不管是目录和文件,他们都属于dentry目录项所有的目录项在一起组成了一颗庞大的目录树


目录也是文件,也存在自己的inode, 打开目录 = 打开目录文件


例: 用户查询 /opt/data/a.txt

其中的 / opt/ data/ a.txt 都是目录项, VFS 会从/开始的inode开始,层层找到a.txt 的inode


链接文件#


硬链接文件#


不同的文件名,拥有相同的inode,实际上就是给inode取了多个别名,但是对于内核来说, 他俩其实就是一个文件


ln  [原文件] [目标文件]
ln  a.txt  a.hard 
101226430 -rw-r--r--. 2 root root   0 Sep  5 01:35 a.hard
101159754 lrwxrwxrwx. 1 root root   5 Sep  5 02:33 a.soft -> a.txt
101226430 -rw-r--r--. 2 root root   0 Sep  5 01:35 a.txt


软链接文件#


相当于window里面的快捷方式,一方存储的是另一方的inode信息

软链接的文件有自己的inode,里面存放源数据的路径

软连接是可以跨文件系统的


查看当前文件系统挂载磁盘的情况#



df#


格式: df [可选项] [设备名]

  • -a: 列出全部文件系统
  • -i: 显示文件系统的inode信息
  • -h: 显示单位(K M)
  • -T: 列出文件系统的类型

查看系统上block块信息, 上图的右半部分


[root@localhost tmp]# df
Filesystem                      1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00  39269648 2867700  36401948   8% /
devtmpfs                           930152       0    930152   0% /dev
tmpfs                              942028       0    942028   0% /dev/shm
tmpfs                              942028   16896    925132   2% /run
tmpfs                              942028       0    942028   0% /sys/fs/cgroup
/dev/sda2                         1038336   90448    947888   9% /boot
tmpfs                              188408       0    188408   0% /run/user/0


df -i 看到的是左边的使用情况


[root@localhost tmp]# df -i
Filesystem                        Inodes IUsed    IFree IUse% Mounted on
/dev/mapper/VolGroup00-LogVol00 19644416 66185 19578231    1% /
devtmpfs                          232538   337   232201    1% /dev
tmpfs                             235507     1   235506    1% /dev/shm
tmpfs                             235507   442   235065    1% /run
tmpfs                             235507    16   235491    1% /sys/fs/cgroup
/dev/sda2                         524288   328   523960    1% /boot
tmpfs                             235507     1   235506    1% /run/user/0


mount#


能看全部内容


[root@localhost tmp]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930152k,nr_inodes=232538,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
.....


修复文件系统#


出现非正常开关机,突然断电,设备的读写失误导致了文件系统中supper-block被破坏了,需要修复


命令: fsck (file system check)

格式: fsck [可选项-t] [文件系统类型] [分区设备]

-y: 自动输入yes


例:

对/dev/sdb1分区进行修复
fsck -yt ext3 /dev/sdb1


卸载文件系统#


格式:


umount  存储设备位置  
umount  挂载点目录


可能的无法卸载的原因:

  • 设置正在被使用
  • 提示“... device is busy”

退出到这个文件系统外部去,重试卸载

通过 fuser 命令找到哪个进程在使用这个文件系统, kill掉它


假设无法卸载的设备为/dev/sdb1 
1)运行下面命令看一下哪个用户哪个进程占用着此设备 
fuser -m -v /dev/sdb1
2)运行下面命令杀掉占用此设备的进程 
fuser -m -v -k /dev/sdb1 
或者fuser -m -v -k -i  /dev/sdb1(每杀掉一下进程会让你确认) 
3)再umount


配置开机自动挂载的文件系统#


/etc/fstab 配置文件


[root@localhost tmp]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Apr  6 12:25:22 2017
#
# 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/VolGroup00-LogVol00 /                       xfs     defaults        0 0
UUID=7a0b4526-ffc0-4a51-9a43-d701c30d7c4f /boot                   xfs     defaults        0 0
/dev/mapper/VolGroup00-LogVol01 swap                    swap    defaults        0 0
[root@localhost tmp]#


例:

将/dev/sdb1分区挂载到/mailbox目录


[root@localhost ~]# vi /etc/fstab
/dev/sdb1        /mailbox        ext3        default        0    0


其他文件系统的命令#


du命令#


统计(文件系统级别)的目录及文件的空间占用情况

格式: du [选项] [目录/文件名]

  • -a: 统计时包含全部文件
  • -h: 用人类可读的方式显示结果(带单位)
  • -s: 只统计每个参数占用空间大小

例:统计/tmp 目录下的容量


[root@localhost tmp]# du -sh /tmp
48K /tmp


查看目录的inode信息#


命令: stat

格式: stat [选项] 文件名

-f:显示文件所在文件系统的信息


[root@localhost tmp]# stat /tmp
  File: ‘/tmp’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fd00h/64768d  Inode: 100663365   Links: 11
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:tmp_t:s0
# 访问时间,数据每次被阅读后更新
Access: 2019-09-05 07:18:54.331593449 +0000
# 数据的修改时间
Modify: 2019-09-05 07:50:41.397713275 +0000
# 文件的inode节点被改变时更新
Change: 2019-09-05 07:50:41.397713275 +0000
 Birth: -
相关文章
|
9天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
47 15
|
14天前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
106 7
|
14天前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
33 7
|
1月前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
2月前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
93 8
|
2月前
|
存储 Linux 文件存储
Linux文件系统
Linux文件系统 一切皆文件 在Linux中,“一切皆文件”的概念意味着系统中的所有资源,包括硬件设备、目录及进程等,均被视为文件。这种设计简化了操作和管理,具体包括: 普通文件:存储数据的常规文件。 目录文件:包含其他文件和子目录的文件。 进程文件:在/proc目录下代表系统中运行的进程。 设备文件:位于/dev目录,代表硬件设备。 网络字节流套接字文件:用于网络通信的数据流。 链接文件:指向另一个文件的符号链接或硬链接。 管道文件:用于进程间通信的文件。
59 7
|
5月前
|
编解码 Linux 程序员
深度探索Linux操作系统 —— 构建根文件系统2
深度探索Linux操作系统 —— 构建根文件系统
59 12
|
4月前
|
存储 Linux 索引
Linux 下最主流的文件系统格式——ext
【9月更文挑战第8天】硬盘被划分为若干相同大小的块(Block),默认大小为4K,便于灵活管理文件数据。文件数据分散存放于这些块中,提高了数据添加、删除和插入的便利性。
|
5月前
|
Linux Shell 网络安全
深度探索Linux操作系统 —— 构建根文件系统1
深度探索Linux操作系统 —— 构建根文件系统
71 6
|
5月前
|
存储 人工智能 数据管理
深入理解Linux操作系统之文件系统管理探索人工智能:从理论到实践的旅程
【8月更文挑战第30天】在探索Linux的无限可能时,我们不可避免地会遇到文件系统管理这一核心话题。本文将深入浅出地介绍Linux文件系统的基础知识、操作命令及高级技巧,帮助你更有效地管理和维护你的系统。从基础概念到实践应用,我们将一步步揭开Linux文件系统的神秘面纱。