`
tiankefeng0520
  • 浏览: 146893 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Linux学习记录--文件系统简介

阅读更多

文件系统简介

对于Linux来说正规的文件系统为EXT2,一个文件系统存储的数据通常包括文件权限和属性,以及文件数据,这两部分分别存储在不同的地方。

 

简单的说文件系统数据分为3部分

Superblock:记录次文件系统的整体信息,包括inode/iblock的总量,使用量,剩余量,已经文件系统的整体信息

Inode:记录文件的属性,一个文件占用一个inode,同时记录此文件数据所在的block号码

Iblock:实际记录文件的内容,若文件过大时,会占用多个block

 

我的理解

文件系统由包含多个文件,每个文件都会占用1个inode和若干iblock,inode用来存储文件权限和属性.以及文件数据存放的iblock的编号,iblock则存放文件的实际数据(每个inode和iblock都含有一个编号)

 

对于容量很大的文件系统,EXT2格式化时会分为多个block group,每个组队都有一个独立的/inode/block/superblock

 

iblock (数据区块)

iblock 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的block 大小有 1K, 2K 及 4K 三种而已。

每个 block 内最多只能够放置一个文件的数据;

承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;

承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)。

 

Inode

Inode主要包含信息

1.  该文件的存取模式(read/write/excute);

2.      该文件的拥有者与群组(owner/group);

3.      该文件的容量;

4.      该文件创建或状态改变的时间(ctime);

5.      最近一次的读取时间(atime);

6.      最近修改的时间(mtime);

7.      定义文件特性的旗标(flag),如 SetUID...;

8.      该文件真正内容的指向(pointer);

9.      其他信息

 

每个 inode 大小均固定为 128 bytes;

每个文件都仅会占用一个 inode 而已;

承上,因此文件系统能够创建的文件数量与 inode 的数量有关;

系统读取文件时需要先找到inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容。

Inode 三级间接索引

inode 要记录的数据非常多,但偏偏又只有128bytes 而已,为了记录更多的数据,系统很将 inode 记录 block 号码的区域定义为12个直接,一个间接, 一个双间接与一个三间接记录区。记录区。

 

假设block为1K

 

12 个直接指向: 12*1K=12K
由于是直接指向,所以总共可记录 12 笔记录,因此总额大小为如上所示;

间接: 256*1K=256K
每笔 block 号码的记录会花去 4bytes,因此 1K 的大小能够记录 256 笔记录,因此一个间接可以记录的文件大小如上;

双间接: 256*256*1K=2562K
第一层 block 会指定 256 个第二层,每个第二层可以指定 256 个号码,因此总额大小如上;

三间接: 256*256*256*1K=2563K
第一层 block 会指定 256 个第二层,每个第二层可以指定 256 个第三层,每个第三层可以指定 256 个号码,因此总额大小如上;

总额:将直接、间接、双间接、三间接加总,得到 12 + 256 + 256*256 + 256*256*256 (K) = 16GB

 

Superblock (超级区块)

Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock,就没有这个 filesystem 了。他记录的信息主要有:

1.      block 与 inode 的总量;

2.      未使用与已使用的 inode / block 数量;

block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);

filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;

一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

Superblock信息查看

 

通过dumpe2fs命令查看文件系统的superblock

 

举例:观察文件系统的相关信息

[root@www ~]# df   <==这个命令可以叫出目前挂载的装置
Filesystem    1K-blocks      Used Available Use% Mounted on
/dev/hdc2       9920624   3822848   5585708  41% /      
/dev/hdc3       4956316    141376   4559108   4% /home
/dev/hdc1        101086     11126     84741  12% /boot
tmpfs            371332         0    371332   0% /dev/shm

[root@www ~]# dumpe2fs /dev/hdc2
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   /1             <==这个是文件系统的名称(Label)
Filesystem features:      has_journal ext_attr resize_inode dir_index 
 filetype needs_recovery sparse_super large_file
Default mount options:    user_xattr acl <==默认挂载的参数
Filesystem state:         clean          <==这个文件系统是没问题的(clean)
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              2560864        <==inode的总数
Block count:              2560359        <==block的总数
Free blocks:              1524760        <==还有多少个 block 可用
Free inodes:              2411225        <==还有多少个 inode 可用
First block:              0
Block size:               4096           <==每个 block 的大小啦!
Filesystem created:       Fri Sep  5 01:49:20 2008
Last mount time:          Mon Sep 22 12:09:30 2008
Last write time:          Mon Sep 22 12:09:30 2008
Last checked:             Fri Sep  5 01:49:20 2008
First inode:              11
Inode size:               128            <==每个 inode 的大小
Journal inode:            8             
Journal backup:           inode blocks
Journal size:             128M
Group 0: (Blocks 0-32767) <==第一个 data group 内容, 包含 block 的启始/结束号码
Primary superblock at 0, Group descriptors at 1-1  <==超级区块在 0 号 block
Reserved GDT blocks at 2-626
Block bitmap at 627 (+627), Inode bitmap at 628 (+628)
Inode table at 629-1641 (+629)                     <==inode table 所在的 block 0 free blocks, 32405 free inodes, 2 directories    <==所有 block 都用完了!
Free blocks:
Free inodes: 12-32416                              <==剩余未使用的 inode 号码
Group 1: (Blocks 32768-65535)
....(底下省略)....

 

目录与文件读取

在文件系统下创建一个文件都会分配一个inode和若干iblock,目录和文件都是文件系统下的一个文件,

对于目录来说

inode :记录了目录的权限,

block:记录了目录的名称,目录下包含的文件名名与文件名所占用的inode号码

 

举例:查看Inode

[root@bogon ~]# ls -li

2366420 -rw------- 1 root root  1377 02-18 20:26 anaconda-ks.cfg

2366454 drwxr-xr-x 2 root root  4096 02-18 20:41 Desktop

2366370 -rw-r--r-- 1 root root 35014 02-1820:25 install.log

2366371 -rw-r--r-- 1 root root  6431 02-18 20:22 install.log.syslog

 

对于文件来说

文件名:在包含其的目录对应的iblock中记录

inode :记录了文件的权限,

block:记录文件实际数据

 

 

举例来说,如果我想要读取/etc/passwd 这个文件时,系统是如何读取的呢?

 

[root@bogon ~]# ll -di / /etc /etc/passwd

     2 drwxr-xr-x  24 root root  4096 02-22 19:34 /

1134561 drwxr-xr-x 114 root root 1228802-22 19:36 /etc

2528506 -rw-r--r--   1 root root 2219 02-18 20:39 /etc/passwd

 

1.      / 的 inode:
透过挂载点的信息找到 /dev/hdc2 的 inode 号码为 2 的根目录 inode,且 inode 规范的权限让我们可以读取该 block 的内容(有 r 与 x) ;

2.      / 的 block:
经过上个步骤取得 block 的号码,并找到该内容有 etc/ 目录的 inode 号码 (1912545);

3.      etc/ 的 inode:
读取 1912545 号 inode 得知 vbird 具有 r 与 x 的权限,因此可以读取 etc/ 的 block内容;

4.      etc/ 的 block:
经过上个步骤取得 block 号码,并找到该内容有 passwd 文件的 inode 号码 (1914888);

5.      passwd 的 inode:
读取 1914888 号 inode 得知 vbird 具有 r 的权限,因此可以读取 passwd 的 block 内容;

6.  passwd的 block:
最后将该 block 内容的数据读出来

 

0
0
分享到:
评论

相关推荐

    Linux学习笔记Linux学习资料Linux教程

    【linux学习笔记-10】Linux进程相关系统调用(三).doc 【linux学习笔记-11】守护进程daemon.doc 【linux学习笔记-12】守护进程的日志实现.doc 【linux学习笔记-13】基本进程通信--文件锁.doc 【linux学习笔记-14】...

    Linux学习记录--文件IO操作相关系统编程.pdf

    Linux学习记录--文件IO操作相关系统编程.pdf

    非常宝贵的LINUX学习笔记

    【linux学习笔记-2】父子进程共享文件描述符 【linux学习笔记-3】文件操作(stat,chmod,umask) 【linux学习笔记-4】进程扇和进程链 【linux学习笔记-5】编写自己的ls命令 【linux学习笔记-6】文件IO操作--读写、...

    Linux基础课件-- Linux文件系统.pptx

    Linux操作系统的基础之一是其独特的文件系统,这在“Linux基础课件-- Linux文件系统.pptx”中有所阐述。文件系统是操作系统的核心组成部分,它负责管理磁盘上的数据存储和检索,是用户与硬件存储设备之间的接口。在...

    linux学习笔记-01linux操作基础

    ### Linux学习笔记—01 Linux操作基础 #### 1. Linux 基础命令与用法 在Linux操作系统中,掌握一系列的基础命令是非常重要的。这些命令可以帮助用户进行各种日常操作,比如文件管理、目录切换、文件查看等。下面将...

    linux学习笔记--很经典

    本篇“Linux学习笔记”详细介绍了Linux的基本目录结构及其各自的功能,这对于初学者理解Linux系统的核心概念非常重要。 #### 二、Linux目录结构解析 1. **/(根目录)** - 根目录是Linux文件系统的起点,所有的...

    Linux学习笔记-很不错适合linux入门者

    在系统管理方面,笔记可能涵盖用户管理、文件系统和权限设置。这包括如何创建和管理用户账户,理解Unix-like系统的文件权限(读、写、执行),以及如何使用命令行工具如`ls`, `cd`, `mkdir`, `rm`, `chmod`等进行...

    兄弟连linux教程1-16章学习笔记(全)

    《兄弟连Linux教程1-16章学习笔记》是一份全面涵盖Linux基础知识的学习资料,特别适合初学者和希望快速提升Linux技能的人群。这个压缩包包含了一系列文本文件和辅助图片,旨在帮助用户深入理解Linux系统的基本操作和...

    Linux学习笔记-超全总结值得一看(带标签目录)- 154页.pdf

    【Linux学习笔记】这篇超全总结涵盖了Linux操作系统的基础知识,特别是关于命令行的使用和快捷键,以及一些桌面环境下的快捷操作。以下是笔记中的主要内容: 1. **LINUX常用操作命令**: - `clear`:清空终端屏幕...

    armlinux学习笔记--触摸屏驱动程序分析

    "armlinux学习笔记--触摸屏驱动程序分析"这本书深入探讨了这个主题,旨在帮助读者理解和开发针对Linux系统的触摸屏驱动。以下是关于这一主题的详细知识解析: 1. **嵌入式Linux**:嵌入式Linux是指将Linux操作系统...

    Linux学习笔记-面试必备

    Linux学习笔记整理资源 1、Linux简介:一种开源的、免费的操作系统,安装在计算机硬件上、用来管理计算机的硬件和软件资源的系统软件。 Linux注重安全性、稳定性、高并发处理能力,但缺乏优异的可视化界面。 2、...

    Linux学习笔记--RuanJava

    在Linux学习过程中,了解操作系统的核心结构以及主要目录的用途至关重要。Linux系统采用的是层次化的目录结构,这使得系统管理更为有序。以下是对标题和描述中涉及的一些关键知识点的详细解释: 1. **根目录** `/`...

    Linux学习笔记-初学者

    ### Linux学习笔记-初学者 #### 一、Linux分区命名规则及理解 Linux系统中的分区命名规则对于初学者来说非常重要,因为这直接影响到如何管理和识别不同的存储设备。下面详细介绍几个关键概念: - **MBR(Master ...

    linux学习笔记-2

    ### Linux学习笔记精要 #### 一、Linux操作系统概述与常用命令 - **Shell与GUI**: Linux系统提供了两种主要的用户交互方式,图形用户界面(GUI)如Gnome和命令行界面(CLI)如Bash。GUI适合初学者,而CLI对于高效地...

    ARM linux学习笔记--IIS音频驱动程序

    ### ARM Linux学习笔记——深入解析IIS音频驱动程序 #### 引言 在嵌入式系统开发中,音频处理是一项核心功能,特别是在多媒体设备中。本文将深入探讨ARM Linux环境下的IIS(Inter-IC Sound)音频驱动程序设计与...

    写得蛮好的linux学习笔记--linux目录架构

    - `fstab`:记录系统启动时需挂载的文件系统。 - `inittab`:init进程的配置,定义系统运行级别。 - `issue`:用户登录前显示的信息。 - `group`:用户组信息。 - `passwd`:用户账号信息。 - `shadow`:用户密码...

    linux学习笔记-初学者必备

    ### Linux学习笔记——初学者必备知识点 #### 一、源列表配置 在Linux系统中,尤其是Ubuntu这样的发行版,为了确保软件包的更新与安装,我们需要正确地配置系统的软件源。给定的内容显示了几个不同的软件源地址: ...

    极客学院学习笔记--PHP文件系统处理.zip

    操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...

    学习Linux---不得不知的Linux命令

    ### 学习Linux---不得不知的Linux命令 在Linux操作系统中,掌握一系列基本且重要的命令是每个用户必备的技能之一。这些命令可以帮助我们更高效地管理服务器、进行日常操作及故障排查等工作。以下是对给定内容中列出...

    linux-serial-test-master.zip_SERIAL_linux serial_linux-serial-te

    6. **设备文件与权限**:在Linux中,串行端口作为设备文件存在,其访问权限由系统管理。理解如何通过chmod命令修改权限以及使用sudo运行程序以获取必要权限是使用Linux-Serial-Test的前提。 7. **调试与日志记录**...

Global site tag (gtag.js) - Google Analytics