Linux磁盘和文件系统基础

概述

    Linux系统上,磁盘要正常的进行数据的存储,需要先进行分区,再进行格式化生成文件系统,最后挂载到某个目录下,才能进行正常的数据存取,本篇就介绍一下磁盘从分区到正常使用的几个步骤,具体分为以下几个部分:

    1、磁盘的基础概念

    2、磁盘的分区类型MBR、GPT

    3、管理磁盘分区

    4、管理文件系统

    5、挂载设备

    6、mount各挂载选项效果展示

第一章    磁盘的基础概念

    1、磁盘接口类型

        IDE(ata):并口,133MB/s

        SCSI:并口,UltraSCSI320,320MB/s;UltraSCSI,640MB/s

        SATA:串口,6Gbps (除以8则可以换算成MB/s)

        SAS:串口,6Gps

        USB:串口,480MB/s(USB3.0)

        并口:同一线缆可以接多块设备

            IDE:可接两个设备,主、从

            SCSI:

                宽带:可接16-1个设备

                窄带:可接8-1个设备

        串口:同一线缆只可以接一个设备

        blob.png

    2、磁盘结构详解

        blob.png

        blob.png

        

        

        磁头(head):一个磁盘可能有多个盘面组成,每个盘面上都需要有个读写的磁头,这样就可以通过磁头数量来获知盘面的数量了,早期一般为256个

        盘面:存储数据的介质

        磁道(track):每个盘面逻辑划分的一个个的同心圆,就成为磁道,磁盘刚出厂时,厂家会进行低级格式化,低格就是划分磁道,早期一般为1024个

        扇区(sector):操作系统以扇区形式将信息存储在硬盘上,每个扇区包括512个字节的数据,早期一个磁道一般分为63个扇区

        柱面(cylinder):所有盘面上的同一磁道构成一个圆柱,通常称做柱面

       

    3、Linux设备类型:

        设备文件存在的目的:是将设备关联至设备的驱动程序,是设备的访问入口

        块设备:随机访问,数据交换单位是“块”

        字符设备:顺序访问,数据交换单位是“字符”

        通过设备号来区分设备类型和编号:

            major:主设备号,区分设备类型,用于标明设备所需要的驱动程序

            minor:次设备号,区分同种类型下的不同设备,是特定的访问入口

        QQ截图20160826081318.png

        可通过mknod命令来手动创建设备文件

            语法:mknod [OPTION]… NAME TYPE [MAJOR MINOR]

                NAME:设备文件名

                TYPE:指明是块设备(b)还是字符设备(c)

                [major minor]:指明主次设备号,可省略,系统会自动识别并分配

                选项:

                    -m  MODE 在创建设备文件时,如果不想使用默认权限,直接指明其权限

                    例如:mknod /dev/testdev c 111 1 

                    表示创建一个设备文件名为/dev/testdev的字符设备,主设备号为111,次设备号为1

                可通过创建设备号与原有设备号一样的设备文件,然后将新建的设备文件挂载到别的目录,访问别的目录时,相当于就是访问了原有设备上的文件

        blob.png

    4、硬盘的设备文件名: /dev/DEV_FILE

        IDE: /dev/hd

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

        不同设备: a-z,如/dev/sda, /dev/sdb, …

        同一设备上的不同分区: 1,2, …如:/dev/sda1, /dev/sda5

        注意:CentOS 6和7统统将硬盘设备文件标识为/dev/sd[a-z]

第二章    分区类型MBR、GPT

    1、为什么要分区:分区实际是整个磁盘的逻辑边界,用来存储可独立的文件系统     

        优化I/O性能

        实现磁盘空间配额限制

        提高修复速度

        隔离系统和程序

        安装多个OS

        采用不同文件系统

    2、MBR:Master Boot Record 主引导程序

        MBR使用32位表示扇区数, 故单个分区大小不超过2T。按照柱面进行划分分区,一个柱面只能属于一个分区,现在由于引入了LBA机制,也支持一个柱面属于不同分区了

        MBR分为三部分:注意,备份MBR只会备份主分区和扩展分区的信息,扩展分区中逻辑分区的信息并不存储于MBR中

            前446byte:bootloader程序,引导启动操作系统的程序

            64byte:文件系统分区表,每16个字节标识一个分区,一共只能有4个分区

            2byte:标识MBR区域有效性标识,55AA标识有效,否则为无效

        主分区和扩展分区的标识:1-4,逻辑分区:5+

    blob.png

 

    3、GPT分区    

        GUID patition table 支持128个分区,使用64位,支持8Z(512Byte/block ) 64Z (4096Byte/block)

        使用128位UUID 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位

        需要UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

    blob.png

    

第三章    管理磁盘分区

    1、创建磁盘分区:

        fdisk 创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区

        gdisk 创建GPT分区

        GNU parted 高级分区操作(创建、复制、调整大小等等)

        partprobe-重新设置内存中的内核分区表版本

       

        分区管理命令fdisk和gdisk

            fdisk /dev/DEVICE

            gfisk /dev/DEVICE 类似于fdisk 的用来管理GPT分区的工具

            语法格式:fdisk [OPTION] DEVICE

                选项:

                    -l  查看指定设备的分区信息

                    -u  通常与-l一起使用,表示显示分区信息时,以扇区的起始号表示分区,而不是默认的以柱面的起始号标识分区

                子命令:

                    p 分区列表

                    t 更改分区类型

                    l  表示列出支持的分区类型列表

                    n 创建新分区

                    d 删除分区

                    w 保存并退出

                    q 不保存并退出

        blob.png

        blob.png

        blob.png

            parted命令: parted的操作都是实时生效的,小心使用

            用法: parted [选项]… [设备 [命令 [参数]…]…]

              如:

                parted /dev/sdb mklabel gpt|msdos  修改/dev/sdb分区类型为GPT|MBR类型

                parted /dev/sdb print  显示/dev/sdb设备分区信息

                parted /dev/sdb mkpart primary 1 200 (默认M)   在/dev/sdb设备上创建一个主分区,设备号为1,大小为200M

                parted /dev/sdb rm 1  在/dev/sdb设备上删除分区号为1的分区

                parted -l  类似fdisk -l  显示当前系统上所有设备的所有分区信息

        blob.png

        blob.png

    2、同步分区表

        在已经分区并且已经挂载其中某个分区的磁盘上创建新的分区,内核可能在创建完成后无法直接识别,这时就需要手动的让内核重新加载分区表      

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

        通知内核重新读取硬盘分区表:

            新增分区用

                partx -a /dev/DEVICE

                kpartx -a /dev/DEVICE 

                    -f: force

            删除分区用

                partx -d –nr N /dev/DEVICE

                centos6: –nr N-M

                CentOS 5, 7: 使用partprobe,partprobe [/dev/DEVICE]

        新增分区:

        blob.png

        QQ图片20160826082642.png

        QQ截图20160826083349.png

        删除分区:

        blob.png

        1.png

        2.png

第四章    管理文件系统

    1、什么是文件系统

        文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

        从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

    2、常见的文件系统:

        Linux的文件系统:ext2、ext3、ext4、xfs、reiserfs、btrfs

        光盘的文件系统:iso9660

        网络文件系统:nfs、cifs

        集群文件系统:gfs2、ocfs2

        内核级分布式文件系统:ceph

        windows文件系统:vfat、ntfs

        伪文件系统:proc、sysfs、tmpfs、hugepagefs

        Unix的文件系统:swap

        用户空间的分布式文件系统:mogilefs、moosefs、glusterfs

        RAW:未经处理或者未经格式化产生的文件系统

        查前支持的文件系统: cat /proc/filesystems

    3、文件系统分类

        根据其是否支持"journal"(日志)功能:

            日志型文件系统: ext3, ext4, xfs, …

            非日志型文件系统: ext2, vfat

        文件系统的组成部分:

            内核中的模块: ext4, xfs, vfat

            用户空间的管理工具: mkfs.ext4, mkfs.xfs,mkfs.vfat

        Linux的虚拟文件系统: VFS

        1111.png

    4、文件系统管理工具

          创建文件系统       

            mkfs命令: mkfs.FS_TYPE /dev/DEVICE

            支持的类型:ext4、xfs、btrfs、vfat

            也可写为: mkfs -t FS_TYPE /dev/DEVICE

                -L 'LABEL': 设定卷标

        blob.png

        blob.png

            创建ext系列文件系统专有命令mke2fs

            语法:mke2fs [OPTIONS] device

                选项:

                -t {ext2|ext3|ext4}

                -b {1024|2048|4096}

                -L 'LABEL'

                -j  相当于 -t ext3

                    mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

                -i #: 指明多少字节创建一个inode,此大小不应该小于block的大小

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

                -I 一个inode记录大小128—4096

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

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

                -O ^FEATURE:关闭指定特性

        blob.png

    5、文件系统标签:指向设备的另一种方法,与设备无关

        blkid:块设备属性信息查看

            语法:blkid [OPTION]… [DEVICE]

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

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

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

            语法:e2label DEVICE [LABEL]

        findfs :查找分区

            findfs [options] LABEL=<label>

            findfs [options] UUID=<uuid>

        blob.png

        blob.png

    6、修改文件系统属性信息:tune2fs

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

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

            -L 'LABEL':修改卷标

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

            -j: 将ext2升级为ext3

            -O: 文件系统属性启用或禁用, –O ^has_journal

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

            -U UUID: 修改UUID号

        dumpe2fs:

            dumpe2fs [-h] device 显示ext系列文件系统上超级块的信息和各个块组的详细的属性信息。

            加上-h 则表示只显示超级块的信息,和tune2fs -l 显示出来的信息一样

        22222.png

    7、文件系统检测和修复:(危险操作,谨慎!要umount后操作分区)

        因进程意外中止或系统崩溃等原因导致写入操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统,建议离线进行,常发生于死机或者非正常关机之后,挂载为文件系统标记为“dirty”时。

        

        ext系列文件系统专用工具:e2fsck

            语法:e2fsck [OPTIONS] device

                -y  对所有问题自动回答为yes

                -f  强制,即使文件系统处于正常状态,也进行修复

        各种文件系统通用的工具:fsck,实际是将未写完的文件删除

            语法:fsck [OPTION] device

                -t FSTYPE:指明文件系统类型

                -y   无需交互式确认,自动修复所有错误

                -r   交互式修复

    8、blkid命令:查看文件系统相关属性

        语法:blkid [OPTION] device

            blkid device  显示指定设备的简单属性信息(UUID、卷标、文件系统类型等)

            blkid -L LABEL  根据指定的LABLE 定位设备文件名

            blkid -U UUID  根据指定的UUID 定位设备文件名

        例如 blkid /dev/sda6

            blkid -L MADATA 

第五章    挂载设备

    根文件系统之外的其他文件系统要想能够访问,必须要通过关联至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为“挂载点”,挂载点用于作为另一个文件系统的访问入口

    1、挂载点:用于作为另一个文件系统的访问入口

        作为挂载点要求:

            <1>事先存在

            <2>应该使用未被或者不会被其他进程使用到的目录

            <3>挂载点下如果原来有文件,挂载完成后,原来的文件将被隐藏

    2、mount命令:(用法示例见第六章实例部分)

        语法:mount [命令选项][-t TYPE][-o 挂载选项] device dir

            命令选项:

                -r  表示只读挂载

                -w  表示读写挂载,默认就是读写挂载

                -n  默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中,-n用于禁止此特性

                -L LABLE   挂载时不以设备文件名指明设备,而是以卷标指明要挂载的设备

                    如:mount -L MYDATA /mnt/test

                -U UUID  挂载时以UUID的方式指明设备

                    如:mount -U '0c50523c-43f1-45e7-85c0-a126711d406e'  /mnt/test

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

            [-t TYPE] 用于指明要挂载的设备上的文件系统类型,多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类别

            [-o 挂载选项] 挂载的选项,指明挂载时文件系统的特性

                -o async  表示挂载的设备写入时进行异步操作

                -o sync   表示挂载的设备写入时进行同步操作

                -o atime  表示文件或目录在访问时更新其访问时间戳

                -o noatime  表示文件或目录在访问时不更新其访问时间戳

                -o diratime|noatime   表示目录在被访问时是否更新其访问时间戳

                -o remount  表示重新挂载,自动先卸载再挂载

                -o acl  表示支持使用facl功能

                -o ro   表示只读挂载

                -o rw   表示读写挂载

                -o dev|nodev   表示此设备上是否允许创建设备文件

                -o exec|noexec  表示是否允许运行此设备上的可执行程序文件

                -o auto|noauto  表示此设备是否支持mount -a 自动挂载

                -o user|nouser  表示是否允许普通用户挂载此文件系统

                -o suid|nosuid  表示是否允许程序文件上的SUID和SGID权限生效

                -o acl|noacl  表示是否允许设置acl权限

                -o default 执行默认挂载选项,默认是启用rw、suid、dev、exec、auto、nouser、async、relatime这些选项

                -o指明多个挂在选项时,多个挂载选项之间用,逗号分隔

                    当不指名-o的挂在选项时,默认执行的挂载选项是rw、suid、dev、exec、auto、nouser、async、relatime

                一个使用技巧:可以实现将目录绑定至另一个目录上,作为其临时访问入口

                    例如:mount –bind /etc  /mnt/test  表示将/etc目录绑定到/mnt/test目录下

                查看当前系统所有已挂载的设备:

                    <1>mount

                    <2>cat /etc/mtab

                    <3>cat /proc/mounts

                挂载本地的回环设备:(直接使用iso、img等镜像可用此方法,类似于虚拟光驱的作用)

                    mount -o loop /PATH/TO/SOME_LOOP_FILE  MOUNT_POIN

    3、卸载命令umount,注意:正在被进程访问到的挂载点,无法被卸载

        查看挂载情况: findmnt MOUNT_POINT

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

            lsof MOUNT_POINT

            fuser -v MOUNT_POINT

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

        卸载:

            umount DEVICE

            umount MOUNT_POINT

    4、设定除根文件系统意外的其他文件系统能够开机自动挂载:/etc/fstab

        /etc/fstab的格式

        6个字段:

            <1>要挂载的设备:

                支持 设备文件名、卷标(LABLE)、UUID、伪文件系统(如:sysfs、proc、tmpfs)这几种格式

            <2>挂载点:

                swap类型的设备的挂载点为swap

            <3>文件系统类型

            <4>挂载选项

                default:使用默认挂载选项

                如果要同时指明多个挂载选项,彼此间以逗号进行分割

                    如 default,acl,noatime,noexec

            <5>转储频率

                0:表示从不备份

                1:表示每天备份一次

                2:表示每隔天备份一次

            <6>自检次序

                0:表示不自检

                1:表示首先自检,通常只能是根文件系统可用1

                2:次级自检

        编辑完该配置文件后,可用mount -a 自动挂载该文件中定义的所有支持自动挂载的设备

第六章    磁盘管理相关操作示例

    1、备份mbr、恢复mbr

        blob.png

        blob.png

        blob.png

    2、删除、恢复mbr分区中的bootloader

        利用hexdump -C -n 512 /dev/sdb  可查看/dev/sdb磁盘上前512字节的内容

        blob.png

        利用hexdump -C /testdir/mbr.bak 可查看之前备份出来的mbr的内容

        blob.png

        破坏bootloader:dd if=/dev/zero of=/dev/sdb bs=1 count=446

        blob.png

        blob.png

        由于没有破坏分区表信息,故分区信息依然可以显示

        blob.png

        恢复bootloader:dd if=/testdir/mbr.bak of=/dev/sdb bs=1 count=446

        blob.png        

    3、删除、恢复mbr中分区表

        删除分区表:dd if=/dev/zero of=/dev/sdb bs=1 count=62 seek=446  seek表示写入时跳过的字节数

        blob.png

        blob.png

        恢复分区表:dd if=/testdir/mbr.bak of=/dev/sdb bs=1 count=62 skip=446 seek=446   skip表示读取时跳过的字节数

        blob.png

        blob.png

    4、删除、恢复mbr中分区状态信息

        删除分区状态标识信息 dd if=/dev/zero of=/dev/sdb bs=1 count=2 seek=510  seek指定写入时跳过的字节数

        blob.png

        blob.png

        恢复分区标识符信息:dd if=/testdir/mbr.bak of=/dev/sdb bs=1 count=2 skip=510 seek=510

        blob.png

        blob.png

    5、mount挂载选项效果展示

        <1>-r只读挂载,-w读写挂载,-o remount重新挂载

        blob.png

        <2>-L “LABEL”用卷标挂载,-o ro 只读挂载;-o rw 读写挂载

        blob.png

        <3>-B  将一个目录挂载到另一个目录,相当于给目录创建了另一个访问入口(注意删除一个目录中的内容,另一个目录中的内容也就没有了)

        blob.png

        <4>-U UUID以UUID方式挂载,-o acl|noacl 设置启用acl和关闭acl功能

        blob.png

        <5>-o exec|noexec允许或禁止可执行文件运行

        blob.png

        <6>-o suid|nosuid 允许或禁止suid,sgid权限

        dsf.png

        blob.png

        <7>-o dev|nodev  是否禁用设备文件的使用

        dev.png

        nodev.png

原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/40225

(1)
上一篇 2016-08-29 08:49
下一篇 2016-08-29 08:49

相关推荐

  • iptables:防火墙以及网络协议基本原理

    一、 Linux 网络安全模型      1. 防火墙: 工作在主机或者网络边缘,对进出报文使用实现定义的规则进行检测,并且由匹配的规则进行处理的一组硬件或者软件。也可能两者结合。          1) 通常使用的防火…

    Linux干货 2015-07-24
  • Linux文件权限管理及目录文件的深入理解。

    文件权限及目录 初学Linux,感觉这个东西该复杂,而且逻辑非常的强。难~! 自己根据学习到的理论和实践,得出的对文件权限,进程,以及特殊权限的深入理解。希望能解决初学者对于权限的困惑。如有错误请指正。 文件的权限,指定的是什么? 是文件的权限位上的权限,针对三类用户,任何用户都必须是三类用户中的一种,属主属组和其他人的权限rwx   &…

    Linux干货 2016-08-10
  • bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容

    bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容 bash的基础特性:命令的执行状态结果 bash通过状态返回值来输出此结果: 成功:0 失败:1-255 命令执行完成之后,其状态返回值保存于bash的特殊变量$?中。 [root@localhost ~]# ls anaconda-ks.cfg [root@localhost ~]# echo…

    Linux干货 2018-03-11
  • Linux入门之常见文本处理工具

    Linux入门之常见文本处理工具 文本内容查看命令 cat   tac    rev  more  less   head   tail 普通文本查看 cat  tac  rev cat 命令 cat  [option]…

    Linux干货 2016-08-08
  • Linux下 文件类型不同颜色的含义

    linux 文件颜色的含义 蓝色代表目录 绿色代表可执行文件 红色表示压缩文件 浅蓝色表示链接文件 灰色表示其他文件 红色闪烁表示链接的文件有问题了 黄色表示设备文件 蓝色文件———-目录 白色文件———-一般性文件,…

    Linux干货 2016-10-18
  • Linux shell之bash特性大全详解(持续更新ing)

    一、shell是什么?     Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中…

    Linux干货 2016-03-09