【Linux】详解文件系统以及周边知识

一、磁盘基础知识

磁盘可以划分为多个环,每个环称为一个磁道。每个磁道又被均分为多个扇区,扇区是磁盘I/O操作的基本单位(如果要修改扇区中的一个比特位,必须将整个扇区加载到内存中)。磁盘的盘面、磁道和扇区都有各自的编号。要访问某个扇区的内容,必须通过磁头先定位到特定的磁道(柱面cylinder),然后确定盘面(磁头head),最后确定磁道上的扇区(sector),这种方法称为CHS定位法。

【Linux】详解文件系统以及周边知识1.1、磁盘逻辑结构的理解 我们可以将磁盘盘面上的每个磁道想象成拉直成一个线性结构。如果将所有磁道和所有盘面拼接在一起,就形成了一个类似磁带的长线性结构。假设磁盘每个盘面的大小为200GB,总共有四个盘面,每个扇区大小为512KB,那么800GB可以被分成1677721600个扇区。如果将这个线性结构视为一个数组,我们可以通过访问扇区对应的数组下标,并通过算法转换为CHS地址来访问该扇区。这种转换工作由磁盘完成。因此,操作系统需要知道磁盘有多少个盘面,每个盘面的大小是多少,每个扇区的大小是多少,每个磁道有多少个扇区。这样,操作系统就可以统一使用线性地址来进行编程,并在访问磁盘数据时将线性地址交给磁盘,由磁盘将其转换为CHS地址,从而实现数据的读取和写入。

【Linux】详解文件系统以及周边知识 二、文件系统底层的实现原理2.1、系统层面的数据块 然而,在操作系统层面上,单次交互一个扇区的数据量被认为过小。文件系统认为I/O操作的基本单位是4KB,即8个扇区(假设)。因此,操作系统和磁盘之间一次最小交换的数据量为8个扇区。操作系统可以将800GB的磁盘重新分块,以8个扇区为一个数据块,第一个数据块的数组下标编号为1,第二个为2,以此类推,这种编址称为LBA地址(Logical Block Address)。当操作系统需要读取或写入某个数据块时,只需将数据块的数组编号乘以8,再加上[0,1,2,3,4,5,6,7],即可找到对应的8个连续扇区。然后将这8个扇区的线性地址交给磁盘,转换为CHS地址,就可以对这8个扇区进行读取或写入。

【Linux】详解文件系统以及周边知识2.2、分区和分组 我们已经讨论了磁盘和操作系统对存储空间的分块问题,接下来探讨操作系统如何管理这800GB的空间。在实际操作中,操作系统不会将这800GB的空间视为一个整体,而是将其划分为多个分区(如我们常见的C盘、D盘、E盘)。每个分区下又有多个分组,通过对一个分组的管理经验应用到其他分组中(当然也可以应用其他管理经验),从而有效管理所有分区和分组。

【Linux】详解文件系统以及周边知识 Linux磁盘文件特性包括文件内容和文件属性,文件属性包括类型、大小、权限、时间、inode编号等(文件名不属于文件属性)。一个文件的inode编号在其所属分区内是唯一的,系统通过inode编号而非文件名来标识文件。文件的内容和属性是分开存储的。在磁盘中,文件属性存储在struct inode结构体中,大小为128字节。操作系统的数据块大小为4KB(如上所述),因此一个数据块可以存储32个struct inode结构体。

2.3、组的管理模式 为了有效管理每个分组中的10GB空间,系统对其进行了模块化管理。

【Linux】详解文件系统以及周边知识 创建文件时,需要在组的inodeBitmap中从左到右遍历,找到第一个非1的比特位,将其置1,并通过该比特位索引到inodeTable中申请一个struct inode结构体,填写相应的属性。然后在Block Bitmap中找到非1的比特位,置1,并将数据填入对应的Data blocks数据块中。删除文件时,只需将其在inode Bitmap和Block Bitmap中占用的比特位置0,而不需要在磁盘中删除所有数据,这是删除文件比下载文件快得多的原因。每个分区的每个分组都有一个起始编号,struct inode结构体的inode编号可以理解为该分组的起始编号加上在inode Bitmap中的偏移量。这样可以确保一个文件的inode编号在其所属分区内是唯一的。

为了将文件的属性和内容建立联系,struct inode结构体中包含一个int block[15]数组,用来表示该分组内哪些数据块属于该文件。block数组下标[0,11]直接保存Data blocks中的编号(一级索引);[12,13]保存的是其他保存数据的数据块编号(二级索引),[14]保存的是三级索引,这样可以有效增加保存文件数据的数据块数量,从而使一个文件能够保存更多的数据。

三、文件的增删查改 在Linux系统中,目录也是文件,其内容中保存了目录中文件的inode编号和文件名之间的映射关系。这就是为什么如果我们对一个目录没有写入权限,就无法在这个目录中创建文件的原因。因为创建文件需要将文件的inode编号和文件名之间的映射关系写入目录的内容中,本质上是修改目录的内容,而操作系统不允许我们进行这种修改。删除文件时,首先通过文件名在当前目录中进行字符串匹配,匹配成功后,将所在分组的inodebitmap和blockbitmap中对应的比特位置0,然后从目录的内容中删除文件名和inode的映射关系,这样文件就被删除了。

四、文件路径 查找文件时,内核会递归地帮助我们找到根目录,从根目录开始解析路径。因为要获取文件的内容,首先需要获取其inode编号,但我们只有文件名。文件名和inode编号存储在文件所在的目录中,因此需要在目录的内容中查找。但是我们也只知道目录名,所以需要继续查找上级目录的inode编号,依此类推,直到找到根目录。根目录的inode编号是系统已知的,因此我们可以逆向找到所有目录的inode编号,从而找到目标文件的inode编号,进而获取文件内容。这就是文件路径最根本的作用。

五、挂载的理解 挂载(Mounting)是指操作系统使存储设备(如硬盘、CD-ROM或网络共享)上的文件和目录可供用户通过文件系统访问的过程。一个写入文件系统的分区要被Linux操作系统使用,必须挂载到一个目录下。分区的访问都是通过挂载路径进行的。通过文件路径的前缀可以知道文件所在的分区。

以上就是【Linux】详解文件系统以及周边知识的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/10138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月12日 17:45:47
下一篇 2025年11月12日 18:35:38

相关推荐

  • Linux中如何安装Nginx服务_Linux安装Nginx服务的完整指南

    首先更新系统软件包,然后通过对应包管理器安装Nginx,启动并启用服务,开放防火墙端口,最后验证欢迎页显示以确认安装成功。 在Linux系统中安装Nginx服务是搭建Web服务器的第一步。Nginx以高性能、低资源消耗和良好的并发处理能力著称,广泛用于静态内容服务、反向代理和负载均衡。以下是在主流L…

    2025年12月6日 运维
    000
  • Linux journalctl与systemctl status结合分析

    先看 systemctl status 确认服务状态,再用 journalctl 查看详细日志。例如 nginx 启动失败时,systemctl status 显示 Active: failed,journalctl -u nginx 发现端口 80 被占用,结合两者可快速定位问题根源。 在 Lin…

    2025年12月6日 运维
    100
  • 华为新机发布计划曝光:Pura 90系列或明年4月登场

    近日,有数码博主透露了华为2025年至2026年的新品规划,其中pura 90系列预计在2026年4月发布,有望成为华为新一代影像旗舰。根据路线图,华为将在2025年底至2026年陆续推出mate 80系列、折叠屏新机mate x7系列以及nova 15系列,而pura 90系列则将成为2026年上…

    2025年12月6日 行业动态
    100
  • Linux如何防止缓冲区溢出_Linux防止缓冲区溢出的安全措施

    缓冲区溢出可通过栈保护、ASLR、NX bit、安全编译选项和良好编码实践来防范。1. 使用-fstack-protector-strong插入canary检测栈破坏;2. 启用ASLR(kernel.randomize_va_space=2)随机化内存布局;3. 利用NX bit标记不可执行内存页…

    2025年12月6日 运维
    000
  • Linux如何优化系统性能_Linux系统性能优化的实用方法

    优化Linux性能需先监控资源使用,通过top、vmstat等命令分析负载,再调整内核参数如TCP优化与内存交换,结合关闭无用服务、选用合适文件系统与I/O调度器,持续按需调优以提升系统效率。 Linux系统性能优化的核心在于合理配置资源、监控系统状态并及时调整瓶颈环节。通过一系列实用手段,可以显著…

    2025年12月6日 运维
    000
  • Pboot插件数据库连接的配置教程_Pboot插件数据库备份的自动化脚本

    首先配置PbootCMS数据库连接参数,确保插件正常访问;接着创建auto_backup.php脚本实现备份功能;然后通过Windows任务计划程序或Linux Cron定时执行该脚本,完成自动化备份流程。 如果您正在开发或维护一个基于PbootCMS的网站,并希望实现插件对数据库的连接配置以及自动…

    2025年12月6日 软件教程
    000
  • Linux命令行中wc命令的实用技巧

    wc命令可统计文件的行数、单词数、字符数和字节数,常用-l统计行数,如wc -l /etc/passwd查看用户数量;结合grep可分析日志,如grep “error” logfile.txt | wc -l统计错误行数;-w统计单词数,-m统计字符数(含空格换行),-c统计…

    2025年12月6日 运维
    000
  • Linux命令行中fc命令的使用方法

    fc 是 Linux 中用于管理命令历史的工具,可查看、编辑并重新执行历史命令。输入 fc 直接编辑最近一条命令,默认调用 $EDITOR 打开编辑器修改后自动执行;通过 fc 100 110 或 fc -5 -1 可批量编辑指定范围的历史命令,保存后按序重跑;使用 fc -l 列出命令历史,支持起…

    2025年12月6日 运维
    000
  • Vue.js应用中配置环境变量:灵活管理后端通信地址

    在%ignore_a_1%应用中,灵活配置后端api地址等参数是开发与部署的关键。本文将详细介绍两种主要的环境变量配置方法:推荐使用的`.env`文件,以及通过`cross-env`库在命令行中设置环境变量。通过这些方法,开发者可以轻松实现开发、测试、生产等不同环境下配置的动态切换,提高应用的可维护…

    2025年12月6日 web前端
    000
  • VSCode终端美化:功率线字体配置

    首先需安装Powerline字体如Nerd Fonts,再在VSCode设置中将terminal.integrated.fontFamily设为’FiraCode Nerd Font’等支持字体,最后配合oh-my-zsh的powerlevel10k等Shell主题启用完整美…

    2025年12月6日 开发工具
    000
  • Linux命令行中locate命令的快速查找方法

    locate命令通过查询数据库快速查找文件,使用-i可忽略大小写,-n限制结果数量,-c统计匹配项,-r支持正则表达式精确匹配,刚创建的文件需运行sudo updatedb更新数据库才能查到。 在Linux命令行中,locate 命令是快速查找文件和目录路径的高效工具。它不直接扫描整个文件系统,而是…

    2025年12月6日 运维
    000
  • Linux文件系统rsync命令详解

    rsync通过增量同步高效复制文件,支持本地及远程同步,常用选项包括-a、-v、-z和–delete,结合SSH可安全传输数据,配合cron可实现定时备份。 rsync 是 Linux 系统中一个非常强大且常用的文件同步工具,能够高效地在本地或远程系统之间复制和同步文件与目录。它以“增量…

    2025年12月6日 运维
    000
  • Linux systemctl list-dependencies命令详解

    systemctl list-dependencies 用于查看 systemd 单元的依赖关系,帮助排查启动问题和优化启动流程。1. 基本语法为 systemctl list-dependencies [选项] [单元名称],默认显示 default.target 的依赖。2. 常见单元类型包括 …

    2025年12月6日 运维
    000
  • 如何在mysql中分析索引未命中问题

    答案是通过EXPLAIN分析执行计划,检查索引使用情况,优化WHERE条件写法,避免索引失效,结合慢查询日志定位问题SQL,并根据查询模式合理设计索引。 当 MySQL 查询性能下降,很可能是索引未命中导致的。要分析这类问题,核心是理解查询执行计划、检查索引设计是否合理,并结合实际数据访问模式进行优…

    2025年12月6日 数据库
    000
  • 如何在mysql中安装mysql插件扩展

    安装MySQL插件需先确认插件文件位于plugin_dir目录,使用INSTALL PLUGIN命令加载,如INSTALL PLUGIN keyring_file SONAME ‘keyring_file.so’,并确保用户有SUPER权限,最后通过SHOW PLUGINS验…

    2025年12月6日 数据库
    000
  • VSCode性能分析与瓶颈诊断技术

    首先通过资源监控定位异常进程,再利用开发者工具分析性能瓶颈,结合禁用扩展、优化语言服务器配置及项目设置,可有效解决VSCode卡顿问题。 VSCode作为主流的代码编辑器,虽然轻量高效,但在处理大型项目或配置复杂扩展时可能出现卡顿、响应延迟等问题。要解决这些性能问题,需要系统性地进行性能分析与瓶颈诊…

    2025年12月6日 开发工具
    000
  • 如何在mysql中定期清理过期备份文件

    通过Shell脚本结合cron定时任务实现MySQL过期备份文件自动清理,首先统一备份命名格式(如backup_20250405.sql)并存放在指定目录(/data/backup/mysql),然后编写脚本使用find命令删除7天前的.sql文件,配置每日凌晨2点执行的cron任务,并加入日志记录…

    2025年12月6日 数据库
    000
  • Linux文件系统中的ext4与xfs对比

    ext4适合通用场景,稳定性强,兼容性好,适用于桌面和中小型服务器;XFS擅长大规模高并发I/O,扩展性强,适用于大文件与高性能需求环境。 在Linux系统中,ext4和XFS是两种广泛使用的文件系统,各自适用于不同的使用场景。选择哪一个取决于性能需求、数据规模以及工作负载类型。 设计目标与适用场景…

    2025年12月6日 运维
    000
  • 如何在Linux中处理磁盘满的问题?

    先使用df -h和du命令定位占用空间的目录或文件,再清理日志、缓存等可删除内容,并通过定期任务和监控预防问题复发。 当Linux系统提示磁盘空间不足时,关键是要快速定位问题源头并释放空间。以下是实用的排查和处理步骤。 检查磁盘使用情况 使用df命令查看各分区的使用情况: df -h:以易读方式显示…

    2025年12月6日 运维
    000
  • Linux命令行中free命令的使用方法

    free命令用于查看Linux内存使用情况,包括总内存、已用、空闲、共享、缓存及可用内存;使用-h可读格式显示,-s周期刷新,-c限制次数,-t显示总计,帮助快速评估系统内存状态。 free命令用于显示Linux系统中内存和交换空间的使用情况,包括物理内存、已用内存、空闲内存以及缓存和缓冲区的占用情…

    2025年12月6日 运维
    000

发表回复

登录后才能评论
关注微信