Linux学习日记之磁盘与档案系统
主要定义
- 磁盘的物理组成
磁盘主要由圆形磁盘(多张)、机械手臂、磁头等组成。每张磁盘都有不同的磁道,半径相同的磁道组成了磁柱,沿着中心划线可将磁盘分成若干扇区,每个扇区的大小是512Bytes。 - 磁盘分割
磁盘分区的重点是记录每一个分割区的起始与结束磁柱,而这个记录放在MBR(主引导记录),MBR最多提供四个分区记录,多于4个的要使用扩展分区。 - 文件系统
磁盘分区完成后要进行格式化,而格式化就是给磁盘设置合适的文件系统(如:ext2、ext3),每一个分区只能指定一种文件系统,文件系统是规定存取数据的方式。磁盘最小的储存单们是扇区(sector),每个sector的大小是512个字节,但是文件系统中规定的最小存取单位并不是512个字节,文件系统中引入了逻辑区块(Block)的概念,每个Block的大小可以根据需要设成不同,在考虑Block大小时要考虑到以下两个方面:读取效率、磁盘空间,Block太大容易学浪费空间,另外一方面如果Block太小,在存取大的文件时效率会降低,所以应根据实际的需要合理的安排Block的大小。 - EXT2文件系统
EXT2文件系统将文件分为两部分进行储存, 一部分保存文件的属性,另一部分保存文件的内容,前者为inode后者为Block,我们在将磁盘格式化为ext2时必须指定inode与Block的大小才行,也就是说会建立inode table 与block table两个区域。Block是记录文件内容的区域,inode记录文件相关属性及文件内容放置在哪个block,简单说inode除了记录文件属性同时还必须要有指向的功能,即指向文件内容放置的区块(Block),好让操作系统可以正确取得文件内容。Inode记录的信息包括以下:文件的拥有者与群组、文件的存取模式(read、write、execute)、文件的类型、文件状态改变的时间(ctime)、最近一次的读取时间(atime)、最近修改的时间(mtime)、文件的大小、文件类型的旗标、该文件真正内容的指针(pointer)
系统存取文件的过程
目录
当在Linux下新建 一个目录时,ext2会分配一个inode与至少一块Block给该目录。其中,inode记录该目录相关属性,并指向分配到的那块Block;而Block则是记录这个目录下相关连的文件的关联性!
档案
当在linux下新建 一个文件时,ext2会至少分配一个inode与相对于该文件大小的Block数量给该文件。
注意:inode本身并不记录文件名,只记录文件的相关属性,至于文件名则是记录在目录所属的block区域!另外文件与目录的关连性是通过目录的block区域记录文件的相关连接实现的。所以当我们读取一个档案的内容时,我们的linux会先由根目录取得该档案上层目录所在的inode,再由该目录所记录的文件关连性(在该目录所属的block区域)取得该档案的inode,最后经由inode提供的block指向,取得最终的档案内容。以下为例子:

一块分区在ext2下会被格式化为inode table和block area 两个区域,以上图的方式来表达比较容易理解。读取文件的流程为:
- 操作系统根据根目录的相关资料可取得/etc这个目录所在的inode,并前往读取/etc这个目录的相关属性。
- 根据/etc的inode资料,可以取得/etc这个目录底下所有档案的关连数据是放在哪一个block当中,并前往该block读取档案的关连性内容;
- 根据上步可知目标文件的inode所在地,并前往该inode;
- 由上个步骤inode,可以读取目标文件的所有属性,并前往inode所指向的block区域,取得文件内容。
注:目录最大的功能就是提供文件的关连性,在关连性里面,最主要的是文件名与inode对应的数据。
更多内容参考 :http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2651641.html
Linux学习日记之磁盘与档案系统的更多相关文章
- Linux 学习笔记 1 使用最小的系统,从分区安装系统开始
我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...
- Linux学习日记-使用EF6 Code First(四)
一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是 请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...
- Linux学习之路—磁盘分区
1.各硬件设备在Linux中的文件名 在Linux系统中,每个设备都被当做一个文件来对待,同时在Linux系统中,几乎所有的硬件设备文件都在/dev这个目录中. 设备 设备在Linux内的文件名 ID ...
- Linux知识体系之磁盘与档案系统管理
硬盘的物理组成:由许许多多的圆形硬盘盘所组成.宜居硬盘盘能够容纳的数据量,而有所谓的单碟或者多碟. 首先,硬盘里一定会有所谓的磁头(Head)在进行该硬盘上面的读写动作,而磁头是固定在机械手臂上的,机 ...
- Linux 学习日记 1
这是我第一次系统地学习Linux,希望通过这个学习日记收获一些东西把-- @_@ Grub - 启动管理器 在启动时让用户选择要启动的系统.(但是windows比较霸道--重装windows后会将 ...
- Linux学习日记——字符处理
(菜鸡学习日记 各种使用命令只列举了常用几种,发现错误望指正) 一.管道 在Linux 中,管道就是一个固定大小的缓冲区,大小为一页4K.它是一种通信的机制,可以使用管道符“ | ” 来连接进程,连接 ...
- LINUX学习之二磁盘篇
1.Linux系统中,每个设备都被当成一个文件来对待.文件系统的最小单位是区块(Block) 设备 设备在Linux中的文件名 IDE硬盘 /dev/hd[a-d] SCSI/SATA/USB硬盘 / ...
- Linux学习记录--文件IO操作相关系统编程
文件IO操作相关系统编程 这里主要说两套IO操作接口,各自是: POSIX标准 read|write接口.函数定义在#include<unistd.h> ISO C标准 fread|fwr ...
- Linux学习日记-(一)
一.为什么学习Linux 大学时开始接触Linux,最开始学习的是RedHat(小红帽),感觉Linux好像很久不见的老朋友,用起来很舒服(虽然我们用的是DotNet).很喜欢它的命令模式,让我能接触 ...
随机推荐
- java中HashMap重要性质和优化总结
原文: http://www.cnblogs.com/junyuhuang/p/4519257.html
- Python_猜大小
# 需要在python3上执行 import random def game (capital = 1000): point1 = random.randrange(1,7) point2 = ran ...
- 仿window系统自带的日期差计算器类
public class MonthSubstract { /// <summary> /// 日期差之月份 /// </summary> public int Months ...
- 在webapi2中使用OWIN 自寄宿模式
OWIN 自寄宿模式说的直白一点就是不需要IIS了,直接通过路由访问cs模式的服务 敲了一遍官方的例子,首先安装Microsoft.AspNet.WebApi.OwinSelfHost,注意不要安装 ...
- android 一些常用开源框架
网络请求compile 'com.squareup.okhttp:okhttp:2.6.0'okhttp依赖compile 'com.squareup.okio:okio:1.6.0'json解析co ...
- DataGridView实现各种效果
http://www.cnblogs.com/greatverve/archive/2012/03/05/multi-datagridview.html
- 在Android中Intent的概念及应用(一)——显示Intent和隐式Intent
Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent ...
- vtk多线程简单测试
vtkMultithreader is a class that provides support for multithreaded execution using sproc() on an SG ...
- JavaScript 构造函数与原型链
构造函数.原型链: function Person(name, age, job) { this.name = name; this.age = age; this.job = job; // thi ...
- javascript 获取滚动条高度+常用js页面宽度与高度
/******************** * 取窗口滚动条高度 ******************/function getScrollTop(){ var scrollTop=0; ...