磁盘管理

磁盘管理

    设备文件

        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)
hunterhunter
上一篇 2016-09-01
下一篇 2016-09-01

相关推荐

  • 马哥教育网络班21期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;     fdisk /dev/sdb    n p 1 +10G w (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl…

    Linux干货 2016-08-22
  • grub.config文件加密

    作用 在开机启动临时进入1模式的时候,系统先调用/etc/grub.conf。 /etc/grub.conf其实是/boot/grub/grub.conf的软连接。 加密改文件就有效的防止其他用户直接绕过口令登陆1模式,从而进入到root中做一些破坏。 我们可以看一下如何进入1模式。   我们可以看一下临时进入init1模式的窗口 这里的内容与gr…

    2017-07-22
  • LVS介绍

    LVS介绍     LVS是linux virtual server的简写,是服务器集群的一种负载均衡解决方案,作为netfilter的补充套件,工作于内核空间。     常见的术语 CIP:客户端ip地址 RIP:后端服务器ip地址 VIP:lvs面向客户端的ip地址 DIP:lvs面向…

    Linux干货 2017-08-04
  • shell编程2

    组合测试条件  第一种方式:        COMMAND1 && COMMAND2 并且        COMMAND1 || COMMAND2 或者        ! COMMAND 非   &nbs…

    Linux干货 2016-08-21
  • Linux—文本处理(查看,统计,排序,抽取,合并,grep,基本正则表达式)

    Linux的文本管理有着众多的文本命令工具,这些工具基本可以满足不同的文本处理要求,很是灵活,掌握文本管理命令对系统的维护是必备基础技能。 1.文本查看命令:     (1)cat        语法:        cat [OPTION]… […

    Linux干货 2016-08-07
  • Shell脚本编程入门

    认识Shell Shell原意为贝壳 Linux系统中的shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。 可以使用命令查看当前使用的是哪种shell以及当前Linux系统中都支持哪些shell种类。   查看当前…

    Linux干货 2016-08-12

评论列表(1条)

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

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