磁盘分区
# 磁盘介绍
# 磁盘层次结构
# 外部结构
磁盘主轴,决定磁盘转速。
磁盘盘片,用于存储数据。
磁盘可有多个盘片,越往外面,扇区的面积越大,所以越往外面,转动的速度越快。为了防止外圈资源浪费,不同的磁道采用不同的速度,也就是非恒定速度。
磁盘磁头,用于读取数据。
会由外向内移动,读取盘片内圈时由于机械臂需要移动,所以会有一定的IO延迟,而磁盘一般从外圈开始写入,所以可以将常用的分区部署在磁盘的外侧柱面上。
磁盘接口,用于连接主板、阵列卡等。
# 内部结构
磁头。
磁头数量同等于盘面数量,采用径向云动读写数据。
磁道。
由多个同心圆组成,最外面同心圆称为0磁道。
磁盘默认按磁道寻找数据,磁头径向运动为机械运动(寻道)。
扇区。
磁盘物理存储的最小单位是512字节,多个扇区组成一个逻辑的block。
柱面。
不同盘面上相同的磁道组成,多个柱面组成一个圆柱。
一个柱面有不同的磁道,所以又有多个同心圆。
单元块
表示单个柱面的大小。
# 磁盘读取过程
通过磁盘主轴的旋转带动盘片旋转,同时磁臂带动磁头去读取数据,磁臂内外移动来读取不同磁道、柱面的数据。
# 磁盘阵列介绍
# 介绍
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。
RAID是一类多磁盘管理技术,可提供成本适中、数据可靠性高的高性能存储。RAID 的两个关键目标是提高数据可靠性和I/O性能。
软RAID
软RAID所有功能均有操作系统和CPU来完成,没有独立的RAID控制/处理芯片和I/O处理芯片,效率自然最低。
硬RAID
硬RAID配备了专门的RAID控制/处理芯片和I/O处理芯片以及阵列缓冲,不占用CPU资源,但成本高。
软硬混合RAID
软硬混合RAID具备RAID控制/处理芯片,但缺乏I/O处理芯片,需要CPU和驱动程序来完成,性能和成本在软RAID和硬RAID之间。
# 特点
大容量
由多个磁盘组成的 RAID 系统具有海量的存储空间。
高性能
通过数据条带化, RAID 将数据 I/O 分散到各个成员磁盘上,从而获得比单个磁盘成倍增长的聚合 I/O 性能。
可靠性
RAID 采用镜像和数据校验等数据冗余技术。
镜像是把某组磁盘上的数据完全复制到另一组磁盘上,保证总有数据副本可用。
数据校验则是利用校验冗余信息对数据进行校验和纠错。
可管理性
由于 RAID 内部完成了大量的存储管理工作,管理员只需要管理单个虚拟驱动器。
RAID 可以动态增减磁盘驱动器,可自动进行数据校验和数据重建,这些都可以 大大简化管理工作。
# 概念
镜像
镜像提高数据安全性。
将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。
显而易见,镜像的写性能要稍低, 确保数据正确地写到多个磁盘需要更多的时间消耗。
数据条带
数据条带提高I/O读写性能。
将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本。
数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上数据进行读写操作, 从而获得非常可观的 I/O 性能提升 。
数据校验
数据校验,利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。
利用校验功能,可以很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。
不同等级的 RAID 采用一个或多个以上的三种技术,来获得不同的数据可靠性、可用性和 I/O 性能。
至于设计何种 RAID 或采用何种模式的 RAID ,需要在深入理解系统需求的前提下进行合理选择,综合评估可靠性、性能和成本来进行折中的选择。
# RAID等级
# JBOD
JBOD(Just a Bunch Of Disks) 不是标准的RAID等级,它通常用来表示一个单纯的磁盘集合。
JBOD将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘。 当前磁盘存储空间用完后,再依次往后面的磁盘存储数据。
# RAID0

RAID0是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的RAID ,因为它并不提供任何形式的冗余策略。
RAID0将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。
由于可以并发执行I/O操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0的性能在所有RAID等级中是最高的。
理论上讲,一个由n块磁盘组成的 RAID0 ,它的读写性能是单个磁盘性能的n倍,但由于总线带宽等多种因素的限制,实际的性能提升低于理论值。
RAID0具有低成本、高读写性能、 100%的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。
因此, RAID0一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。
# RAID1

RAID1称为镜像,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为50% 。
RAID1在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。
RAID1与RAID0刚好相反,是为了增强数据安全性使两块磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。
RAID1拥有完全容错的能力,且读效率提高,但实现成本高。RAID1应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。
# RAID5
RAID5是目前最常见的RAID等级,他的校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。
RAID5的磁盘上同时存储数据和校验数据,数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。与其他RAID等级一样,重建数据时,RAID5的性能会受到较大的影响。
RAID5兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为RAID0和RAID1的折中方案,是目前综合性能最佳的数据保护解决方案。
例如
如果有3块磁盘配置了RAID5,那么用户在存储数据时,会将一份数据分为2份,放入磁盘AB中,磁盘C存放这份数据的奇偶校验和信息,大概就是a+b=x(校验数据)。
存储第二份数据时,分成2份放在磁盘B、C中,奇偶校验和放在磁盘A中,第三份数据则是存放磁盘C、A,奇偶校验和放在磁盘B中,以此类推。
当一个磁盘坏掉时,可以通过奇偶校验和来反推出完整的数据。
特点
至少需要3块磁盘,最多能损坏1块磁盘,坏2块则无法反推完整数据。
会损耗1块磁盘的容量,一般搭配热备盘,可提高磁盘的读写效率和提供一些安全性。
# RAID01和RAID10
RAID01是先做条带化再作镜像,本质是对物理磁盘实现镜像。
RAID10是先做镜像再作条带化,是对虚拟磁盘实现镜像。
相同的配置下,通常RAID01比RAID10具有更好的容错能力。
RAID01兼备了RAID0和RAID1的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。
RAID01的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。RAID01和RAID10内部都含有RAID1模式,因此整体磁盘利用率均仅为50% 。
例如
由两个磁盘组成一个RAID0,再由两个RAID0组合为一个RAID1,这就是RAID01。
读写数据时,将一份数据复制成两份,再将每份数据分为2份,一份放在磁盘A、一份放在磁盘B。
然后复制的另一份数据也分成两份,一份放在磁盘C、一份放在磁盘B。
当一个磁盘坏掉时,还有另一边的磁盘作为镜像盘可用,但如果另一边刚巧坏了相同的数据,则数据将损坏无法读取。
特点
至少需要4块磁盘,最多损坏1-2块,如果坏的2块磁盘中的数据是相同的则数据损坏,如果坏的2块磁盘中数据不同,则还有另外两块。
会损耗一半磁盘的容量,可提高磁盘的读写效率和提供一些安全性。
# LVM
将多块物理磁盘,逻辑的整合为一个磁盘池,使分区的空间可以弹性的扩容和缩容 (尽量不要缩容)。
一般企业不用,因为已经有RAID进行逻辑整合了,小型企业一般使用云主机了,且LVM是软件会占用CPU资源。
# 磁盘分区
# 相关概念
系统启动引导记录
引导记录存储在硬盘的0头0道1扇区,该扇区也是总共512个字节,其中前446字节为主引导程序,剩下64字节和2字节作为磁盘分区表DPT。
磁盘分区表
磁盘分区表中,每个分区64除以4,16个字节作为一个主分区。
最后2字节是分区的结束标识55AA。
一个磁盘最多4个主分区,或者可以划分3个主分区 和 1个扩展分区。
MBR和GPT引导记录
MBR引导记录,用于引导磁盘空间小于2T,引导的系统所在磁盘不大于2T即可。
GPT引导记录,用于引导磁盘空间大于2T。
系统分区类型
主分区,一块磁盘最多存在4个主分区。
扩展分区,一块磁盘最多只能存在1个扩展分区,扩展分区无法直接使用,需要在扩展分区基础上划分逻辑分区。
逻辑分区,命名从5开始。
# 划分小于2T的分区
我们可以使用fdisk命令对2TB以下的硬盘进行分区管理。
fdisk [参数] [存储设备文件]
命令参数:
-l
查看分区信息。
管理操作:
m
输出帮助菜单。
n
新建分区。
d
删除分区。
g
新建一个的空GPT分区表 (可对2T以上磁盘进行分区)。
p
输出当前磁盘分区的类型ID,Linux默认83。
l
列出所有磁盘分区类型ID。
t
改变磁盘的分区类型ID,即改变分区类型(LVM、swap)。
u
改变分区类型,是否按照扇区进行划分。
w
将分区信息保存写入到分区表并退出。
q
不保存直接退出。
分区例子:
分区时需要和上级确认好再删,最多可以分4个主分区,或者3个主分区、1个扩展分区,有了扩展分区才可以新建逻辑分区。
- 插入磁盘,如果是物理机可以热插拔硬盘。
- 在系统中检查是否识别到新的磁盘
fdisk -l
。fdisk /dev/sdb
操作新插入的磁盘文件。- 交互式界面,按n新建分区,选p创建主分区,选e是创建扩展分区。
- 选择开始分区的扇区,一般默认直接回车即可。
- 选择结束分区的扇区,输入+size[K/M/G]按尺寸结束。
- 按p检查是否分区成功,然后继续分区。
- 最后按p使分区表生效并退出。
- 然后使用mkfs命令格式分区并创建文件系统。
- 最后使用mount命令挂载分区即可。
# 划分大于2T的分区
我们可以使用parted命令对2TB以上的硬盘进行分区管理。
parted [存储设备文件]
管理操作:
mklabel [mbr/gpt]
修改硬盘的分区表格式。
p
显示分区表信息。
mkpart [primary/extended] [分区开头] [分区结尾]
创建一个分区,执行后会立即生效,分区结尾可用空间大小来代替(1M、1G等)。
rm [编号]
删除指定分区。q 退出程序。
分区例子:
pasted /dev/sdb
mklabel gpt
mkpart primary 0 2000G
- 使用
partprobe /dev/sdb
命令,使系统立即加载分区。- 使用mkfs命令格式分区并创建文件系统。
- 最后使用mount命令挂载分区即可。
# 磁盘格式化
我们可以使用mkfs系列命令格式化分区并创建文件系统。
mkfs.[文件系统类型] [磁盘分区文件]
输入
mkfs.
后可按tab查看支持的文件系统格式。例如
mkfs.xfs
,该类型文件系统格式化效率比ext3/4更快,数据存储效率提高(数据库)。
# 磁盘挂载
临时挂载
mount [分区文件] [挂载点]
开机自动挂载
编辑/etc/fstab文件,格式为:挂载设备 挂载点 文件系统类型 挂载的参数 备份设置 自检设置
或者在rc.local中添加分区挂载命令,需要添加执行权限。
查看磁盘的UID
通过blkid命令可以查看。
# 临时添加swap空间
dd if=/dev/zero of=/data/swap10g bs=1G count=10
首先使用dd命令从/dev/zero中取出一部分空间供swap分区使用。if=[源文件]
input file。of=[目标文件]
output file。bs=n{K/M/G}
block size。count=[次数]
代表生成多少个块。mkswap /data/swap10g
将生成的空间文件标记为swap空间。swapon /data/swap10g
启用swap空间。需要关闭时,使用
swapoff /data/swap10g
命令可以关闭swap空间。然后用rm命令删除空间文件即可。
# 企业磁盘满处理方法
磁盘block空间不足,可以对大且无用的文件进行清除。
可以使用
du [参数] [目录路径]
查看目录真实大小。
- -h 以人类易读的方式显示单位。
- -s 不对子目录进行查看。
可以将结果通过管道符给
sort [参数]
命令进行信息排序。
- -k1 指定按照第1列排序 (以此类推)。
- -n 以数字整体排序。
- -h 识别人类易读的单位。
磁盘inode空间不足,可能是磁盘中出现了大量小文件,可以find对小而无用的文件进行清除。不过一般很少出现。
# sync命令
执行sync命令后,可以将内存中的缓冲写到内磁盘中,防止要关机时还有数据在缓冲区内。