Linux的存储管理

 在linux的哲学思想中第一条,一切皆文件;所以对与物理磁盘的管理就是在系统中对文件的管理,即操作对应的设备文件即可;

 首先弄清楚机械硬盘的构造:

       track : 磁道
       sector: 扇区 ,512Byte(字节)现在所说的扇区,实际上是平均值;
       cylinder:柱面,从磁道向所有盘片做投影
       patition:分区,分区就是基于柱面来划分的存储空间。
       head:磁头,每个磁盘表面都有一个磁头;

 在linux中有专门的设备文件的存储目录——/dev

     设备有两种类型:

               ①块设备:用于随机访问的设备,数据存储和交换的单位是块

               ②字符设备:用于线性访问的设备,数据的交换单位一般是字符

     在RHEL6、CentOS6开始所有的接口类型的硬盘设备统一命名为sd[a-z]

    wKioL1klkW3CYwTYAAAN7g1v1JY865.png

   (后面的数字表示磁盘的分区) 

那么开始使用硬盘,要明白的是如何分区,如何创建文件系统(格式化)和如何挂载分区

    磁盘的物理组成

       ⒈圆形的盘片,主要用来记录数据

       ⒉机械手臂与机械手臂上的磁头,读写数据

       ⒊主轴马达,可以转动盘片,让机械手臂的磁头在盘片上读写数据

   盘片的物理组成

       ⒈扇区(sector)为最小的存储单位,大小为512bytes

       ⒉第一个扇区很重要,需要通过它来读取整个磁盘的状态。里面有MBR(主引导记录)和DPT(分区表)

       ⒊MBR占446bytes,DPT占64byte,剩下两位是分区有效标志(55AA)

   MBR相关

   主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。

   分区表相关

     ⒈64bytes的分区表最多分出4个区,成为主分区或者扩展分区

     ⒉扩展分区最多只能有一个

     ⒊扩展分区可以再划分出逻辑分区

     ⒋可以被格式化的只有主分区和逻辑分区,扩展分区不可以被格式化

     ⒌逻辑分区的数量上线根据不同的操作系统和硬盘格式而不同,linux中IDE硬盘最多划分59个,SATA最多划分11个(都是从5号开始)

              按照每个扇区512bytes来算,一个分区的最大容量是2TB

      对于开机状态下上插上SCSI接口的磁盘强制内核识别的方法:

            echo "---" &> /sys/class/scsi_host/host2/scan

 Ⅰ、如何分区

    通常分区使用的工具为fdisk,gdisk

    注:如果使用fdisk或gdisk命令对于已经有分区并挂载的磁盘的剩余空间进行再次分区,分区的信息即便是保存了,也不会被内核重新读取;

     所以需要做以下操作就能重新读取:

        1.重启计算机;
        2.partprobe命令或者partx命令,强制内核重读分区表;
             CentOS5/7:partprobe -a [device] 如果省略了设备名,则表示重读所有磁盘的分区表
             CentOS6/7:partx -a [device]
                 kpartx -af [device(=设备名)]

 

    fdisk的使用:

        fdisk子命令:
            d  删除分区
             l  列表已知的分区类型
            q  不保存退出编辑
            p  打印分区表

            n  创建新分区
               e  扩展分区
               p  主分区
               l  逻辑分区
            m  显示帮助菜单
            t  修改分区的系统标识
            w  保存修改并保存

 Ⅱ、创建文件系统

        对于不同的发行版的linux,都有其默认的文件系统选择;
          RHEL、CentOS
           5:ext3
           6:ext4
           7:xfs

     创建文件系统工具

        mkfs命令:

             mkfs [options] [-t type] [fs-options] device [size]

    注意:
         1.不要使用磁盘设备名称和扩展分区设备名称作为mkfs命令的参数;
         如果使用磁盘设备作为mkfs的参数,所有的分区都将被删除
         如果使用扩展分区作为mkfs的参数,所有的逻辑分区都将被删除
         2.能够作为mkfs命令参数的设备,是主分区设备和逻辑分区设备;

    1.如果只计划创建ext系列文件系统的话,可以使用mke2fs命令:
        mke2fs
          mke2fs - create an ext2/ext3/ext4 filesystem
          常用选项:
           -b block-size:在创建文件系统时,调整块大小;
           -i bytes-per-inode:指明inode与字节的比率;即:多少个字节建一个inode,默认值为16384;
           -I inode-size :直接指定inode大小
           -J :创建有日志功能的文件系统,就是ext3
           -N number-of-inodes:直接指名要给此文件系统创建的inode的数量;
           -m reserved-blocks-percentage:指定为超级用户root预留的磁盘空间的百分比;默认是5;
           -t fs-type:指定文件系统类型,ext2 ext3 ext4,默认是ext2
           -O [^]feature[,...]:(加^表示关闭 不加表示开启)关闭或开启文件系统的特性
           -L volume-label:为文件系统指定卷标

    2.如果只计划修改ext系列文件系统的卷标,可以使用e2label命令:
      e2label
      e2label - Change the label on an ext2/ext3/ext4 filesystem
      e2label device [ new-label ]

      注意: 如果不加卷标信息,表示查看指定设备的卷标;
             如果添加了倦鸟信息,表示修改指定设备的卷标;

    3.如果想要修改ext系列文件系统的属性,可以使用tune2fs命令:
      tune2fs
      tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems

    4.调整那些在ext2,3,4文件系统上的可修改的参数;
         常用选项:
          -j:将ext2文件系统修改为ext3
          -m reserved-blocks-percentage:修改为超级用户预留的磁盘空间百分比
          -o  [^]mount-options[,...]:修改文件系统默认的挂载选项
          -r reserved-blocks-count:修改为超级用户预留的磁盘空间的块的数量;
          -L  volume-name:修改文件系统的卷标
          -O [^]feature[,...]:修改文件系统的特性,将其关闭或启用;
          -l :显示超级块的内容 相当于dumpe2fs -h

    5.文件系统的检测修复工具:
     fsck
      -t fstype:指定要检测的文件系统类型;
      -a:无需交互自动修复所有问题
      -r:交互式修复问题

    6.ext系列文件系统专门的检测修复工具:
        e2fsck
         -y:在交互过程的所有的问题,都以“yes”回答;
         -f:强制检测修复;即使文件系统处于clean状态;

        blkid
          blkid - locate/print block device attributes
          blkid -L label:根据卷标进行查找
          blkid -U uuid:跟去UUID进行查找
        findfs
          findfs - find a filesystem by label or UUID
          findfs LABEL=label
          findfs UUID=uuid
     
   创建swap文件系统
     前提:分区类型必须是swap类型
       修改的方法是:在fdisk交互模式中,使用t命令将指定分区的类型修改为82即可

    mkswap
      mkswap - set up a Linux swap area
       -L LABEL:设置交互分区的卷标
       -f:强制执行

 Ⅲ、文件系统的挂载

      挂载用mount命令

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

     常用选项:
       -r:readonly,以只读的方式挂载目标文件系统;(光盘)
       -w:read and write,以读写的方式挂载目标文件系统;
       -n:默认情况下,设备挂载或卸载的操作会同步更新到/etc/mtab中,如果在挂载时使用-n选项,表示我们要禁用此特性,即便挂载成功,也不会更新到/etc/mtab中;
       -t vsftype:指明要挂载的设备上创建的文件系统类型;如果省略该选项,mount命令会通过blkid来判断要挂载的目标设备的文件系统类型;
       -L LABEL:挂载文件系统时,使用卷标代替设备名称
       -U UUID:挂载文件系统时,使用UUID代替设备名称;
       -a:mount -a:按照/etc/fstab文件中填写的设备进行自动挂载
       -o option:
         sync/nosync:同步/异步操作
         atime/noatime:文件或目录被读取访问时,是否更新访问时间戳;
         diratime/nodiratime:目录被读取访问时,是否更新访问时间戳;
         ro/rw:是以只读/读写的方式挂载文件系统
         dev/nodev:在此文件系统中是否允许创建设备文件;
         exec/noexec:在此文件系统中是否允许运行程序文件;
         auto/noauto:是否允许使用mount -a方式挂载/etc/fstab中的文件系统;
         user/nouser:是否允许普通用户挂载此文件系统;
         suid/nosuid:是否允许程序文件上的SUID和SGID特殊权限生效;
         relatime/norelatime:是否参考inode访问时间来修改其修改时间和改变时间
         remount:不经卸载实现重新挂载,可以应用新的挂载选项;
         acl:可以使文件系统支持facl功能;
         defaults:默认选项:包括:rw, suid, dev, exec, auto, nouser, async and relatime
         loop:使用环回设备;将镜像文件挂载到挂载点;
         defaults,ro,nosuid
       -B,--bind:将某个目录绑定至另一个目录
         mout --bind|-B 源目录 目标目录


    查看挂载信息  mount df  /etc/mtab /proc/mounts

    卸载文件系统:
           umount mount_point|device
               fuser可以查看谁在使用
                 -km 将正在使用的用户kill掉