下面介绍的是Linux的存储管理基础知识、使用一个新的硬盘设备步骤为(分区、格式化、挂载分区)。

一、Linux的存储管理基础知识点

1、硬件组成

计算机基础知识中,各个硬件表示为:运算器(CUP);控制器(MEEM);硬盘(HDisk);网卡(NIC,即net interface card);总线(bus)。

2、南北桥芯片

芯片有南桥和北桥两种芯片,南桥芯片链接低速,北桥链接高速,而且数据都要会接到北桥发散。南桥芯片链接光驱、硬盘等;北桥芯片链接内存等。控制器一般位于主板上,是接口后实现功能的背后芯片。

3、硬盘

硬盘主要包括主轴、永磁铁、磁头三部分。磁头可以有一列,其磁盘盘片可以有很多片,其中,磁盘两面都能存数据。磁盘存储可以说成磁盘磁化产生。

4、五类磁盘的接口类型

(1)、IDE:为并口,来源于ATA,传输速度133Mbps

    IDE:主板是上有两个接口,最多可以接4块IDE硬盘

(2)、SCSI:为并口,服务器专用。实际的两种为:UltraSCSI320:320Mbps / UltraSCSI640:640Mbps

    SCSI:7个接口,15块硬盘

(3)、SATA(Serral ATA):为串口。实际的三种为:SATA1、SATA2、SATA3 :6Gbps

    SATA:4-6个接口,4-6块硬盘

(4)、SAS:为串口,服务器使用,传输速度达到6Gbps

    SAS:16384块硬盘

(5)、USB:1.0、1.1、2.0、3.0(480Mbps)、3.1(10Gbps)

 磁盘接口都采用双通道技术,提高了传输速度。

5、IOPS:每秒I/O的次数

以下为五种接口的IOPS数:

 IDE:机械硬盘,50的IOPS

 SCSI:机械硬盘,100-200的IOPS 

       固态硬盘,400左右的IOPS

 SATA:机械硬盘,100左右的IOPS 

       固态硬盘,400左右的IOPS

 SAS:机械硬盘,200左右的IOPS 

      固态硬盘,800左右的IOPS

华为的PCI-E固态硬盘IOPS为:100000+(10万)的IOPS

6、机械式硬盘的相关内容

机械式硬盘的基本术语如下:

 平均寻道时间:磁头从一个磁道换到另一个磁道的时间。

 磁盘转速(rpm):磁盘绕主轴旋转的速度。现在的发动机能够达到高达15000/s,磁盘(硬盘)是真空封装的。

 track:磁道

 sector:扇区,扇区用磁道边缘弧长来表示,每一个扇区的大小为512Bytes,现在所说的扇区实际上是平均值

 cylinder:柱面,从磁道向所有盘面做投影

 partition:分区,分区就是基于柱面来划分的存储空间

 head:磁头,每个磁盘表面都有一个磁头

7、设备文件:/dev

 设备文件是关联到硬件设备的驱动程序和设备的访问入口。

 驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。

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

 

 设备号:设备号分为主设备号和次设备号两种。

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

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

 人识别的是计算机设备文件,计算机识别的是设备号。主设备号相同的是相同的设备。设备文件名,遵循ICANN的标准。


8、mknod命令

mknod命令:mknod - make block or character special files

mknod的格式为:mknod [OPTION]... NAME TYPE [MAJOR MINOR]

  选项-m, --mode=MODE 用来指定权限

  例如:# mknod mydev c 100


9、设备文件的两种设备

(1)、块设备:用于随机访问的设备,数据存储和交换的单位是块;

(2)、字符设备:用于线性访问的设备,数据的交换单位一般是字符。


10、设备文件存放在/dev/下,IDE接口的命名为hd[a-d];SCSI/SATA/SAS/USB接口的命名为sd[a-z]。

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

    两种设备引用方式:设备文件名、卷标(Volume Lable)


使用一个新的硬盘设备步骤为:分区、创建文件系统(格式化)、挂载分区。



二、分区

1、分区的好处

(1)、优化I/O性能:

(2)、实现磁盘空间的配额限制;

(3)、进行高速修复;

(4)、隔离系统文件和其他程序文件;

(5)、安装多个操作系统。

2、如何分区

(1)、MBR分区

 MBR分区:硬盘空间小于2TB时使用,MBR分区最常用。MBR即Master(Main) Boot Record,主引导记录,起源于1982年。

 MBR的0磁道0扇区包括512Bytes,其可以分为三部分,具体如下:

   446 Bytes:boot loader, 引导加载程序, 默认为GRU Bytes

   64 Bytes: partation table, 分区表,每168Bytes表明一个分区的内容,因此,一共有4个主分区。

   2 Bytes:结束标记,通常为55AA

 在分区表的四个分区中,前三个为主分区,第四个位扩展分区。扩展分区中可以分很多的逻辑分区,逻辑分区只有一个。扩展分区不能直接使用,必须进行二次分区。

 注意:a、主分区+扩展分区,最多为4个,某分区表位的编号依次为:1、2、3、4;

       b、逻辑分区的编号从5开始,不管前面的四个数字编号是否被占用。

(2)、GPT分区

  GPT分区:硬盘空间大于2TB时使用。GPT即GUID Partation Table, GUID分区表,支持128个分区。

  UEFI(统一扩展固件接口)的硬件可以支持GPT,启动速度较快。


3、通常使用的分区工具

 (1)、两种分区工具

 fdisk: 用于创建和管理MBR分区,对于一块硬盘,最多只能管理15个分区。

 gdisk: 即GNU disk。用于创建和管理GPT分区。

 (2)、重新挂载

 如果使用fdisk和gdisk命令,对于已经有分区并挂载的磁盘的剩余空间进行再次分区,分区的信息即便是保存了,也不会被内核重新读取。如果要让内核识别此类分区,可以有以下几种方式:(1)、重启计算机;(2)、partprobe命令或者partx命令,强制内核重读分区表,使用具体如下:

 Centos5/7:partprobe -a [device] 如果省略了设备名,则表示重读所有磁盘的分区表。

 Centos6/7:partx -a [device]

            kpartx -af [device]

强制内核识别在开机状态下插上的SCSI接口的磁盘命令如下:            

# echo '---' > /sys/class/scsi_host/host2/scan

 

 (3)、fdisk分区示例

 fdisk命令:

 (fdisk - manipulate disk partition table)

 fdisk -l [device...] 查看指定磁盘的分区表,如果省略device参数,则显示所有磁盘设备的分区表’

 fdisk device: 对于指定设备进行分区管理。

 fdisk子命令如下:

   d   delete a partition

   l   list known partition types

   m   print this menu

   n   add a new partition

       e extended

       p primary partition(1-4)

       l logical

   p   print the partition table  交互式模式中交换分区表

   q   quit without saving changes

   t   change a partition's system id

   w   write table to disk and exit

   例如:顺序输入m-e-p分区

(4)、parted命令

 (parted - a partition manipulation program)

 parted: parted是GNU的,是有一种高级分区工具,实时生效,最好不用。

 parted [options] [device [command [options...]...]]

 例子如下:

 parted /dev/sdb mklabel gpt|msdos

 parted /dev/sdb print

 parted /dev/sdb mkpart primary 1 200

 parted /dev/sdb rm 1



三、创建文件系统(格式化)

文件系统包括以下三方面:FHS、权限、文件的命名规则

1、为什么要创建文件系统?

创建文件系统实际上就是给分区进行存储空间的逻辑编址。不创建文件系统也能存储,只是读出比较复杂。

以图书的平面分类管理为例,想要搜索需要的图书,没有特殊整理的 话需要遍历。如果对图书的空间分类管理,即分门别类的分,其中可以相互嵌套,这属于几次有限的但是有效的管理。

2、格式化分为两类:低级格式化和高级格式化。

低级格式化:主要是在物理层面上完成的格式化,在磁盘设备出厂时,通过低级格式化来创建磁道。主要作用就是用来划分磁道。

高级格式化:就是在分区之后进行的,主要作用就是用来创建文件系统,为分区构建逻辑编址单元,也称为簇或块,但无论是簇或者块,都是将一个或多个扇区组织在一起,共同完成数据存储。

Windows的簇的大小:512Byte、1024Byte、2048Byte、4096Byte、8192Byte、16384Byte、32768Byte、65536Byte

Linux的块的大小:1024Byte、2048Byte、4096Byte

注意:(1)、一个块只能放置一个文件的内容,但是一个块可以占用多个块。

      (2)、如果在某个分区中,将创建的大量小文件,把块划分的小一些;反之,块就大些。

      (3)、如果分区空间比较大,块也应该大一些。

3、两个功能块

在一个分区中创建了文件系统:首先会将分区划分为大小相等的若干块,分为两个功能块,即元数据块和数据块。元数据块中的元数据为index(Index node),存放元数据的固定的存储空间,称为Inode。每个Inode都有对应的Inode编号。数据块是用来存放文件中的流式数据。

元数据的文件属性包括文件大小、文件权限、文件所有者、文件时间戳、文件块指针。

指针分为三类:直接指针、间接指针、二级间接指针


4、特殊文件:

(1)、设备与符号链接文件

设备文件:block special 或 character special

设备文件是仅仅将元数据中的数据指针换成了设备号。

符号链接文件示例:symbolic link

符号链接文件仅仅是将数据块指针换成了另一个文件的访问路径。

特殊文件中,这类文件只占据元数据区域,没有数据块占用。

(2)、bitmap位图

bitmap位图:用二进制来存放数据块的使用情况,1为已经使用,0为空闲。位图分为块位图和元数据位图,即block bitmap和Inode bitmap。

(3)、分组及划分块

在数据块中进行分组,产生块组,块组中有元数据,其元数据是块组的元数据。

随着磁盘空间越来越大,我们划分的快的数量也越来越多,管理起来很不方便,所以,划分块组可以解决此问题,每个块组中有独立的元数据块和数据块,我们存放数据的时候,以块组的数据块优先选择,如果快租内的数据块不够,可以通过存储策略来对多个块组协同存储。

超级块:主要定义了有多少个块组,以及每个块组的边界。

日志块:对于数据的写入操作做记录的块,防止数据不一致。数据不一致通常都是不洁关机或不洁断电导致的。

一个完整的文件系统可以包括:超级块、Inode、Inode bitmap、block bitmap、data block、journal block。


(4)、示例:想要查找/var/log/messages文件的内容,是怎样的过程?

首先,查找/目录Inode编号,从数据区域中找到对应的Inode,再读取Inode中的数据块指针,找到存放/目录内容的数据块;

然后,在数据块中查找名称为var的文件名,如果有,就定位其Inode编号,在到元数据区域中查找对应编号的Inode,再根据数据块指针找到保存var目录内容的数据块;

再然后,在该数据块中查找名称为log的文件名,如果有,就定位其Inode编号,在到元数据区域中查找对应编号的Inode,再根据数据块指针找到保存log目录内容的数据块;

最后,在该数据块中查找名称为messages的文件名,如果有,就定位其Inode编号,在到元数据区域中查找对应编号的Inode,再根据数据块指针找到保存messages目录内容的数据块,就可以读取该数据。


Linux支持的文件系统

Linux文件系统包括两部分,分别是位于内核空间中的文件系统驱动和位于用户空间中的文件系统管理应用程序。

位于内核空间中的文件系统驱动:是内核的一部分,可以做成内核模块。

位于用户空间中的文件系统管理应用程序:是一系列的管理命令。


5、Linux自己的文件系统

Linux自己的四类文件系统如下:

(1)、ext、ext2、ext3、ext4

  ext4可以达到的最大分区为50TB,且该分区可以做根分区,也可以做启动分区。

(2)、xfs

  xfs是目前企业级64位文件系统,最大分区500TB,可以做根分区和启动分区。

(3)、reiserfs

  reiserfs具有良好的反删除功能

(4)、btrfs(平衡树文件系统)

  btrfs是技术预览版的,不是特别成熟

对于不同的发行版Linux,都有其默认的文件系统选择,具体如下:

RHEL5、Centos5对应ext3;

RHEL6、Centos6对应ext4;

RHEL7、Centos7对应xfs。


光盘文件系统:iso9660

网络文件系统:NFS、CIFS

集群文件系统:gfs2、ocfs2

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

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


Windows的文件系统:vfat、ntfs

Unix的文件系统:ufs、FFFS、JFS、zfs

交互分区文件系统:swap

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

注意:

不要使用磁盘设备名称和扩展分区设备名称作为mkfs命令的参数,如果使用磁盘设备作为mkfs的参数,所有的分区将会被删除,如果使用扩展分区作为mkfs的参数,所有逻辑分区都将被删除。能够为mkfs命令参数的设备,是主分区设备和逻辑分区设备。扩展分区不能格式化,不能格式化如sdb磁盘。


6、管理文件系统的各种工具

  创建文件系统的工具:mkfs(mkfs.ext2、mkfs.ext3、mkfs.ext4、mkfs.xfs、mkfs.btrfs、……)

  文件系统的检测和修复工具:fsck(fsck.ext2、fsck.ext3、fsck.ext4、fsck.xfs、……)

  文件系统属性查看工具:dumpe2fs

  文件系统的属性调整工具:tune2fs


7、创建文件系统工具:mkfs、mke2fs、e2label、tune2fs

(1)、mkfs命令

(mkfs - build a Linux filesystem)

mkfs格式:mkfs [options] [-t type] [fs-options] device [size]

例如:mkfs -t ext2 /dev/sdb1

注意:a、不要使用磁盘设备名称和扩展分区设备名称作为mkfs命令的参数。如果使用磁盘设备作为mkfs的参数,所有的分区都将被删除;如果使用扩展分区作为mkfs的参数,所有的逻辑分区都将被删除

      b、能够作为mkfs命令参数的设备,是主分区设备和逻辑分区设备;


(2)、mke2fs命令

(mke2fs - create an ext2/ext3/ext4 filesystem)

如果只是计划【创建ext系列文件系统】的话,可以使用mke2fs命令。

mke2fs常用选项如下:

  -b block-size:在创建文件系统时,调整块大小;

  -i bytes-per-inode:指明inode与字节的比率,即:多少个字节可以建一个inode,默认值为16384;

  -j:创建有日志功能的文件系统,就是ext3

  -N number-of-inodes:直接指明要给此文件系统创建的inode的数量;

  -m reserved-blocks-percentage:指定为超级用户root预留的磁盘空间的百分比;默认是5;

  -t fstype:指定文件系统类型,ext2 ext3 ext4,默认是ext2

  -O [^]feature[,...]:关闭或开启文件系统的特性

  -L volume-label:为文件系统指定卷标


(3)、e2label命令

(e2label - Change the label on an ext2/ext3/ext4 filesystem)

e2label格式:e2label device [ new-label ]

如果只是计划【修改ext系列文件的卷标】,可以使用e2label命令。

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


(4)、tune2fs命令:

tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems(调整那些在ext2,3,4文件系统上的可修改的参数)

如果想要【修改ext系列文件的属性】,可以使用tune2fs命令

tune2fs命令常用选项如下:

  -j:将ext2文件系统修改为ext3;

  -m reserved-blocks-percentage:修改为超级用户预留的磁盘空间的百分比;

  -o [^]mount-options[,...]:修改文件系统的默认挂载选项;

     -o下的acl Enable Posix Access Control Lists.

  -r reserved-blocks-count:修改为超级用户预留的磁盘空间的块的数量;

  -L volume-name:修改文件系统的卷标

  -O [^]feature[,...]:修改文件系统的特性,将其关闭或启用;

  -l:显示超级块的内容  相当于dumpe2fs -h 


8、文件系统的检测修改工具

(1)、fsck工具

fsck工具及用法选项如下:

  -t fstype: 指定要检测的文件系统类型

  -a: 无需交互,自动修复所有问题

  -r: 交互修复问题

(2)、e2fsck工具

【ext系列文件系统有专门的检测修复工具】

e2fsck工具及用法选项如下:

  -y: 在交互过程的所有问题,都以"yes"回答

  -f: 强制检测修复,即使文件系统处于"clean状态"


9、blkid命令

blkid - locate/print block device attributes

blkid -L label | -U uuid

blkid - command-line utility to locate/print block device attributes

    blkid -L label:根据卷标进行查找

    blkid -U uuid:根据UUID进行查找


10、findfs命令

(findfs - find a filesystem by label or UUID)

   findfs LABEL=label

   findfs UUID=uuid  

   例如:findfs "LABEL=mylable"


10、创建swap文件系统

前提:分区类型必须是swap类型。

修改的方法是:在fdisk交互模式中,使用t命令指定分区的类型修改为82即可。

mkswap命令:

(mkswap - set up a Linux swap area)

 格式:[options] device [size]

       -L LABEL:设置交互分区的卷标

       -f:强制执行



四、使用文件系统(挂载)

1、挂载点

根文件系统之外的其他文件系统,如果想要被访问,都必须通过某种方式关联到根文件系统上,具体做法就是把其他文件系统装载到根目录系统中的某个目录中,这个过程称为“挂载”。用于关联其他文件系统的那个目录,称为“挂载点”

挂载点:mount point,也是其他文件系统的访问入口,例如:/boot

挂载点的要求:(1)、作为挂载点的目录必须事先存在

              (2)、作为挂载点的目录应该是没有被使用或不能被其他进程使用的目录

              (3)、作为挂载点的目录一旦挂载文件系统,其内部原有的文件将被隐藏

2、完成挂载操作,使用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:将某个目录绑定至另一个目录;

    mount --bind|-B 源目录 目标目录


3、卸载文件系统:umount mount_point|device

4、查看挂载信息:df -h/-hT/-hTP

5、挂载光盘如下:

(1)、保证光盘镜像文件放入虚拟机光驱

(2)、保证光驱处于"已连接"状态

(3)、创建光盘挂载点,例如:mount -r /dev/sr0 mount_point

6、挂载U盘:

  需要事先让系统识别U盘设备,然后根据设备名进行挂载;例如:/dev/sdc1

7、挂载交互分区

(1)、swapon, swapoff命令

(swapon, swapoff - enable/disable devices and files for paging and swapping)

 -a:自动挂载存储于/etc/fstab文件中的交互分区设备;

(2)、df命令

    选项可以为:-h -T -P,其可以合起来写。

(3)、free命令

    选项可以为:-k -m -g。


8、/etc/fstab文件的格式

  /etc/fstab文件的格式共6个字段,使用空白字符分隔,分别如下:

(1)、要挂载的设备

  设备文件名、LABEL、UUID、伪文件系统

(2)、挂载点

  swap设备无需挂载点,只需指定swap即可。

(3)、文件系统类型

(4)、挂载选项:defaults

(5)、转储频率:

  使用dump命令备份分区的频率

      0:表示不备份

      1:每天备份一次

      2:每隔一天备份一次

(6)、自检次序

      0:不自检

      1:优先自检,通常只设置在根文件系统上;

      2:次级自检

      ...

      9:最低优先级自检