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)
M20-1倪文超M20-1倪文超
上一篇 2016-08-29
下一篇 2016-08-29

相关推荐

  • 文件的权限和访问控制列表

      在linux管理中,为了使不同的用户对文件有不同的操作权限。我们需要正确的修改文件的权限,一方面是为安全着想, 另一方面则是防止自己辛辛苦苦码出的东西被其它用户给误删。 1.如何修改文件的属主和属主:   前面用户和组管理的内容中,我们已经对文件的属主、属组问题做了说明。有时候我们需要对一些文件的属组和属组进行修改…

    Linux干货 2016-08-04
  • 初学正则表达式

      前言:     在学正则表达式之前,有小伙伴讲解说,正则表达式在文本处理上功能非常强大、使用非常普遍,并且现在很多的工具软件都支持它,以后的学习工作中会经常使用,非常灵活,但是灵活的同时又是繁琐,需要小心翼翼的仔细推敲。抱着认真、好奇的心思听完了王老的课。我自己理解的正则表达式是,给一些符号赋予一定的涵义…

    Linux干货 2016-08-12
  • HA Cluster—Keepalived

    HA Cluster 集群类型:LB(lvs/nginx(http/upstream, stream/upstream))、HA、HP 系统可用性的公式:A=MTBF/(MTBF+MTTR) 系统故障: 硬件故障:设计缺陷、wear out、自然灾害 软件故障:设计缺陷 提升系统高用性的解决方案之降低MTTR: 解决方案:冗余(redundant) acti…

    Linux干货 2017-10-30
  • MySQL or MariaDB 简介

    DBMS:数据库管理系统 RDBMS:关系型数据库管理系统    总之:他们都是一个数据管理程序;大多都是CS架构,都有专门的通信协议进行数据交换 关系模型:               表(行或者列):二维关系 设计范式:       &…

    Linux干货 2017-01-12
  • 运维练习题

     1、简述TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态。TCP三次握手:客户端向服务器发送SYN包,客户端进入syn_SEND状态服务端收到客户端的发送的包返回ACK+SYN包,服务器端进入SYN_RECV状态客户端收到服务器端返回的包再发ACK包,客户端进入ESTABLISHED状态,服务器收到包也进入ESTABLISHED状态客户…

    Linux干货 2016-06-12
  • 为你的网络传输加把锁(OpenSSL)

    互联网形成的初期,更多关注的是设备之间通过网络相互访问功能的实现,我们都知道,两个设备之间要想相互通信,就必需遵循某种协议,于是早期的互联网也出现来众多的协议,比如传输层最著名的协议就是tcp和udp,而应用层比较著名的协议有:http、ftp、pop、smtp、dns、telnet等等,而这些协议这开发初期,更多是关注功能的实现,数据这网络上传输是明文方式…

    Linux干货 2015-12-06