一、磁盘简介

    当前常用的磁盘还是机械硬盘HDD,但固态硬盘SSD的应用越来越广泛了。常见的机械硬盘有U盘、光盘、软盘、硬件和磁带等,机械硬盘能够永久存储数据(在不用通电的情况下)。


    磁盘是如何存储数据的呢?总的来说采用磁性碟片来存储数据。磁盘有很多同轴磁盘片叠成,每个磁盘片有两个磁盘面都可以用来存储数据。磁盘面上有很多同心圆的磁道,存取数据时磁盘转动,使磁头沿这些磁道运动。由于各个同心圆磁道周长不同,每个磁道存储的数据量是不同的,所以磁盘是按照磁盘上划分的扇区来存储数据的,每个扇区的大小是512bytes,每次存取数据时所有盘片的所有盘面都进行存储。磁盘在出厂时由厂家进行低级格式化,为磁盘划分磁盘柱面(不同盘面上相同磁道组成同一柱面)。磁盘分区是按照柱面划分的,分区是磁盘的逻辑边界,划分分区可以划分磁盘为多个文件系统。


    硬盘的主引导记录分区列表MBR(master boot record)从磁盘的第0磁道第0柱面第1扇区开始,共512bytes:

      前446bytes存储bootloader引导程序,用于在计算机开机时引导磁盘

      接着64bytes中每16字节标识一个分区,最多4个主分区也可以是3个主分区+1个扩展分区或两个主分区+两个扩展分区

      最后2bytes用于标记MBR是否有效(magic number)


二、Linux文件系统

    为了加快数据的存储速度,Linux文件系统将磁盘划分为一个一个的磁盘块,块大小有1024,2048,4096kb几种,一个磁盘块最多只能存储一个文件(但该文件可以有多个路径,即硬链接)。每个磁盘块对应一个inode节点。所有inode存放在同一个源数据区域里,当系统需要访问某个磁盘块的文件时,首先从该数据区域里读取这个/些磁盘块的对应inode节点,最后才访问这些磁盘块,这样系统就可以只查看这个数据区里的inode节点信息就可以找到对应磁盘块的文件,而不用扫描整个磁盘,加快了数据的读取速度。    


    多个磁盘块组成一个数据块组,每个块组都有一个块位图和一个inode表。bitmap块位图,用于管理(标识)空闲数据块。inode表与数据块的物理磁盘位置越近,数据读取时的寻道时间越短,所以将整个文件系统分成多个小的块组能加快数据读取。块组描述符表记录了每个块组从几块开始几块结束。

    超级块用于存放文件系统信息,包括保存块组个数,每个块组包含多少个磁盘块,每个磁盘快的大小,空闲磁盘块,已用磁盘块,空闲inode,已用inode。


    ext2_inode中包含的数据:mode、owner info、size、timestamps、direct blocks、data、indirect blocks、double inditect、triple indirect。


    ext3是一种日志文件系统(journal file system)。日志文件系统在相对非文件系统新增了一个日志区,日志区用于系统崩溃后的数据恢复。日志的写入方式包括顺写、回写(实际数据先写入主文件系统,元数据再写入日志系统)和全日志(元数据和实际数据同时分别写入日志系统和主文件系统)。日志文件系统的数据存储速度较慢,但在很多对数据安全性要求高的领域有很大作用。

    

三、链接文件

  硬链接--指向同一inode的不同路径

    1.只能对文件创建,不能应用于目录

    2.不能跨文件系统

    3.创建硬链接会增加文件被文件被链接的次数

  符号链接--软链接文件存放的是它所指向的文件的文件名,大小为文件名字符串的大小

    1.可应用于目录

    2.可以跨文件系统

    3.不会增加被链接文件的链接次数

    4.其大小为指定的路径所包含的字符个数

  命令:ln -s、-v


四、创建设备文件

    命令 mknod [OPTION]... NAME TYPE [MAJOR MINOR]

      -m  mode        指定创建文件的权限

      NAME TYPE       包含b、c(设备文件包括块设备b是按块为单位,随机访问的设备,字符设备c是按字节为单位的线性设备)

      [MAJOR MINOR]   包括主设备号MAJOR munber(用于标识设备类型)和次设备号MINOR number(用于标识同一种类型中不同设备)


五、显示磁盘的使用情况report file system disk space usage

    df

      -i, --inodes   显示inode的使用情况list inode information instead of block usage

      -h, --human-readable  

      -P, --portability   use the POSIX output format


六、查看磁盘的分区列表信息 manipulate disk partition table

fdisk [-uc] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device

  -m   查看帮助

  p:显示当前硬件的分区,包括没保存的改动

  n:创建新分区

  e:扩展分区

  d:删除一个分区

  w:保存退出

  q:不保存退出

  t:修改分区类型

  l:显示所支持的所有类型、查看当前系统识别了几块硬盘

 

七、查看内核

[root@bogon ~]# cat /proc/partitions 

major minor  #blocks  name


   8        0   20971520 sda

   8        1     512000 sda1

   8        2    2048000 sda2

   8        3    1257472 sda3

   8        4          1 sda4

   8        5   17149952 sda5

  11        0    1048575 sr0


八、重读分区表

  partprobe

  partx


九、创建Linux文件系统build a Linux filesystem

 mkfs [options] [-t type] [fs-options] device [size]

mkfs是一个交互式的命令


十、虚拟文件系统 VFS(Virtual Filesystem Switch)

     Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统。由于文件系统类型的不同,调用机制也不同,系统调用难以支持多种文件系统,VFS解决了这个难题,VFS提供了系统调用(用户进程)和文件系统之间的抽象接口,使用户进程可以方便地调用文件系统。

   linux支持的文件系统类型 FAT32(vfat)、NTFS、、SO9660、extended(ext2、ext3、ext4)、CIFS、xfs、reiserfs、jfs、nfs、ocfs2、gfs2、swap等


十一、Linux分区

    Linux所有分区(物理)都必须挂载在某个目录(逻辑)上才能进行数据读写操作。所有的目录逻辑上都包含于根目录下的,根下的目录只是作为其它分区的转接入口,要访问某个分区就要先引用根下的目录(根分区自引用)。

 

:本文参考自马哥的Linux运维系列视频,但是经过笔者的修改