Linux存储管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]:显示该设备的卷标信息;
如:
[[email protected] wjq]# e2label /dev/sdb1 "wujunqi"
[[email protected] 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进行查找;
如
[[email protected] 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"
[[email protected] 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:强制执行;
如
[[email protected] wjq]# mkswap -f /dev/sdb3
[[email protected] 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 导入文件路径 挂载点
如:
设置可读可写:
[[email protected] wjq]# mkdir ooo
[[email protected] wjq]# mount -rw /dev/sdb5 ./ooo
[[email protected] wjq]# df -Th /dev/sdb5
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb5 ext2 861M 888K 817M 1% /home/wjq/ooo
根据卷标名进行挂载:
[[email protected] wjq]# mount -L wujunqi ./ooo
[[email protected] wjq]# df -Th /dev/sdb1
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 ext4 19M 332K 17M 2% /home/wjq/ooo
-o选项的使用:
[[email protected] wjq]# mount -o ro /dev/sdb1 ./ooo
[[email protected] 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
以上是关于Linux存储管理的主要内容,如果未能解决你的问题,请参考以下文章