西安城乡住房建设厅网站,漫画风格网站,计算网站制作教程,做商城网站价格1.前言
文件 内容属性
文件分为被打开的文件#xff08;跟基础IO有关#xff0c;在内存上#xff09;和没有被打开的文件(在磁盘上)。
在磁盘上找没有被打开的文件属于文件系统的工作
2.对硬件的理解 2.1 磁盘#xff0c;服务器#xff0c;机柜#xff0c;机房
1.磁…1.前言
文件 内容属性
文件分为被打开的文件跟基础IO有关在内存上和没有被打开的文件(在磁盘上)。
在磁盘上找没有被打开的文件属于文件系统的工作
2.对硬件的理解 2.1 磁盘服务器机柜机房
1.磁盘属于外设有着容量大价格低的速度慢等特点属于机械设备。
2.服务器是专门用于处理网络请求、存储和传输数据的高性能计算机。它是互联网服务的核心设备支撑着各种在线应用与服务的运行。
3.机柜是专为存储计算机及相关控制设备而设计的设备它提供了一个物理环境来保护这些硬件免受灰尘、水汽等环境因素的侵害。同时机柜通过标准化的安装架和内部布局确保服务器等硬件设备能够有序排列从而便于文件系统的管理和数据的存储与访问。
4.机房是存放服务器、存储设备及其它关键信息系统硬件的物理空间。机房确保了数据存储、备份与恢复所需的高可靠性硬件环境得以维护。 2.2 磁盘的物理结构 2.3 磁盘的存储结构 扇区磁盘存储数据的基本单位512字节块设备 磁盘容量 磁头数*磁道数*每道扇区数*每扇区字节数
如何定位一个扇区 1.可以先定位磁头 2.确定磁头要访问哪一个磁道 3.定位一个扇区
磁盘的数据存储在扇区上根据柱面磁头扇区这三个部分就可以定位数据了这就是数据定位的方式之一CHS寻址方式
CHS寻址方式支持的磁盘容量大约8.4G
fdisk -l 指令介绍用于列出指定磁盘或所有磁盘上的分区表信息。 2.4 磁盘的逻辑结构 2.4.1 理解过程
把磁盘想象成卷在一起的磁带把磁盘拉直后可以得的存储结构类似下图 每一个扇区都有了相应的线性地址即数组下标这就叫做LBA 2.4.2 具体过程 柱面是一个逻辑上的概念其实就是每一面由相同半径的磁道逻辑上构成柱面
磁道的展开 柱面的展开 整个磁盘的展开 由C/C的基础可知这些都可以看成是一维数组
每一个扇区都有下标我们称之为LBA地址。
2.4.3 CHS和LBA地址
CHS随着时代的发展变得没那么实用但在旧的硬件或特定的应用场景还有一定程度的用处
LBA地址通常被现代操作系统和磁盘驱动程序使用因为它们提供了更高效、更简单的磁盘访问方式
所以在大多数情况下磁盘使用者直接使用LBA地址而CHS地址和LBA地址间的转化通常由磁盘控制器和操作系统协同完成的。
以下是相关的转换方式了解即可 3.引入文件系统 3.1 块的概念
操作系统在读取硬盘数据的时候为了追求效率会一次连续读取多个扇区即八个扇区组成一个块块是文件存取的最小单位块的单位一般是4KB. 块号LBA/8
LAB块号*8n(n是块内第几个扇区) 3.2 分区的概念
磁盘还可以被分成多个分区按windows的观点来看就是一块磁盘被分为C,D,E盘linux设备都是以文件的形式存在的可以利用柱面的号码来进行分区柱面是最小的分区单位 3.3 inode的概念
在使用ls-l 命令的时候除了看见了文件的名字还能看见文件元数据属性 每行的从左到右依次是
模式硬链接数文件所有者组大小最后修改时间文件名
除了ls -l获取文件的信息外还有stat命令能够看到更多的信息
用法stat 文件名
所谓的inode就是存储文件元信息的区域中文译名为“索引节点”。
4.ext2 文件系统 4.1 简单介绍
ext2文件系统将整个分区划分成多个同样大小的块组也就是Block Group基本单位数为4KB管理一个分区就能管理所有分区了也就能管理所有磁盘文件 Linux中文件的内容和属性是分开存储的内容存储在Data Blocks中属性存储在inode Table中
inode table 大小为4kb故而会保留32个inode 为了区分不同的inode的故而有inode编号ls -li可以查看inode的编号第一个就是 4.2 位图Bitmap 4.2.1 块位图Block Bitmap 记录着Data Block中哪个数据块已经被占用占用的置1没占用的置0 4.2.2 inode位图inode Bitmap 每个bit表示一个inode是否空闲可用 4.3 GDP(Group Descriptor Table)
块组描述符表描述块组属性信息整个分区分成多个块组就对应有多少个块组描述符每个块组描述符存储一个块组的描述信息。
描述信息
1.块组内部结构的定位信息
inode表inode Table的起始位置指出在块组中从哪里开始是inode表。inode表存储了文件系统中所有文件的元数据如文件类型、权限、大小、创建/修改/访问时间等。数据块Data Blocks的起始位置指出在块组中从哪里开始是数据块。数据块用于存储文件的数据内容。
2.块组资源的使用情况
空闲inode的数量记录当前块组中还有多少个inode未被使用。空闲数据块的数量记录当前块组中还有多少个数据块未被占用。 4.4 超级块Super Block
存放文件系统本身的结构信息描述整个分区的文件系统信息。 文件系统的大小和块大小超级块记录了整个文件系统的大小以及组成文件系统的基本单位——数据块的大小。 inode表的信息包括inode表的大小、位置以及空闲inode的数量等。inode是文件系统用于存储文件元数据如文件名、文件大小、文件权限等的数据结构每个文件都有一个对应的inode。 块位图和空闲块列表块位图记录了文件系统中各个数据块的占用情况而空闲块列表则列出了当前可用的数据块。这些信息对于文件系统的空间管理和文件存储至关重要。 文件系统的状态信息如最近一次的更新时间、文件系统的挂载次数等。这些信息有助于操作系统了解文件系统的当前状态并进行相应的维护和管理。 其他关键参数如标识文件系统类型的幻数、文件系统的修改标记等。这些参数对于操作系统的识别和访问文件系统至关重要 4.5 i节点表inode Table
inode编号以分区为单位整体划分不可跨分区
存放文件属性如大小所有者之类的
当前分组所有inode属性的集合 4.6 Data Block
Block号按照分区划分不可跨分区 4.7 目录文件名和映射
在磁盘中没有目录的概念只有文件属性文件内容的概念磁盘中的文件采用类似树形的结构保存的。
inode编号跟文件名有着映射的关系 4.8 struct dentry
Linux中在内核中维护树状路径结构的内核结构体叫做struct dentry struct dentry { atomic_t d_count; unsigned int d_flags; /* protected by d_lock */ spinlock_t d_lock; /* per dentry lock */ struct inode * d_inode ; /* Where the name belongs to - NULL is * negative */ /* * The next three fields are touched by __d_lookup. Place them here * so they all fit in a cache line. */ struct hlist_node d_hash ; /* lookup hash list */ struct dentry * d_parent ; /* parent directory */ struct qstr d_name ; struct list_head d_lru ; /* LRU list */ /* * d_child and d_rcu can share memory */ union { struct list_head d_child ; /* child of parent list */ struct rcu_head d_rcu ; } d_u; struct list_head d_subdirs ; /* our children */ struct list_head d_alias ; /* inode alias list */ unsigned long d_time; /* used by d_revalidate */ struct dentry_operations * d_op ; struct super_block * d_sb ; /* The root of the dentry tree */ void *d_fsdata; /* fs-specific data */ # ifdef CONFIG_PROFILING struct dcookie_struct * d_cookie ; /* cookie, if any */ # endif int d_mounted; unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */ }; 1.每个文件都有对应的dentry结构包括普通文件这样被打开的文件就可以在内存中形成整个树形结构
2.整个树形节点也同时隶属于Hash方便快速查找
3.树形结构整体构成了Linux的路径缓存结构打开访问任何文件都得先在这颗树下根据路径进行查找找到就返回属性inode和内容没找到就从磁盘加载路径添加dentry结构缓存新路径 4.9 挂载分区 4.9.1 挂载的概念
定义磁盘分区后分区与目录连接在一起方便用户对该分区进行访问和操作
作用通过挂载Linux系统能够识别和使用磁盘上的分区从而实现对文件和数据的存储读取和管理 4.9.2 挂载的步骤
查看磁盘和分区使用lsblk或fdisk -l命令查看当前的磁盘和分区情况。创建分区使用分区工具如fdisk或gdisk创建新的分区。对于MBR分区表使用fdisk对于GPT分区表使用gdisk。格式化分区创建分区后需要对其进行格式化以创建文件系统。例如使用mkfs命令创建ext4文件系统。挂载分区使用mount命令将分区挂载到指定的目录挂载点。例如将/dev/sda1分区挂载到/mnt目录 4.9.3 重要用处
根据对挂载分区知识的了解可以通过访问目标文件的“路径前缀”准确判断文件在哪一个分区 5.软硬链接 5.1 硬链接
创建格式: ln 原文件 目标文件
例:名为a.txt的文件想让他生成一个b.txt的硬链接 硬链接本质上不是一个独立的文件因为它没有独立的inode
本质上是一组新的文件名和目标文件inode number的映射关系
作用对文件进行备份
(.代表当前目录..代表上一目录
硬链接只能给普通文件建立而不能给目录建立 5.2 软链接
创建格式ln-s 原文件或目录 目标文件或目录 软文件本质是一个独立的文件
作用保存目标文件的路径相当于windows下的快捷方式