首页 > 代码库 > Linux存储管理

Linux存储管理

  目前常见的磁盘类型有IDE,SCSI,SATA,SAS等;IDE和SCSI是俗称的并口,SATA和SAS是俗称的串口;这两种硬盘是个人计算机和服务器常用的,IDE的硬盘时间较久,性能比较低下,SCSI是"小型计算机系统专用接口"的简称,SCSI硬盘就是采用这种接口的硬盘。SATA硬盘一根线只接一块硬盘设备;实现容易,标准低;SAS就是串口的SCSI接口。一般服务器硬盘采用这两类接口,其性能比上述硬盘要高,稳定性更强,但是价格高,容量小,噪音大。

  这几种硬盘的运行速度不一,此处运行速度即硬盘每秒的读写IO次数;

  IDE:机械硬盘,50IOPS

  SCSI:机械硬盘,100-200IOPS

      固态硬盘,400左右

  SATA:机械硬盘,100左右

      固态硬盘,400左右

  SAS:机械硬盘,200左右

     固态硬盘,800左右

  

  在这里叙述一下关于Linux存储管理的一些必要概念;

  机械式硬盘:

  磁道(track):由一个又一个同心圆组成;

  磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几 磁 头就可以表示数据在哪个磁面。

  柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。

  扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。

  机械式硬盘的判断性能的标准是其平均寻道时间和磁盘转速,平均寻道时间即其从一段磁道跳转到另一端磁道所需要的时间,精确到ns;影响磁盘转速的因素有许多,如发热量,噪音等;

  

  存储在“/”下的dev目录中的文件为设备文件,存储数据的文件,作为某些设备和驱动程序的访问入口;

  设备有字符设备与块设备:

  块设备:凡是能够实现数据存放的设备都是块设备(U盘等)

  字符设备:能够实现数据传输和数据处理的设备,顺序访问(鼠标键盘等)

  设备文件模式: 

  在IDE硬盘中设备文件的存储文件模式是/dev/hd[a-d]

  而在SCSI/SATA/SAS/USB硬盘中设备文件的存储模式是:/dev/sd[a-z]

  设备的引用:

  在对设备进行存储管理时通过设备名(如/dev/sda)来引用设备,而设备文件名常常可以通过卷标名以及UUID进行设备的引用;

  

  在有一个空闲硬盘的情况下如何创建分区?创建分区之后如何创建文件系统?如何挂载?

  创建分区:

  分区有两种类型的分区,一种是硬盘空间小于2TB的MBR,一种是硬盘空间大于2TB的GPT

  MBR:

       64Bytes:partition table分区表,每16Byte表明一个分区的内容,所以一共能表示四个主       分区;

       当对硬盘分了四个分区后,不管是否有剩余磁盘空间都将无法在创建分区,在这种情况下,       常常会选择创建三个主分区与一个扩展空间,扩展空间可以在该空间中创建逻辑空间,继续对       剩余空间的使用,这样可以保证磁盘空间的利用率;主分区+扩展分区最多只能有四个,其分       区表位依次是1,2,3,4;逻辑分区的编号从5开始,不管前面四个数字的编号是否被占用;

  GPT:

  GUID Partition Table,GUID分区表,支持128个分区

  UEFI(统一扩展固件接口)的硬件可以支持GPT


  分区工具:

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

  gdisk:用于创建管理GPT分区;

  注意:如果在已分区并挂载的硬盘上创建分区,即便保存了,也不会被内核读取数据,可以通过查看/proc/partitions文本文档中的内容查看内核是否读取了所改动的硬盘;在此情况下可以通过几个命令强行让内核读取所修改的硬盘,或者重启计算机,然而重启计算机对于一线运维环境中并不是那么容易的;

  读取命令:

        partx -a [device]:若没有设备名,则读取当前环境下所有硬盘;

        partprobe [device]:若没有设备名,则读取当前环境下所有硬盘;

  

  fdisk:

  fdisk -l:查看当前磁盘的分区表,若加上设备名,则查看指定磁盘的分区表;

  fdisk 设备名:进入创建分区的交互模式,在交互模式中可以创建分区,删除分区,查看分区等多种            功能

  子命令:

      n:添加分区;

        p:创建主分区;

        e:创建扩展分区;

          l:创建逻辑分区;

      p:显示当前磁盘分区表;

      d:删除一个分区;

      m:显示帮助;

      q:不保存,退出编辑

      t:修改分区的系统标识(可进行swap转换)

      w:写,将做出的修改操作保存到磁盘的分区表中并退出,但却没有读入内核中,需要强制执       行;


  文件系统:

          对磁盘进行分区之后,便可对磁盘中的分区创建文件系统,文件系统就是给分区进行逻          辑上的编址,是分区上的方法和数据结构;创建文件系统的过程实际上就是格式化的过          程;格式化分为两种,

         第一种是低级格式化,即在物理的层面上对文件系统进行格式化创建磁道等;

         第二种是高级格式化,是在分区之后进行的;主要作用是创建文件系统,为分区构建逻          辑编址单元,簇,块,无论是簇还是块,都是将一个或多个扇区组织在一起,共同完成          数据存储;在一个块中只能存放一个文件内容,如果文件内容过大时,可以有多个块进          行存储;

  

  在创建文件系统的过程中首先就是要创建若干个不同作用的块:

  元数据块,数据块,块位图,inode位图,超级块,日志块等,让其组成一个块组每个块组有独立的元数据块和数据块,存放数据的时候,以块组内的数据块优先选择,如果块组内的数据块不够,可以通过存储策略来请多个块组协调工作;

  元数据块(inode):文件系统通常会将数据分别存放在不同的区块,权限,属性,文件大小,文件所有者以及指向该文件数据块的指针放置到 inode 中;

  数据块:实际数据则放置到 data block 区块中。实际数据是指文件的内容;在数据块中若为目录文件,则还保存了其下属子目录的inode编号,通过inode编号查找到其元数据块;

  块位图:以二进制的方式表示有哪些数据块为空,那些数据块不为空,0为空,1为不空;

  inode位图:以二进制的方式表示有哪些inode数据块为空,哪些inode数据块不为空,0为空,1为不空;

  超级块:定义了有多少个块组,以及每个块组的边界。为了防止超级块出现故障,导致整个系统的崩溃,需要对超级块进行备份;

 日志块:记录数据的操作,防止数据不一致;

  

  Linux中自带的文件系统有:

  ext ext2 ext3 ext4:最大分区50TB,可以做跟分区,也可以做启动分区;

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

  reiserfs:良好的反删除功能;

  btrfs:平衡树文件系统;

  swap:交换分区文件系统;

  实际上,对于不同Linux版本,在安装时都有其默认的文件系统

  如Centos5:ext3

   Centos6:ext4

   Centos7:xfs

  

  创建文件系统:

  mkfs:

  mkfs.ext3 设备名(在某设备上创建ext3文件系统)

  如果是创建ext系列的文件系统,可以使用mke2fs命令

  注意:在创建文件系统时不能对磁盘直接创建文件系统,这样会将磁盘中的分区全部格式化,如果使   用扩展分区作为参数则所有的逻辑分区都将被删除;只能使用主分区和逻辑分区作为参数;

  mke2fs:

  常用选项

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

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

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

  -N:直接指明要给此文件系统创建多少个inode数量;

  -m:保留块的百分比如-m 1 (为超级用户预留的磁盘空间的百分之一)

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

  -O feather[,..]:关闭或打开文件系统的特性;

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

  如

  mke2fs -t /dev/sda1(默认给设备/dev/sda1创建ext2文件系统)


  dumpe2fs:文件系统属性查看工具,详细列出了文件系统各种属性,如超级块与块组中元数据块数据         块等块的结构;

  tune2fs:文件系统属性调整工具,调整那些在ext文件系统上可修改的参数;

  常用选项

  -j:将ext2文件系统升至ext3,但不能反过来

  -m:保留块的百分比如-m 1 (为超级用户预留的磁盘空间的百分之一)

  -o:修改文件系统的默认挂载选项

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

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

  -O:修改文件系统的特性;

  -l:显示超级块的信息;


  如果想要修改文件系统的卷标信息可以使用e2label命令;

  e2label [device] "卷标":为该设备设置卷标信息;

  e2label [device]:显示该设备的卷标信息;

  如:

  [root@localhost wjq]# e2label /dev/sdb1 "wujunqi"

  [root@localhost wjq]# e2label /dev/sdb1

  wujunqi


  文件系统检测修改工具:

  fsck

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

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

   -r:交互式修复问题


  ext系列文件系统专门的检测修复工具:

  e2fsck

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

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

 

  blkid:显示已创建文件系统的设备,以及该设备的UUID,所创建文件系统的类型;

  blkid 设备名

  blkid -L label:引用设备可以通过卷标名,根据卷标进行查找;

  blkid -U uuid:引用设备可以通过UUID,根据UUID进行查找;

  如

  [root@localhost wjq]# blkid

  /dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660"      PTTYPE="dos" 

  /dev/sda1: UUID="1b28e0b5-b2c5-4da2-bf77-70414e1424e4" TYPE="xfs" 

  /dev/sda2: UUID="ec3d759a-c817-41b6-9a37-dded7e985a26" TYPE="xfs" 

  /dev/sda3: UUID="ec273085-9c8e-434c-bb15-0219217e9f4c" TYPE="swap" 

 

  [root@localhost wjq]# blkid -L "wujunqi"

  /dev/sdb1

   

  findfs:根据卷标和UUID找到对应的文件系统

  findfs LABEL=label

  findfs UUID=uuid


  创建swap文件系统:

  创建swap文件系统的前提是所创建的分区必须是swap类型,也可从主分区变换,变换方法为,进入fdisk交互界面,输入t,输入82(swap代码序列)

  mkswap命令:创建swap文件系统

  常用选项

      -L:设置交互分区卷标;

      -f:强制执行;

  如

  [root@localhost wjq]# mkswap -f /dev/sdb3

  [root@localhost wjq]# blkid 

  /dev/sdb3: UUID="4bf03dde-b724-43ff-b8b2-d3cd9d153bc6" TYPE="swap" 

  

  使用文件系统--挂载

  整个Linux系统使用的是目录树架构,但是我们的文件数据其实是放置在磁盘分区槽当中的, 现在的问题是『如何结合目录树的架构与磁碟内的数据』呢?——挂载;所谓的挂载就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下; 也就是说,进入该目录就可以读取该分割槽的意思。这个动作我们称为挂载,那个进入点的目录我们称为挂载点

  挂载点:磁盘分区数据存放的地点,其他文件,可通过此挂载点访问分区数据;作为挂载点的目录必须事先存在,且没有被其他进程使用,作为挂载点原来的数据,一旦被挂载,其原有的数据将被隐藏;

 df命令:查看挂载信息;

 选项

 -h:以G,MB的形式列出磁盘空间;

 -T:列出磁盘空间挂载文件系统的类型;

 -P:列出文件系统的块数;

 

 free命令:显示内存空间;

 选项:

 -k:采用千字节展示内存空间

 -m:采用兆字节展示内存空间

 -g:采用10亿字节展示内存空间

 free -m(以MB为单位来显示磁盘空间)


 挂载命令

  mount:

  常用选项:

 

    常用选项:

    -r:readonly以只读的方式挂载目标文件系统;

    -w:read and write,以读写的方式挂载目标文件系统;

    -n:默认情况下,设备挂载或卸载的操作会同步更新到/etc/mtab中,如果在挂载时使用了-n选     项,则表示我们要禁用此特性,即便挂载成功也不会更新到/etc/mtab中;

    /etc/mtab:记录了通过mount命令挂载的简略的概述信息;

    -t vsftype:指明要挂载的设备上创建的文件系统类型;如果省略该选项,mount命令会通过       blkid来判断要挂载目标文件系统类型;

    -L LABEL:挂载文件系统时,使用卷标代替设备名称;

    -U UUID:挂载文件系统时,使用UUID代替设备名称;

    -a:mount -a按照/etc/fstab文件中填写的设备进行自动

    挂载;

    -o option:

     sync/nosync:同步/异步操作,同步,只要有任何数据在内存当中被修改,就立刻将这样的数      据写入磁盘,增加数据可靠性,但会增大消耗IO;异步,先不管对数据的修改,在稍后空闲的      时候才将数据写到磁盘上,减少IO的消耗;

     atime/noatime:文件或目录被读取访问时,是否更新访问时间戳;但是如果设定atime对IO的      消耗太大,一秒钟如果有很多人访问,就有更改许多次;

     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功能;

     default:默认选项,包括:rw,suid,dev,exec,auto,

     nouser,async,and,relatime

     default nosuid ro(defaults后面的是优先生效的,然后再执行defaults中的默认选项;)

     loop:使用环回设备

     -B:将某个目录绑定至另一个目录;相当于这个目录作为另一个目录的入口,访问两个目录的内     容是一样的;

      mount -B 源目录 目标目录

     例

     mount -o remount.ro 挂载点或设备名

     (设置只读)

     loop:使用环回设备

    xshell导入一个iso系统文件

    mount -o loop 导入文件路径 挂载点

   如:

     设置可读可写:

     [root@localhost wjq]# mkdir ooo

     [root@localhost wjq]# mount -rw /dev/sdb5 ./ooo

     [root@localhost wjq]# df -Th /dev/sdb5

     文件系统       类型  容量  已用  可用 已用% 挂载点

     /dev/sdb5      ext2  861M  888K  817M    1% /home/wjq/ooo

     根据卷标名进行挂载:

     [root@localhost wjq]# mount -L wujunqi ./ooo

     [root@localhost wjq]# df -Th /dev/sdb1

     文件系统       类型  容量  已用  可用 已用% 挂载点

     /dev/sdb1      ext4   19M  332K   17M    2% /home/wjq/ooo

     -o选项的使用:

     [root@localhost wjq]# mount -o ro /dev/sdb1 ./ooo

     [root@localhost wjq]# df -Th /dev/sdb1

     文件系统       类型  容量  已用  可用 已用% 挂载点

     /dev/sdb1      ext4   19M  332K   17M    2% /home/wjq/ooo

     /dev/sdb1 on /home/wjq/ooo type ext4 (ro,relatime,seclabel,data=http://www.mamicode.com/ordered)

   卸载挂载点命令umount:

   umount 设备名

   当卸载不掉时,可能是有用户正在使用,可通过命令lsof查看是否有用户使用;可采用强制卸载的    方式;

   fuser -km 挂载点(强制卸载)

  

   挂载光盘:

   光盘文件在/dev/sr0比较特殊;

   1.保证光盘有正确的镜像文件

   2.保证光驱处于已连接状态,在虚拟机选项中选择设置,CD中点击已连接选项;

   3.创建光盘挂载点,mount /dev/sr0 挂载点


   挂载U盘:事先让系统进行识别,然后按正常方式挂载;

   挂载交互分区:

   swapon命令:

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

   

   上面挂载命令中的-a选项有提到过的/etc/fstab文本文档,该文件中所存储的六个字段可以帮助我  们自动设置挂载;只要读取该文件的内容便可实现自动挂载;

   六个字段的意义为:

   UUID 挂载点路径 文件系统 defaults 转储频率 自检次序

   defaults:默认挂载选项

   转储频率:使用dump命令备份分区的频率0:表示不备份1,每天备份一次2,每隔一天备份一次;  常为0;

   自检次序:0为不自检,1为优先自检,常为0

   

Linux存储管理