磁盘管理

磁盘管理

    设备文件

        I/O Ports: I/O设备地址

        一切皆文件:

        open(), read(), write(), close()

        设备类型:

        块设备: block,存取单位“块”,磁盘

        字符设备: char,存取单位“字符”,键盘

        设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

        设备号码:

        主设备号: major number, 标识设备类型

        次设备号: minor number, 标识同一类型下的不同设备

        [root@localhost ~]# ll /dev/sda*

        brw-rw—-. 1 root disk 8, 0 Aug 25 05:24 /dev/sda

        brw-rw—-. 1 root disk 8, 1 Aug 25 05:24 /dev/sda1

        brw-rw—-. 1 root disk 8, 2 Aug 25 05:24 /dev/sda2

        brw-rw—-. 1 root disk 8, 3 Aug 25 05:24 /dev/sda3

        brw-rw—-. 1 root disk 8, 4 Aug 25 05:24 /dev/sda4

        brw-rw—-. 1 root disk 8, 5 Aug 25 05:24 /dev/sda5

        brw-rw—-. 1 root disk 8, 6 Aug 25 05:24 /dev/sda6

        8为设备类型,1.2.3.4.5.6为同一设备类型的不同编号

    硬盘接口类型

        并行:(数据传输的互相干扰)

        IDE: 133MB/s

        SCSI: 640MB/s

        串口:(减少数据传输的互相干扰)

        SATA: 6Gbps

        SAS: 6Gbps

        USB: 480MB/s

        rpm: rotations

        per minute

    设备文件

        磁盘设备的设备文件命名: /dev/DEV_FILE

        IDE: /dev/hd

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

        不同设备: a-z

        /dev/sda, /dev/sdb, …

        同一设备上的不同分区: 1,2, …

        /dev/sda1, /dev/sda5

    硬盘结构

      blob.png磁盘管理

    硬盘存储术语

         blob.png

磁盘管理

        head:磁头   8个字节存放磁头  有256

        track:磁道  

        cylinder: 柱面

        secotr: 扇区, 一个扇区的容量为512bytes

        一盘面容量: 512*secotr * track*head

        cylinder

        一柱面容量=track*head

        在centos 6上fdisk -l /dev/sda  默认以柱面显示磁盘

        在centos 7 上fdisk -l /dev/sda 默认以扇区显示磁盘

    磁盘管理blob.png

    磁盘分区

        为什么是分区?

            • 优化I/O性能

        系统,数据库,日志等划分分区,有优化效果

            • 实现磁盘空间配额限制

            • 提高修复速度

        假若系统文件与数据库文件在同一分区,那么数据的修复速度就很慢了

            • 隔离系统和程序

            • 安装多个OS

    

    分区

        两种分区方式: MBR, GPT

            MBR: Master Boot Record,主引导记录, 1982年, 使用32位表示扇区数, 分区最多表示 2^32容量2^32*512字节=不超过2T

        如何分区:按柱面

            0磁道0扇区: 512bytes

            446bytes: boot loader

            64bytes:分区表

            16bytes: 标识一个分区

            2bytes: 55AA(没有55AA,系统认为是一个裸盘 , 没有分区的硬盘 , 系统会提示重新分区)

            4个主分区; 3主分区+1扩展(N个逻辑分区)

                ==>可以使用命令查看磁盘前512的二进制的字节

                    [root@localhost ~]# hexdump -C -n 512 /dev/sda    

            blob.png

            lsblk看到是内存上的磁盘分区表,有可能不会同步,用partx /dev/sd[磁盘号]  而fdisk看的是磁盘上分区表

            如果只清空55 aa 两个字节用命令 , 清空后会默认为该磁盘未分区

            dd if=/dev/zero of=/dev/sda ba=1 count=2 skip=510(跳过if 510个字节) seek=510(跳过of的 510个字节)

                增加硬盘后扫描硬盘

                echo "- – -" > /sys/class/scsi_host/host0

                host0    host1    host2

        MBR分区结构

    磁盘管理blob.png

   

     GPT分区

        GPT:GUID patition table 全局唯一标识分区表 , 支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

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

        使用GPT分区必须要有硬件支持

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

        磁盘管理blob.png

        UUID随机生成,有时间硬件设备等其他特征信息组成格式为8-4-4-8

        GPT分区结构

        EFI部分又可以分为4个区域: EFI信息区(GPT头)分区表 GPT分区备份区域

          磁盘管理blob.png

  

    管理分区

        列出块设备

            lsblk

            lsblk看到的信息与ls /dev/sd* 和cat /proc/partitions 看到的信息一样,是内存中生效的信息,磁盘更改后的信息未必与内存中的同步 , fdisk就是磁盘实时的分区信息

        创建分区使用:

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

            gdisk 创建GPT分区

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

                parted /dev/sd* mklabel {label-type : gpt msdos . . . }

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

        分区工具fdisk和gdisk

            fdisk /dev/sdb

            gfisk /dev/sdb

            # fdisk -l [-u] [device…]

                子命令:

                    p 分区列表

                    t 更改分区类型

                    n 创建新分区

                    d 删除分区

                    w 保存并退出

                    q 不保存并退出

        同步分区表

            查看内核是否已经识别新的分区:

                # cat /proc/partations

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

            新增分区用

                partx -a -n M:N /dev/DEVICE

                kpartx -a /dev/DEVICE -f: force

            删除分区用

                partx -d -n M:N /dev/DEVICE

                centos6: –nr N-M /dev/sd

            CentOS 5, 7: 使用partprobe

                partprobe [/dev/DEVICE]

        parted命令

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

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

                    parted /dev/sdb mklabel gpt|msdos

                    parted /dev/sdb print

                    parted /dev/sdb mkpart primary 1 200

                    parted /dev/sdb rm 1

                    parted -l

    文件系统

        文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。

        操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

        从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。

        具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

    文件系统类型

        Linux文件系统: ext2(extended file system 扩展的文件系统), ext3, ext4, 

                        xfs( SGI) , btrfs(Oracle) , reiserfs, jfs( AIX) , swap(交换分区)

        光盘: iso9660

        Windows: fat32, ntfs

        Unix: FFS( fast) , UFS( unix) , JFS2

        网络文件系统: NFS, CIFS

        集群文件系统: GFS2, OCFS2( oracle)

        分布式文件系统: ceph, moosefs, mogilefs, glusterfs,Lustre

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

    文件系统分类

        根据其是否支持"journal"功能:

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

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

        文件系统的组成部分:

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

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

        Linux的虚拟文件系统: VFS(用户访问文件系统的时候不会直接访问真正的文件系统,发开人员会在真正的文件系统上搭建一个VFS,用户访问的时候会通过VFS间接的访问文件系统)

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

        lsmod  查看加载到内核的文件系统模式

    磁盘管理

    VFS模型 :

         blob.png磁盘管理

    文件系统选择

         blob.png磁盘管理

       并非最新的文件系统是最好的,选用文件系统要时生产环境而定 , 但是 ext系列是生产环境用得最多的(稳定)

    创建文件系统

        mkfs命令:

            (1) # mkfs.FS_TYPE /dev/DEVICE

                ext2 ext3 ext4

                xfs

                btrfs

                vfat(文件系统功能简单)

            (2) # mkfs -t FS_TYPE /dev/DEVICE

                -L 'LABEL': 设定卷标

        创建ext文件系统

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

                -t {ext2|ext3|ext4}     (指定创建的文件系统格式)

                -b {1024|2048|4096}  (指定块大小,默认4096)

                -L 'LABEL'    (指定卷标)

                -j: 相当于 -t ext3     (不指定文件系统格式时-t 默认是创建ext2,就是不带日志功能, 加-j 就是增加日志功能, 相当于ext3)

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

                -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小 (数据块与inode比例)

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

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

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

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

                -O ^FEATURE:关闭指定特性

        文件系统标签

        指向设备的另一种方法

        与设备无关

        blkid:块设备属性信息查看

        blkid [OPTION]… [DEVICE]

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

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

        blob.png磁盘管理

        磁盘管理blob.png

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

            # e2label DEVICE [LABEL]

            findfs :查找分区

            findfs [options] LABEL=<label>

            findfs [options] UUID=<uuid>

        tune2fs (只试用ext系列文件系统)

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

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

                -L 'LABEL':修改卷标

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

                -j: 将ext2升级为ext3

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

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

                -U UUID: 修改UUID号

                dumpe2fs:

                -h:查看超级块信息(分组信息),分区用分组管理

        我们只需了解基本的项就OK了

            [root@localhost sdb1]# tune2fs -l /dev/sdb1

            tune2fs 1.42.9 (28-Dec-2013)     #tune2fs版本号

            Filesystem volume name:   <none>

            Last mounted on:          /sdb1      #分区挂载点

            Filesystem UUID:          c64673c4-410c-40ac-92c2-5dc89e509bf8   #设备UUID号

            Filesystem magic number:  0xEF53

            Filesystem revision #:    1 (dynamic)

            Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super large_file  #文件系统特性

            Filesystem flags:         signed_directory_hash

            Default mount options:    user_xattr acl

            Filesystem state:         not clean

            Errors behavior:          Continue

            Filesystem OS type:       Linux

            Inode count:              65536   #inode数

            Block count:              262144   #block数

            Reserved block count:     13107

            Free blocks:              257701   #空闲block数

            Free inodes:              65525    #空闲inode数

            First block:              0    #第一个块编号

            Block size:               4096  #一个block的大小

            Fragment size:            4096

            Reserved GDT blocks:      63

            Blocks per group:         32768   #一个组的block数量

            Fragments per group:      32768

            Inodes per group:         8192

            Inode blocks per group:   512   #inode与block比

            Filesystem created:       Thu Aug 25 20:53:52 2016

            Last mount time:          Thu Aug 25 21:25:17 2016

            Last write time:          Thu Aug 25 21:28:07 2016

            Mount count:              1   #挂载次数

            Maximum mount count:      -1

            Last checked:             Thu Aug 25 20:53:52 2016

            Check interval:           0 (<none>)

            Reserved blocks uid:      0 (user root)

            Reserved blocks gid:      0 (group root)

            First inode:              11

            Inode size:          256

            Required extra isize:     28

            Desired extra isize:      28

            Default directory hash:   half_md4

            Directory Hash Seed:      12dabb50-85cf-4a1c-a1ab-534289e5033c

            

        超级块和inode table

                blob.png磁盘管理

        文件系统检测和修复

            常发生于死机或者非正常关机之后 , 挂载为文件系统标记为“ dirty”

                fsck: File System Check

                fsck.FS_TYPE

                fsck -t FS_TYPE

                -a: 自动修复错误

                -r: 交互式修复错误

                注意: FS_TYPE一定要与分区上已经文件类型相同;

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

                -y:自动回答为yes

                -f:强制修复

                    fsck 退出的返回值是下列情况之和:

                        0 – 没有错误

                        1 – 文件系统有错但已修复

                        2 – 系统应当重启

                        4 – 文件系统错误没有修复

                        8 – 运行错误

                        16 – 用法或语法错误

                        32 – 用户撤销了fsck 操作

                        128 – 共享库出错


     挂载mount

        挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

        卸载:为解除此关联关系的过程

        把设备关联挂载点: mount Point

        mount

        卸载时:可使用设备,也可以使用挂载点

        umount

        磁盘管理blob.png

        上图 : 一个设备文件挂载在两各不同目录就相当于硬链接一样,但是硬链接数不会增加,容易混淆

        磁盘管理blob.png

        挂载点下原有文件在挂载完成后会被临时隐藏 ; 挂载点目录一般为空(一般一个挂载点只能挂载一个设备,之前的设备上的文件默认会隐藏起来,卸载之后会显示之前的文件)



        用mount命令挂载文件系统

            挂载方法: mount DEVICE MOUNT_POINT

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

                mount [-fnrsvw] [-t vfstype] [-o options] device dir

            device:指明要挂载的设备;

                (1) 设备文件:例如/dev/sda5

                (2) 卷标: -L 'LABEL', 例如 -L 'MYDATA'

                (3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'

                (4) 伪文件系统名称: proc, sysfs, devtmpfs, configfs

            dir:挂载点

                事先存在;建议使用空目录

                进程正在使用中的设备无法被卸载

        要卸载一个设备,当然要设备处于空闲状态,如果有用户在访问,就会显示错误,当然,你也可以强行中断用户与该设备的联系,然后在卸载

        磁盘管理blob.png

        mount常用命令选项

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

            -r: readonly,只读挂载

            -w: read and write, 读写挂载

            -n: 不更新/etc/mtab,相当于#mount

            -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)

            -L 'LABEL': 以卷标指定挂载设备

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

            -B, –bind: 绑定目录到另一个目录上(文件夹挂载文件夹)

            –loop   挂载光盘

        磁盘管理blob.png

        -o options: (挂载文件系统的选项),多个选项使用逗号分隔

            async:异步模式

            sync:同步模式,内存更改时,同时写磁盘

            atime/noatime:包含目录和文件

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

            auto/noauto:是否支持自动挂载,是否支持-a选项

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

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

            suid/nosuid:不否支持suid和sgid权限

            remount:重新挂载

            ro:只读

            rw: 读写

            user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载

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

        Defaults(不加选项的默认状态):相当于rw, suid, dev, exec, auto, nouser, async

            查看内核追踪到的已挂载的所有设备:

                cat /proc/mounts    

            mount能查看挂载情况,等同于cat /etc/mtab  和cat /proc/mount  但是cat /proc/mount 更加全面

            (因为有时候内核并不能同步得上,此时可以使用 partx -a /dev/sd)

                mount -o remount   取消挂载然后重挂载

        卸载命令

        查看挂载情况:

        #findmnt MOUNT_POINT

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

        #lsof MOUNT_POINT

        #fuser -v MOUNT_POINT

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

        # fuser -km MOUNT_POINT

        卸载:

        # umount DEVICE

        # umount MOUNT_POINT

        磁盘管理blob.png

        磁盘管理blob.png

        挂载点和/etc/fstab

     

        文件挂载配置文件

            /etc/fstab 每行定义一个要挂载的文件系统;

                要挂载的设备或伪文件系统(若是设备文件,通常写UUID号,不写设备名称(如 : /dev/sda1) , 假若有分区sda1 2 3 ,删除sda2,只是释放了原本标记sda2的UUID号,删除sda2之后,sda3回变成sda2,也就是说原本sda3的)

                     UUID=fc4ece99-fdb9-4729-904b-a9a482ae86fc

                挂载点

                    / 

                文件系统类型

                    xfs

                挂载选项

                    defaults

                转储频率

                    0 ( 第一个 )

                自检次序

                    0 ( 第二个 )

    

           要挂载的设备或伪文件系统:

                设备文件、 LABEL(LABEL="")、 UUID(UUID="")、伪文件系统名称(proc,sysfs)

                挂载选项: defaults

                转储频率: 0:不做备份

                  1:每天转储

                  2:每隔一天转储

                自检次序: 0:不自检

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

            #

            # /etc/fstab

            # Created by anaconda on Wed Jul 20 14:32:52 2016

            #

            # Accessible filesystems, by reference, are maintained under '/dev/disk'

            # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

            #

            UUID=fc4ece99-fdb9-4729-904b-a9a482ae86fc /                       xfs     defaults        0 0

            UUID=49da300e-4396-48c5-ac3d-73e77089ca37 /boot             xfs     defaults        0 0

            UUID=19c99cb5-4c12-48aa-a667-fa8885ba583c /testdir            xfs     defaults        0 0

            UUID=28eb87fb-bf7c-4eaf-bacb-b198a74a47e3 swap             swap    defaults        0 0

            UUID=2898f9f4-b33d-4d8c-8d51-84c9823f198e /testdir2         ext3    defaults        0 0

    

原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/42188

(0)
上一篇 2016-09-01 08:50
下一篇 2016-09-01 08:50

相关推荐

  • 文件查找工具locate和find的使用分析

    文件查找工具locate和find的使用分析 不管是在windows系统中还是在Linux系统中,我们经常会一些文件进行搜索查找,而在Linux系统中经常用到的搜索工具有locate和find,这两种搜索工具的工具原理和用法都不相同,一下将这对这两种搜索工具的使用进行分析。 1、locate工具的工作原理是对/var/lib/mlocate/mlocat.d…

    Linux干货 2016-08-18
  • 马哥教育网络班N22期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。     [root@zabbix ~]# id $(who | cut -d' ' -f1 | tail -n 1)    &nbs…

    Linux干货 2016-08-30
  • 简述开源协议

    简述开源协议 现在一说到智能手机,相信很容易就会想到苹果和安卓。安卓搭载的Android是一种基于Linux的自由及开源的操作系统,苹果手机搭载OS X是苹果公司为Mac系列产品开发的专属操作系统。    安卓手机凭借其开源的特性达到与苹果系统分庭伉礼的地位,又凭借其开源的价格优势,牢牢把控手机设备的中低端市场,其市场占有率远远…

    Linux干货 2017-03-26
  • 条件选择if语句

    单分支的if语句 if 判断条件; then 条件为真的分支代码 fi       单分支if结构的执行流程:首先判断条件测试操作的结果,如果返回值为0表示条件成立,则执行then后面的命令序列,一直到遇见fi为止表示结束,继续执行其他脚本代码;如果返回不为0,则忽略then后面的命令序列,直接跳至fi行以后执行其他脚…

    Linux干货 2016-08-16
  • 第一周博客作业

       第一次自己动手写博客,而不是转载或者收藏,还是满忐忑的,希望是一个好的开始,以下内容均为依照记忆或者说学习到的知识总结,之后会另写一篇博文根据网络查询到的更严谨完整的答案作为总结。一、描述计算机的组成及其功能。答:计算机主要有五个部分组成,分别是:运算器、控制器、存储器、输入设备、输出设备。  1、控制器为整个计算机工作中的核心,负责调度所有组件之间的…

    Linux干货 2016-12-04
  • Raspberry pi设置自动拨号,搭建无线路由环境

    Raspberry pi设置自动拨号,搭建无线路由环境 前言  raspberry pi(树莓派), 是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的迷你电脑,由于可以烧录Linux操作系统,因此可以衍生出各种各样的使用途径,诸如控制版,爬虫机器,个人vps,门禁系统…..本文主要介绍如何在raspberry pi上面完成pppoe拨号上…

    2017-03-28

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-01 13:04

    总结的很详细,赞一个,但要多进行操作哦