新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux系统——文件(上)

发布时间:2026/9/29 11:03:53来源:尧图网络
Linux系统——文件(上)
‍♂️个人主页进击的荆棘作者其它专栏《数据结构与算法》《算法》《C起始之路》《Linux》目录1.理解硬件2.引入文件系统3.ext2文件系统4.软硬连接1.理解硬件1.1磁盘、服务器、机柜、机房●机械磁盘是计算机中唯一的一个机械设备●磁盘——外设●慢●容量大价格便宜1.2磁盘物理结构1.3磁盘的存储结构扇区是磁盘存储数据的基本单位512字节块设备如何定义一个扇区●可以先定位磁头header●确定磁头要访问哪一个柱面磁道cylinder●定位一个扇区sector●CHS地址定位文件内容属性都是数据本质是占据几个扇区的问题。能定位一个扇区能不能定位多个扇区●扇区是从磁盘读出和写入信息的最小单位通常大小为512字节●磁头head数每个盘片上一般有上下两面分别对应1个磁头共2个磁头●磁道track数磁道是从盘片外圈往内圈编号0磁道1磁道……靠近主轴的同心圆用于停靠磁头不存储数据●柱面cylinder数磁道构成柱面数量上等同磁道个数●扇区sector数每个磁道都被切分为很多扇形区域每道的扇区数量相同●圆盘platter数盘片的数量●磁盘容量磁头数 X 磁道柱面数 X 每道扇区数 X 每扇区字节数●细节传动臂上的磁头是共进退的柱面cylinder磁头head扇区sector可以定位数据这就是数据定位寻址方法之一CHS寻址方式。CHS寻址对早期的磁盘非常有效知道用哪个磁头读取哪个柱面上的第几个扇区就可以读到数据了。但是CHS模式支持的硬盘容量有限因为系统用8bit来存储磁头地址用10bit来存储柱面地址用6bit来存储扇区地址而一个扇区512Byte这样使用CHS寻址一块硬盘最大容量为256*1024*64*512B80641MB1048576B若按1MB1000000B来算就是8.4GB1.4磁盘的逻辑结构1.4.1理解过程磁带上面可以存储数据我们可以把磁带“拉直”形成线性结构磁盘本质上虽然是硬质的但是逻辑上可以把磁盘想象为卷在一起的磁带那么磁盘的逻辑存储结构就类似为这样每个扇区就有了一个线性地址其实就是数组下标这种地址叫做LBALogical Block Address1.4.2真实过程传动臂上的磁盘是共进退的柱面是一个逻辑上的概念其实就是每一面上相同半径的磁道逻辑上构成柱面所以磁盘逻辑上分了很多面但是在我们看来逻辑上磁盘整体是由“柱面”卷起来的所以磁盘的真实情况是磁道某个盘面的某一个磁道展开即一维数组柱面正磁盘所有盘面的同一个磁道即柱面展开●柱面上的每个磁盘扇区个数是一样的●就像二维数组整盘整个磁盘就是多张二维的扇区数组表三维数组所以寻址一个扇区先找到哪一个柱面Cylinder在确定柱面内哪一个磁道其实就是磁头位置Head在确定扇区Sector所以就有了CHS因此在我们看来其实全部都是一维数组所以每一个扇区都有一个下标被称为LBALogical Block Address地址其实就是线性地址。如何得到这个LBA地址OS只需要使用LBA就可以了。LBA可以转成CHS地址CHS可以转成LBA地址。这不需要用户磁盘自己就可以做。1.5CHSLBA地址CHS转成LBA●磁头数*每磁道扇区数单个柱面的扇区总数●LBA柱面号C*单个柱面的扇区总数磁头号H*每磁道扇区数扇区号S-1●即LBA柱面号C*磁头数*每磁道扇区数磁头号H*每磁道扇区数扇区号S-1●扇区号通常是从1开始的而在LBA中地址是从0开始的●柱面和磁道都是从0开始编号的●总柱面磁道个数扇区总数等信息在磁道内部会自动维护上层开机的时候会获取道这些参数LBA转成CHS●柱面号CLBA//磁头数*每磁道扇区数【就是单个柱面的扇区总数】●磁头号HLBA%磁头数*每磁道扇区数//每磁道扇区数●扇区号SLBA%每磁道扇区数1●“//”表示除取整所以从此往后在磁盘使用者看来根本就不关心CHS地址而是直接使用LBA地址磁盘内部自己转化。因此从现在开始磁盘就是一个元素为扇区的一维数组数组的下标就是每个扇区的LBA地址。OS使用磁盘就可以用一个数字访问磁盘扇区。2.引入文件系统2.1引入“块”概念其实硬盘是典型的“块”设备操作系统读取硬盘数据的时候其实是不会一个一个扇区读取的这样效率太低而是一次性连续读取多个扇区即一次性读取一个“块”block。硬盘的每个分区是被划分为一个个的“块”。一个“块”的大小是由格式化的时候确定的并且不可更改最常见的是4KB即连续8个扇区组成一个“块”。“块”是文件存取的最小单位。注意●磁盘就是一个三维数组而我们把它看成一个“一维数组”数组下标就是LBA每个元素都是扇区●每个扇区都有LBA那么8个扇区一个块每一个块的地址也能算出来●知道LBA块号LBA/8●知道块号LBA块号*8nn是块内第几个扇区2.2引入“分区”概念其实磁盘是可以被分成多个分区partition的以Windows观点来看一块磁盘可能被分区为CDE盘。CDE就是分区。分区从实质上说就是对硬盘的一种格式化。但是Linux的设备都是以文件形式存在又该如何区分柱面是分区的最小单位可以利用参考柱面号码的方式来进行分区其本质就是设置每个区的起始柱面和结束柱面号码。此时我们可以将硬盘上的柱面分区进行平铺将其想象为一个大的平面如下图所示注●柱面大小一致扇区个位一致所以只要知道每个分区的起始和结束柱面号知道每个柱面有多少个扇区那么该分区多大与解释LBA是多少也就清楚了。2.3引入“inode”概念文件数据属性使用ls -l的时候除了能看到文件名还能看到文件元数据属性[sjxVM-0-6-centos ~]$ ls -l total 12 -rw-rw-r-- 1 sjx sjx 827 Jul 20 18:04 install.sh drwxrwxr-x 12 sjx sjx 4096 Sep 17 22:00 linux -rw-rw-r-- 1 sjx sjx 625 Sep 10 20:18 Makefile每行包含7列●模式●硬链接数●文件所有者●组●大小●最后修改时间●文件名ls -l读取存储在磁盘上的文件信息然后显示出来这个信息除了通过这种方式来读取还可以使用stat命令看到更多信息[sjxVM-0-6-centos ~]$ stat Makefile File: ‘Makefile’ Size: 625 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 658165 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1001/ sjx) Gid: ( 1001/ sjx) Access: 2026-09-13 21:08:03.034928673 0800 Modify: 2026-09-10 20:18:12.216482861 0800 Change: 2026-09-10 20:18:12.216482861 0800 Birth: -此时还要思考一个问题文件数据都存储在“块”中所以我们还需要找到一个地方存储文件的元信息属性信息如文件的创建者、文件创建日期、文件大小等。这种存储文件元信息的区域叫做inode也称“索引节点”。每个文件都有对应的inode里面包含了与文件有关的信息。注●Linux下文件的存储是属性和内容分离存储的●Linux下保存文件属性的集合叫做inode一个文件对应一个inodeinode内有一个唯一的标识符叫做inode号以下为一个文件的属性inode/* * Structure of an inode on the disk */ struct ext2_inode { __le16 i_mode; /* File mode */ __le16 i_uid; /* Low 16 bits of Owner Uid */ __le32 i_size; /* Size in bytes */ __le32 i_atime; /* Access time */ __le32 i_ctime; /* Creation time */ __le32 i_mtime; /* Modification time */ __le32 i_dtime; /* Deletion Time */ __le16 i_gid; /* Low 16 bits of Group Id */ __le16 i_links_count; /* Links count */ __le32 i_blocks; /* Blocks count */ __le32 i_flags; /* File flags */ union { struct { __le32 l_i_reserved1; } linux1; struct { __le32 h_i_translator; } hurd1; struct { __le32 m_i_reserved1; } masix1; } osd1; /* OS dependent 1 */ __le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ __le32 i_generation; /* File version (for NFS) */ __le32 i_file_acl; /* File ACL */ __le32 i_dir_acl; /* Directory ACL */ __le32 i_faddr; /* Fragment address */ union { struct { __u8 l_i_frag; /* Fragment number */ __u8 l_i_fsize; /* Fragment size */ _le16 l_i_uid_high; /* these 2 fields */ __le16 l_i_gid_high; /* were reserved2[0] */ __u32 l_i_reserved2; } linux2; struct { __u8 h_i_frag; /* Fragment number */ __u8 h_i_fsize; /* Fragment size */ __u16 i_pad1; __le16 h_i_mode_high; __le16 h_i_uid_high; __le16 h_i_gid_high; __le32 h_i_author; } hurd2; struct { __u8 m_i_frag; /* Fragment number */ __u8 m_i_fsize; /* Fragment size */ __u16 m_pad1; __u32 m_i_reserved2[2]; } masix2; } osd2; /* OS dependent 2 */ }; /* * Constants relative to the data blocks */ #define EXT2_NDIR_BLOCKS 12 #define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS #define EXT2_DIND_BLOCK (EXT2_IND_BLOCK 1) #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK 1) #define EXT2_N_BLOCKS (EXT2_TIND_BLOCK 1) 备注EXT2_N_BLOCKS 15注●文件名属性并未纳入道inode数据结构内部●inode的大小一般为128字节或256●任何文件的内容大小可以不同但属性大小一定是相同的1283.ext2文件系统3.1宏观认识想要在硬盘上存储文件必须先把硬盘格式化为某种格式的文件系统才能存储文件。文件系统的目的就是组织和管理硬盘中的文件。在Linux系统中最常见的是ext2系列的文件系统。其早期版本为ext2后来发展除ext3和ext4.ext3和ext4虽然对ext2进行了增强但是其核心设计并没有改变。ext2文件系统将整个分区划分为若干同样大小的块组Block Group如下图。只要能管理一个分区就能管理所有分区也就能管理所有磁盘文件。上图启动块Boot Block/Sector的大小是确定的为1KB由PC标准规定用来存储磁盘分区信息和启动信息任何文件系统都不能修改启动块。启动块之后才是ext2文件系统的开始。3.2Block Groupext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有相同的结构组成。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

高并发轮询场景下UDP与TCP性能对比:48台以太网温湿度记录仪基准测试 2026/9/29 11:03:46

高并发轮询场景下UDP与TCP性能对比:48台以太网温湿度记录仪基准测试

以太网温湿度记录仪这个品类,做过的朋友都知道,硬件本身不难,难的是"多台设备、高频轮询、长时间稳定"这三件事叠在一起。我手上这个项目,现场有 48 台以太网温湿度记录仪挂在同一台采集服务器下,要求 1 秒轮…

阅读更多 →
2026年AI编程工具全景指南:Cursor与国产平替怎么选 2026/9/29 11:03:46

2026年AI编程工具全景指南:Cursor与国产平替怎么选

1. 先给结论:2026年还盯着Cursor一家看,已经不够了2026年再聊AI编程工具,画面和两年前完全不一样了。那时候大家的问题集中在“要不要用”,现在的问题已经变成“用哪个、怎么组合、怎么迁移、怎么控成本”。我身边不少团队&#x…

阅读更多 →
2025-2026年MEMS传感器芯片技术热点:振荡器、振镜与压感原理 2026/9/29 11:03:39

2025-2026年MEMS传感器芯片技术热点:振荡器、振镜与压感原理

这两年如果要给整个传感器行业画一条增长曲线,MEMS传感器芯片绝对是最陡峭的那一段。我自己做嵌入式和传感系统这一行十几年,从早期的汽车压力传感器、消费电子加速度计,到如今在直播间里见到的各类AI终端里藏着的新器件,MEMS已经…

阅读更多 →
Altium Designer 24 安装教程:从环境准备到库文件配置的完整指南 2026/9/29 11:03:39

Altium Designer 24 安装教程:从环境准备到库文件配置的完整指南

1. 为什么 AD 24 的安装值得单独写一篇长文Altium Designer 24(后面我统一简称 AD 24)在电子设计圈里的地位不用多吹,画原理图、做 PCB 布局、跑 DRC、出 Gerber,一套流程全包。但真正让无数人卡在门口的,往往不是布线…

阅读更多 →
小白程序员必看:收藏!Agent大模型技术入门与实践全解析 2026/9/29 11:03:33

小白程序员必看:收藏!Agent大模型技术入门与实践全解析

本文深入浅出地解析了Agent的技术本质与常见模式,包括Workflow预编排类和LLM自主规划类,以及Multi-Agent的常见模式。文章重点探讨了Agent在客户服务领域的价值增益,如服务需求研发范式变革、复杂业务流程简化、交互方式多样化等。此外&#…

阅读更多 →
三菱ST数组越界陷阱:FOR循环上限写16为何丢17号 2026/9/29 11:03:26

三菱ST数组越界陷阱:FOR循环上限写16为何丢17号

1. 从"丢17号"说起:一个看似低级的数组越界问题搞三菱ST(Structured Text)的朋友,大概率都遇到过这种让人抓狂的场景:明明数组声明了ARRAY[0..16] OF INT,FOR循环也老老实实写了FOR i : 0 TO 16 …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉