磁盘管理与文件系统

ckh2014 ckh2014     2022-12-25     563

关键词:

技术分享图片

技术分享图片技术分享图片

  计算机上主要部件有运算器、控制器、存储器、输入输出设备,也就是上图中cpu,内存和其他IO设备,内存作为易失性存储设备,所以需要通过IO设备磁盘来持久化的存储数据。而IO设备这些硬件设备怎么被计算机识别管理呢?不同厂商生产的硬件设备电器工作特性肯定是不一样的,所以生产硬件设备的厂商会提供驱动程序,操作系统装载完驱动程序后就会抽象硬件设备所提供的功能向上输出,提供给程序员进行系统调用,而系统调用还是非常底层,所以就有库调用。对硬件进行的设备管理,也就是操作系统对驱动程序的管理。那么操作系统怎么知道哪个硬件需要输入输出呢,早期是通过轮询来实现,就是每隔一段时间扫描检查使用的数据,也就是盲等待,但是这种方式性能比较差。还有一种就是当IO设备有IO事件发生时,通知cpu,然后cpu触发内核,由内核来处理。cpu和I/O设备进行交互,是通过I/O端口来实现的,这些端口也就是系统上的I/O设备地址。每个硬件设备在Linux上都被识别为一个文件,Linux上设备文件类型有两类:一类是块设备(存储单元为‘块’),比如磁盘,一类是字符设备(存储单元为‘字符’),比如键盘。

  磁盘的基本概念: 

     磁盘的接口类型有:

        并行:

          IDE: 133MB/s 

          SCSI:  640MB/s

        串口:

          SATA: 6Gbps

          SAS: 6Gbps

          USB: 480MB/s

      磁盘设备文件命名: 

        IDE:/dev/hd

        SCSI,SATA,SAS,USB:/dev/sd

          同一个设备:a-z;比如:/dev/sda,/dev/sdb...

          同一个设备不同分区:1,2,... 比如:/dev/sda1,/dev/sda2...

      机械式硬盘还有磁道(track),柱面(cylinder),扇区(sector)的概念。

      技术分享图片

  

    第0磁道0扇区有512bytes: 

          446 bytes: 用来存放MBR(Master Boot Record)

           64  bytes: partition table (分区表)

               16个bytes标识一个分区,所以只能有四个主分区

             2  bytes:校验码 55AA

 

 

  注意:如果单盘容量大于2T,MBR分区格式就不适用了,需要采用另一种分区格式,也就是GPT(GUID partition table)

 

  MBR: 早期的linux系统为了兼容windows的磁盘所使用的分区格式,

  GPT: 磁盘空间大于2T所采用的分区格式,磁区大小可以达到4k(默认为512bytes),磁区也叫做逻辑区块位址(Logical Block Address, LBA),GPT使用34个

  LBA区块记录分区信息,磁盘最后33个LBA作为分区信息的备份。LBA0(MBR相容区块)中446bytes用来存放开机管理程式(boot loader),原本用来存放分区表信息的地方只存放一个特殊标志,用来表示磁盘为GPT分区格式。LBA1(GPT表头记录)中记录了分区表的位置和大小,同时记录了备份用的GPT分区存放位置。LBA2-33(实际记录分区信息处),每个LBA默认有4个分区,每个LBA有512bytes,每个分区信息用到128bytes,这之中除了识别码和相关记录外,会有64bits来记录开始/结束的磁区号码。 GPT分区格式没有主分区、扩展分区、逻辑分区的概念,每条记录都是单独存在,都可以为主分区,每个都可以格式化使用。

  开机管理程式: 系统载入硬件驱动的程序,主要有BIOS和UEFI两种机制

  CMOS: 记录各项硬件参数并且嵌入在主机板上的储存器

  BIOS:写入到硬件上的软件程序(开机后计算机主动执行的第一个程序)

  UEFI(Unified Extensible Firmware Interface):统一可扩展的软件体,C语言开发的  

 

磁盘分区管理工具:(fdisk、partx、kpartx、sfdisk、gdisk、parted)

  fdisk:对于一块硬盘来说只能管理15个分区

    -l : 显示当前系统所有的磁盘分区情况

  fdisk device: 显示某个设备的分区信息

    自命令:管理功能

        p:  print,显示已有分区

        n:new,创建一个分区

        d:  delete, 删除一个分区

        t: 调整分区id

        l: 列表显示分区id

        w: write: 写入磁盘并退出

        q:quit, 放弃更新并退出

通过上面的命令创建好分区后,需要重新读取硬盘分区表

    partx -a /dev/device

       -n M:N 读取哪几个分区

    kpartx -a /dev/device

       -f: force

    partprobe [/dev/device]

  查看内核是否已经识别新分区: cat /proc/partitions

  有些时候重新读取新分区后,旧的已经删除的分区还在,这时可通过 partprobe重新读取分区信息,会删除旧的记录。

  分区完,接下来就需要进行格式化操作了。为什么需要进行格式化呢,因为每个操作系统设置的文件属性都不相同,为了存放这些文件,就需要对分区进行格式化,成为操作系统能够使用的文件系统格式(filesystem)。

  Linux文件系统有ext2、ext3、ext4,xfs, btrfs,reiserfs, jfs, swap

  Windows文件系统: fat32、ntfs

  Unix: FFS、UFS、JFS2

  网络文件系统: NFS、CIFS

  集群文件: GFS2、OCFS2

  分布式文件系统:ceph、moosefs、mogilefs、GlusterFS、lustre

文件系统格式化后:

技术分享图片

文件系统格式化会区分为多个块组,每个块组都有独立的inode/block/superblock系统。

其中:

  data block(数据块):存放文件内容数据的地方,每个block大小有1k、2k、4k三种。格式化时block大小就固定了,每个block都有编号,方便inode记录。

  inode tale(inode 表): 记录文件的属性和该文件实际数据存放在哪几号block上。每个inode大小为128bytes(ext4和xfs可设置到256bytes),记录一个block号码要4bytes,block数量很多,inode直接记录肯定是不够的,所以inode记录block号码的区域定义为12个直接,一个间接,一个双间接和一个三间接。

技术分享图片

  Superblock(超级块):记录整个文件系统相关信息的地方。一般只要第一个块组中有superblock,后续的块组不一定有,就算有也是第一个块组中的superbloc备份。

  Filesystem Description(文件系统描述说明): 描述每个块组的开始与结束的block号码,以及每个每个区段(superblock,bitmap,inodemap,datablock)分别在哪个block号码之间。

  block bitmap(区块对应表):标识block使用状态的,比如使用还是未使用

  inode bitmap(inode 对应表): 标识inode使用状态,比如记录使用与未使用

文件系统格式化常用命令:

  创建文件系统:

    mkfs命令:

      # mkfs.FS_TYPE /dev/DEVICE

         ext2、ext3、ext4、xfs、btrfs、vfat

      #mkfs -t FS_TYPE /dev/DEVICE

        -l ‘LABEL‘: 设定卷标

    mke2fs: ext系列文件系统专用管理工具

      -t ext2 | ext3 | ext4

      -b 1024 | 2048 | 4096

      -L ‘LABEL‘

      -j: 相当于 -t ext3

      -i   #: 为数据空间中每多少个字节创建inode

      -N # : 为数据空间创建多少个inode

      -m # : 为管理人员预留的空间占用的百分比,默认为百分之5

      -O FEATURE[...]: 启用指定特性

      -O ^FEATURE: 关闭指定特性

    mkswap: 创建交换分区

      -L ‘LABEL‘

  其他常用工具:

    blkid: 块设备属性信息查看

      -U UUID: 根据指定的UUID来查找对应的设备

      -L LABEL: 根据指定的LABEL来查找对应的设备

    e2label: 管理ext系列文件系统的LABEL

      #e2label DEVICE [LABEL]

    tune2fs: 重新设置ext系列文件系统可调整参数的值

      -l: 查看指定文件系统超级块信息

      -L ‘LABEL‘:修改LABEL

      -m #: 修改预留给管理员的空间百分比

      -j: ext2升级为ext3

      -O: 文件系统属性启用或禁用

      -o: 调整文件系统的默认挂载选项

      -U UUID:修改UUID号

    dumpe2fs:

      -h: 查看超级块信息

   文件系统检测:

      fsck.FS_TYPE

      fsck -t FS_TYPE

        -a: 自动修复错误

        -r: 交互式修复错误

      e2fsck: ext系列文件专用的检测修复工具

        -y: 自动回答yes

        -f: 强制修复

 

文件系统格式化后,文件系统需要与根文件系统现存的目录建立关系,进而使此目录做为其他文件访问入口。也就是需要对文件系统进行挂载与卸载操作。

    挂载方法: mount DEVICE MOUNT_POINT

      mount: 通过查看/dev/mtab 文件显示当前系统已挂载的所有设备

    挂载常用命令:

      mount DEVICE DIR

        -t VFS_TYPE: 指定要挂载的设备上的文件系统类型

        -r: readonly,只读挂载

        -w: 读写挂载   

        -n: 不更新/etc/mtab

        -a:自动挂载所有支持自动挂载的设备: (定义在/etc/fstab文件中)

        -U ‘UUID‘: 以UUID指定要挂载的设备

        -B,--bind: 绑定目录到另一个目录

     注意: 查看内核追踪到的已挂载的所有设备: cat /proc/mounts

        -o options: (挂载文件系统的选项)

           async: 异步模式

           sync:同步模式

           atime/noatime:

           diratiome/nodiratime: 目录的访问时间戳

           auto/noauto: 是否支持自动挂载

           exec/noexec: 是否支持将文件系统上应用程序运行为进程

           dev/nodev: 是否支持在此文件系统上使用设备文件

           suid/nosuid:

           remount:重新挂载

           user/nouser:是否运行普通用户挂载此设备

           acl:启用文件系统上的acl功能

         注意:上述选项可多个同时使用,彼此都好分隔,默认挂载选项:defaults (rw,suid,dev,exec,auto,nouser,and async)

     卸载命令:

       #umount DEVICE

     查看正在访问指定文件系统的进程:

       # fuser -v MOUNT_POINT

       # fuer -km MOUNT_POINT  终止所有正在访问指定文件系统的进程

     挂载交换分区:

      启用: swapon

         swapon [OPTION]...[DEVICE]

            -a: 激活所有的交换分区

            -p: PRIORITY:指定优先级

      禁用: swapoff [OPTION]...[DEVICE]

     内存空闲使用状态:

        free [OPTION]

          -m: 以MB为单位

          -g: 以GB为单位

     文件系统空间占用等信息的查看工具:

        df:

          -h: human-readable

          -l: inodes instead of blocks

          -P: 以Posix兼容的格式输出

     查看某目录总体空间占用状态:

        du:

          du [OPTIONS] DIR

            -h: human-readable

            -s: summary

  要实现开机自动挂载,则要修改挂载的配置文件: /etc/fstab

    每行定义一个要挂在的文件系统:

      要挂载的设备或伪文件系统: 设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc、sysfs) 

      挂载点

      文件系统类型

      挂载选项: defaults

      转储频率:

         0:不做备份

         1: 每天转储

         2:每隔一天转储

      自检次序:

         0:不自检

         1:首先自检,一般只有rootfs才用1

 链接文件:

    硬链接:指向同一个inode的不同路径:创建文件的硬链接即为为inode创建新的引用路径,因此会增加引用计数

      不能对目录进行

      不能跨分区进行

    符号链接:指向的是另一个文件的路径:其大小为指向的路径字符串的长度,不会增加或减少目标文件的inode引用过计数

      可以对目录进行

      可以跨分区进行

    创建符号链接的命令:

      ln [-sv] SRC DEST

        -s: symbolic link

        -v: verbose

  文件管理操作对文件的影响:

    文件删除:文件的inode引用计数降低为0,inode bitmap中对应的inode号标记为空闲,block bitmap中对应的block号标记为空闲,分配的所有block也标记为空闲

    文件复制:创建新的文件,复制原来的文件内容到新文件中

    文件移动:跨分区移动同复制操作,再把原来的文件删除;如果是同分区:创建新路径指向原来路径指向的inode号

练习:1.创建一个20G的文件系统,块大小为2048,文件系统为ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认有acl挂载选项

      a.创建20G的分区

      b. mke2fs  -t ext4 -b 2048 -L TEST /dev/DEVICE

      c.编辑/etc/fstab: 增加一行:LABEL="TEST" /testing ext4 defaults,acl 0 0 

   2.创建一个5G的文件系统,卷标HUGE,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3

      a.创建5G分区

      b. mkfs.ext3 -L HUGE /dev/DEVICE

      c.修改配置文件/etc/fstab: 增加一行:LABEL=‘HUGE‘ /mogdata ext3 defaults 0 0 

   3.写一个脚本:

                (1)列出当前系统识别到的所有磁盘设备

          # fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]"

                (2)如磁盘数量为1,则显示其空间使用信息,如果大于1则显示最后一条

        #!/bin/bash

        #

        disknum=$(fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | wc -l)

        if [ $disknum -eq 1  ]: then

           fdisk -l `fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | cut -d‘ ‘ -f2`

        else

          fdisk -l `fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | tail -1 | cut -d‘ ‘ -f2 ` 

        fi       

           

 

  

四linux磁盘与文件系统管理(代码片段)

一、Linux文件系统每种操作系统能够使用的文件系统并不相同,Linux的正统文件系统为Ext2(Linuxsecondextendedfilesystem,ext2fs)。现在通常可以称呼一个可被挂载的数据为一个文件系统。文件系统的运行机制与操作系统的文... 查看详情

磁盘管理与文件系统

...IO设备,内存作为易失性存储设备,所以需要通过IO设备磁盘来持久化的存储数据。而IO设备这些硬件设备怎么被计算机识别管理呢?不同厂商生产的硬件设备电器工作特性肯定是不一样的,所以生产硬件设备的厂商会提供驱动程... 查看详情

linux的磁盘管理与文件系统

   本篇内容如下:            1、硬盘结构            2、磁盘分区类型    查看详情

linux磁盘与文件管理(代码片段)

...]设备文件名-b列出保留为坏道的部分-h列出superblock的数据磁盘目录与容量:df,dudf[-ahiHTm][目录与文件名]-a列出所有的文件系统-k以kb的容量显示文件系统-m以mb的容量显示文件系统-h以人易于阅读的数据显示文件系统-H以1000... 查看详情

磁盘管理和文件系统

目录一、磁盘基础(1)硬盘的物理结构:(2)硬盘的数据结构:(3)磁盘存储容量公式(4)定位方式(5)磁盘接口类型(6)MBR与磁盘分区表示(7)磁盘分区结构(8)文件系统类型二、检测并确认新硬盘三、规划硬盘中的分... 查看详情

高级文件系统管理之mdadm与lvm的创建

※配置配额系统磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间,比如一些网盘就是基于这个功能来做的,分配给用户固定的空间,花钱买,可以将空间设置的更... 查看详情

windows存储管理之磁盘类型简介

...种操作系统连接到存储系统之后,并且操作系统识别物理磁盘之后,需要对磁盘进行进一步配置。如果用户连接存储是的WindowsServer,存储管理员势必需要了解Windows中的磁盘类型与文件系统。笔者从存储的角度总结了Windows磁盘与... 查看详情

windows与linux操作系统对磁盘和文件的管理方式有啥异同点(求详细)

Windows与Linux操作系统对磁盘和文件的管理方式区别为:文件格式不同、空间不同、碎片整理不同。Windows与Linux操作系统都是以一组磁盘管理应用程序的形式提供给用户。在硬盘中产生临时交换文件,用该文件所占用的硬盘空间虚... 查看详情

linux磁盘管理

概述Linux磁盘管理好坏管理直接关系到整个系统的性能问题。Linux磁盘管理常用三个命令为df、du和fdisk。df:列出文件系统的整体磁盘使用量du:检查磁盘空间使用量fdisk:用于磁盘分区dfdf命令参数功能:检查文件系统的磁盘空间... 查看详情

文件系统存储数据,与数据库系统存储数据的差别

...盘和可以动的存储设备等。文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。操作系统中负责管理和存储文件信息的软件机构... 查看详情

文件系统管理

...述1.文件系统是基于操作系统的,用来管理和组织保存在磁盘驱动器上的数据的系统软件,通过对数据存储布局/空间管理/文件命名/安全控制等方面的管理,解决了如何在设备上有效的存储数据。2.文件系统是操作系统与磁盘设... 查看详情

文件系统管理

...述1.文件系统是基于操作系统的,用来管理和组织保存在磁盘驱动器上的数据的系统软件,通过对数据存储布局/空间管理/文件命名/安全控制等方面的管理,解决了如何在设备上有效的存储数据。2.文件系统是操作系统与磁盘设... 查看详情

操作系统思维导图|文件管理篇

计算机相关知识思维导图开源地址(源文件可修改扩展):https://github.com/FISHers6/CS-Mind适合408考研、计算机理论知识学习更新OS之文件管理:文件系统概念、文件系统实现、磁盘组织与管理文件系统基础文件系统实现磁盘组织与管理 查看详情

操作系统思维导图|文件管理篇

计算机相关知识思维导图开源地址(源文件可修改扩展):https://github.com/FISHers6/CS-Mind适合408考研、计算机理论知识学习更新OS之文件管理:文件系统概念、文件系统实现、磁盘组织与管理文件系统基础文件系统实现磁盘组织与管理 查看详情

三:磁盘与文件系统篇——初识文件系统

...ext3、ext4等等,它主要是管理系统的数据,数据是保存在磁盘里面的,当磁盘被分区、格式化后就可以正常的存取数据了,其实格式化就是向分区的部分写入文件系统,在文件系统的概念中,数据是怎么保存的,还有那些档案的... 查看详情

rh124-14文件系统和磁盘设备管理

第十四章文件系统和磁盘设备管理14.1文件系统和磁盘设备的管理与使用磁盘设备 磁盘设备是支持随机读写数据的设备.在物理机器上,设备文件默认都存放在/dev/目录下,第一个硬盘是/dev/sda,第二个硬盘是/dev/sdb,如此类推.第一个硬... 查看详情

linux入门之磁盘管理/etc/fstab与交换分区

Linux入门之磁盘管理(4)/etc/fstab与交换分区在linux通过挂载命令可以使用各种选项进行不同文件系统的设备文件进行挂载,当然不仅限于块设备,但是无论怎么挂载,一般默认新建的文件系统进行挂载开机是不会自动挂载的,每次... 查看详情

linux磁盘管理的linux管理命令

磁盘空间管理系统软件和应用软件,都要以文件的形式存储在计算机的磁盘空间中。因此,应该随时监视磁盘空间的使用情况。Linux系统提供了一组有关磁盘空间管理的命令。df命令功能:检查文件系统的磁盘空间占用情况。可... 查看详情