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=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

   


本文转自 wujunqi1996 51CTO博客,原文链接:http://blog.51cto.com/12480612/1922070


相关文章
|
3月前
|
存储 Linux 数据安全/隐私保护
Linux学习笔记十:文件系统管理
Linux学习笔记十:文件系统管理
|
8月前
|
Linux 知识图谱 索引
【Linux】文件系统管理总结
【Linux】文件系统管理总结
58 0
|
存储 运维 Linux
Linux巩固篇006-Linux 磁盘和存储
纸上得来终觉浅,绝知此事要躬行
185 0
Linux巩固篇006-Linux 磁盘和存储
|
存储 缓存 Linux
Linux 是如何管理内存的?(二)
Linux 内存管理模型非常直接明了,因为 Linux 的这种机制使其具有可移植性并且能够在内存管理单元相差不大的机器下实现 Linux,下面我们就来认识一下 Linux 内存管理是如何实现的。
103 0
Linux 是如何管理内存的?(二)
|
缓存 算法 Linux
Linux 是如何管理内存的?(三)
Linux 内存管理模型非常直接明了,因为 Linux 的这种机制使其具有可移植性并且能够在内存管理单元相差不大的机器下实现 Linux,下面我们就来认识一下 Linux 内存管理是如何实现的。
87 0
Linux 是如何管理内存的?(三)
|
存储 Linux Shell
Linux 是如何管理内存的?(一)
Linux 内存管理模型非常直接明了,因为 Linux 的这种机制使其具有可移植性并且能够在内存管理单元相差不大的机器下实现 Linux,下面我们就来认识一下 Linux 内存管理是如何实现的。
253 0
Linux 是如何管理内存的?(一)
|
监控 Linux
Linux 查看系统内存总结
在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况。下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法。
1194 0
|
存储 Linux 开发工具