Linux磁盘分区和目录

Linux发行版之间的差别很小,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。

Windows的文件结构是多个并列的树状结构,最顶部是不同的磁盘(分区),如C,D,E等。而linux的文件结构是当个树状结构。

分区和目录的关系:

1. 任何一个分区都必须挂载到某个目录上。

2. 目录是逻辑上的区分,而分区是物理上的区分。

3. 根目录是所有linux的文件和目录

下面是我们某个可能的目录和分区的关系:

使用df可以查看各个分区的使用情况。

Mount挂载和Nfs

当要使用某个设备的时候,例如要读取一个格式化好的分区,光盘或者软件等设备,必须先把这些设备对应到某个目录上,而这个目录就被称为“挂载点”,这样才可以读取这些设备,这样的动作就是“挂载”。Mount是挂载指令,Nfs就是通过Mount来实现的。

Linux空间管理

Linux对于空间的管理相对简单,如图所示:

它将磁盘分为以下三个部分:

1) 超级块,文件系统中的第一个块被称为超级块。这个块被称为超级块。这个块存放文件系统本身的信息。比如,超级块记录了每个区域的大小,超级块也存放了未被使用的磁盘块的信息。

2) Inode表,超级块下的一个部分就是inode表。每个inode节点就是对应一个文件/目录的结构。这个机构包含了一个文件的长度,创建及修改时间,磁盘中的位置等信息。

3) 数据区,文件系统的第三个部分是数据区。文件的内容保存在这个区域。一个大的文件很容易被存储在上千个独立的磁盘块中。

一个文件主要包含文件名,属性,数据三项。内核将文件内容存放在数据区,文件属性将存放在inode中,文件名存放在目录里。下图显示了新建了一个文件的例子:

文件

文件类型

Linux主要的文件类型有以下几种:

1. 普通文件:c语言源代码,shell脚本,二进制可执行文件等,分为文本文件和二进制文件。

2. 目录文件:目录,存储文件的唯一地方。

3. 链接文件:指向同一个目录或者文件的文件。

4. 特殊文件:设备文件等。

文件存储结构

Linux正统的文件系统(ext2,ext3等)一个文件由目录项,inode和数据块组成。

目录项:包括文件名和inode节点号

Inode:又称文件索引节点,是文件基本信息的存放地方和数据块指针存放地。

数据块:文件的具体内容存放地。

下面是整体结构:

目录项内容如下:

Inode中的信息:

软链接,硬链接:

硬链接:是给文件一个副本,同时建立两者之间的连接关系,修改其中一个,与其链接的文件同时被修改。如果删除其中的一个,其余的文件则不受影响。

软链接:也叫符号链接,当源文件被删除,则符号链接会变成无源之水,而删除这个链接,源文件也不会受到影响。但是对链接文件的使用和引用都是直接调用源文件。

VFS

虚拟文件系统:

除了linux本身的文件系统,为了解决让linux支持其他不同的文件系统的问题,需要将对各种文件系统的操作和管理纳入到一个统一的框架中,使得用户程序可以使用同一组系统调用对各种不同的文件系统进行操作。这样,就对用户程序隐去了各种不同文件系统的实现细节,为用户提供一个统一的,抽象的,虚拟的文件系统界面。这就是所谓的“虚拟文件系统(VFS)”。

问题

http://djt.qq.com/article/view/620

1. 机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机读写的性能的?

附图一张:

磁盘面:磁盘就是由磁盘面组成

磁头:每个磁头对应一个磁盘面,负责该面上数据的读写

磁道:每个盘面上会围绕圆心划分出多个通信圆圈,负责该磁盘面上的数据的读写

柱面:所有盘片上的同一位置的磁道组成的立体叫做一个柱面。

扇区:以磁道为单位的管理单位仍然太大,所以计算机前辈们又把每个磁道划分出了各个扇区。

磁盘IO过程:第一步,先是磁头径向移动来寻找数据所在的磁道。这部分叫寻道时间。

第二部,找到目标磁道然后通过盘面旋转,将目标扇区移动到磁头的正下方。

第三部:向目标扇区写入数据。

所以单次磁盘IO时间=寻道时间+旋转延迟+存取时间。

所以答案是:因为一个分区的数据通常会一起读取,操作系统按照磁道对应的柱面来划分分区,来降低磁盘io所花费的寻道时间,进而来提高磁盘的读写性能。

2、touch一个新的空文件占用磁盘空间吗? 占用的话占用多少?

在linux下,新建一个新的空文件也是会占用空间,实际占用256Byte,确切的说是占用一个inode size,具体inode 的size是根据具体的平台决定的。

3、新建一个空目录占用磁盘空间吗?占用多少?和新建一个文件相比,哪个占用的更大?

占用1个block size+1个inode size,一个block size一般是4KB
4、你知道文件名是记录在磁盘的什么地方吗?

文件名记录在目录中的block的。
5、文件名最长多长?受什么制约?

linux限制文件名长度不得超过255byte。
6、文件名太长了会影响系统性能吗?为什么会产生影响?

文件名长了可能会对系统产生影响,因为这可能会导致更多的磁盘IO,比如由于文件名过长,导致目录的block变得很大,那么linux查找指定的文件极端情况可能需要遍历所有的block,产生大量的开销。、。

上面说的那个问题就是为什么有的时候ls快,有的时候ls慢,就是因为block过多,产生了多次IO。

7、一个目录下最多能建立多少个文件?

这个问题受限于你目录所在分区中inode数量,比如如果有100w个inode,就可以新建100w个文件,不过由于上面说的那个问题,单个目录下面的文件最好不要过万,不然ls之类的命令或者系统首次运行都会出现性能不佳的情况。

8、新建一个内容大小1k的文件,实际会占用多大的磁盘空间?

实际上会占用一个block加上一个inode的大小。。
9、向操作系统发起读取文件2Byte的命令,操作系统实际会读取多少呢?

块设备,当然是以block为单位进行读了。
10、我们使用文件时要怎么样来能提高磁盘IO速度?

如果知道你新建的文件会占用多大空间,比如1M,那么新建文件的时候就和操作系统说一下,让它帮你把文件的size预留下来,这样的话实际上操作系统会尽量分配连续的block,当你再读取这个文件的时候,磁盘就省去了很多寻道时间,IO速度显得快很多。

注:

使用df -i可以查看每个分区的inode数目。

使用du -h可以查看当前目录下每个文件所占实际硬盘空间大小。

如果文件都是大于4KB,甚至是几M。几G的文件,那么建议block还是尽量的大一点,这样inode可以少记几个地址。

如果文件大部分都是1K以下的,那么使用4K作为block size就会有些浪费。

linux文件系统初学的更多相关文章

  1. linux文件系统体系结构 和 虚拟文件系统(VFS)

    图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的 ...

  2. Linux文件系统

    今天学习了Linux文件系统,现在来做个小总结. 首先Linux中一切都是文件,下面这个清单是Linux系统的顶层目录结构. 清单 1. Linux 系统的顶层目录结构 / 根目录 ├── bin 存 ...

  3. linux 文件系统简介

    linux文件系统简介   文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基 ...

  4. Linux文件系统层次结构标准

    该标准的目的是定义Linux文件系统的标准路径,使得开发者和用户可以在合理的位置找到需要的东西. Linux的文件布局的大体想法是将文件和目录分为如下3组: 对运行Linux的某一特定系统唯一的文件和 ...

  5. linux文件系统节点详解

    linux文件系统有两层结构,逻辑结构和物理结构.也就是inode和block. 每个文件都有一个inode, 记录文件属性:权限,时间还有最重要的block号码. block是实际存放文件内容的地方 ...

  6. Linux文件系统应用---系统数据备份和迁移(用户角度)

    1   前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的  “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决. 之前的文章对Linux的文 ...

  7. linux 文件系统解析及相关命令

    简介 文件系统就是分区或磁盘上的所有文件的逻辑集合. 文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件.目录.软连接及文件保护信息等都存储在其中. 不同Lin ...

  8. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

  9. linux文件系统简介

    文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储结构.软链接 ...

随机推荐

  1. Angular实现简单数据计算与删除

    AngularJS 1)什么是AngularJS AngularJS 简介 AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. ...

  2. java写文件实现换行

    Java 写文件实现换行   第一种: 写入的内容中利用\r\n进行换行 File file = new File("D:/text"); try { if(!file.exist ...

  3. python中简化的验证码功能

    验证码一般用来验证登陆.交易等行为,减少对端为机器操作的概率,python中可以使用random模块,char()内置函数来实现一个简单的验证码功能. import random def veri_c ...

  4. ElasticSearch——Curator索引管理

    简介 curator 是一个官方的,可以管理elasticsearch索引的工具,可以实现创建,删除,段合并等等操作.详见官方文档 功能 curator允许对索引和快照执行许多不同的操作,包括: 从别 ...

  5. shuffle 打乱一维数组

    <?php $arr = range(,); print_r($arr); echo '<br />'; shuffle($arr); print_r($arr); ?> Ar ...

  6. 第二十二章 集成验证码——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止机器人模拟真实用户登录而恶意访问,如暴力破解用户密码/恶意评论等.目前也有一些验证码比较简单,通过一 ...

  7. docker:如何查看容器的挂载目录

    docker inspect container_name | grep Mounts -A 20 docker inspect container_id | grep Mounts -A 20 [r ...

  8. SSRS 2016 Forms Authentication

    SSRS 2016 comes with completely new report manager web interface and implementing form authenticatio ...

  9. CMake生成VS2010工程相对路径和绝对路径问题说明

    CMake生成VS2010工程相对路径和绝对路径问题说明 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 主要是使用CMake生成的VS2010的工程,最好不 ...

  10. rewrite重写基础实列

    nginx 重写 rewrite 基础及实例 nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不 ...