Linux_磁盘管理

磁盘管理体系结构
第一个层次: 磁盘外部结构 内部结构
第二个层次: 磁盘raid 磁盘LVM(逻辑卷管理 -- 磁盘的弹性扩容和缩容)
第三个层次: 磁盘分区练习 fdisk(分小于2T磁盘) parted(分大于2T磁盘)
第四个层次: 磁盘格式化(创建文件系统 inode block)
第五个层次: 磁盘应用方式 磁盘挂载操作(挂载参数) swap分区大小如何调整

【磁盘外部结构】

1.【磁盘主轴 --->转速是衡量磁盘读写性能的重要参考】

家用磁盘转速:7200rpm  /   5400 rpm

企业磁盘转速: 15K rpm /   10k rpm

 2.磁盘盘片:用于存取数据

3.磁盘磁头:用去读取数据

4.磁盘接口:用于连接主板


【磁盘接口分类】

接口:[PCI-E]【SATA接口】【SAS接口】【SISC接口】
sata:串口接口,安装简单 直接插拔
【SAS技术是结合了SATA和SCSI两者的优点而诞生的】

企业生产环境主流磁盘的相关信息对比:
企业生产场景普及程度:SAS>SATA>SSD
【满足容量的基础上尽量保持4块磁盘以上】


企业案例:【千万不要用SATA磁盘做在线高并发的数据存储或数据库业务】


单位容量对比性能和价格:SSD>SAS>SATA(一块SSD和一块SATA)
单位价格购买磁盘容量: SATA>SAS>SSD
光纤通道:热插拔性,高速带宽,远程连接,连接设备数量大等

【SSD】:固态硬盘
优点: 随机存取速度快,功耗小 防震 重量轻 存取性能好
缺点:成本高,容量低 写入寿命有限 数据难以恢复
应用: 数据量小并且有超大规模并发业务的
磁头:读写更灵敏

【选购磁盘小节】:
1. 线上的业务 SAS磁盘
2. 线下的业务 SATA业务
3. 线上高并发,小容量的业务 SSD磁盘
4. 思想:根据数据的访问热度,智能分析分层存储 SATA+SSD

[企业案例:淘宝网CDN缓存对象分级存储策略案例!]

数据存取原理
电与磁的转换

【机械磁盘读写磁盘数据的原理小节】:
1. 【磁盘是按照柱面为单位读写数据的】。即先读取同一个盘面的某个磁道,读完之后,如果数据没有读完,磁头也不会切换其他的磁道
而是选择切换磁头,读取下一个盘面的相同半径的磁道,直到所有盘面的相同半径的磁道读取完成之后,如果数据还没有读写完成,
才会切换不同半径的磁道,这个切换磁道的过程称为寻道
2.【不同磁头间的切换是电子切换】,而不同磁道间的切换需要磁头做径向运动,这个径向运动需要通过电机调节,这个动作是机械的切换
【磁头寻道是机械运动】【切换磁头是电子切换】

【磁盘内部结构】

磁盘相关名词翻译:
磁盘 【Disk】
磁头 【Head】

作用说明:

用来写入和读取数据的

特点说明:

盘面数量等于磁头数量

工作原理:

采用径向运动读写数据


扇区 【Sector】

  作用特点:用来存储用户数据

  特点说明:系统存储最小单位是block

  存储计数:默认磁盘扇区从1扇区开始;扇区大小为512字节

磁道 【Track】

  作用说明:用来存储用户数据

  特点说明:由多个同心圆组成

    -->存储计数:最外面同心圆为0磁道

  工作原理:磁盘默认按照磁道寻找数据

    -->重点原理:磁头径向运动为机械运动(寻道)

    -->原理特点:磁头径向运动较慢
柱面 【Cylinder】

  作用特点:用来存储用户数据

  特点说明:不同盘面上相同的磁道组成(圆柱体)

  工作原理:磁盘默认按照柱面进行读写

    -->重点原理:磁头之间的特换为电子切换

    -->原理特点:磁头电子切换较快
单元块 【Units】

  作用说明:用来存储用户数据

  特点说明:表示单个柱面大小
数据块 【Block】
索引节点号 【Inode】

 

【磁盘容量】:

1.磁盘大小:柱面大小(Untis)*柱面数量

  命令:1. echo 柱面大小(Untis)*柱面数量|bc

     2. awk 'BEGIN{print 柱面大小(Untis)*柱面数量}'
2.磁盘大小 = (每磁道扇区数*磁头数)*柱面数量*512字节

本章小节:数据在磁盘的位置, 三维地址


**RAID0、RAID1、RAID5、RAID10特点、优势、区别**

Raid:廉价冗余磁盘阵列
【作用】:把多块独立的物理磁盘按照不同的技术方式组合起来形成一个磁盘组,在逻辑上(做完Raid,装完系统后)看起来就是一块大的磁盘,
【可以提供比单个物理磁盘更大的存储容量和更高的存储性能】,同时又能提供不同级别数据冗余备份的一种技术

【冗余】:重复配置系统的一些部件,当系统发生故障时,冗余配置的部件介入并承担故障部件的工作,由此减少系统的故障时间 【备用部件】

【磁盘阵列】https://jingyan.baidu.com/article/da1091fb60acb0027849d6ce.html

生产环境常用的Raid级别:【RAID0、RAID1、RAID5、RAID10】

软件RAID、LVM逻辑卷、硬件RAID区别及企业
分类:【插在主板上,接磁盘】
-基于软件的RAID技术
  -->省购买硬件RAID控制器和附件的成本
  -->性能差,操作系统坏了 影响软RAID 【不用】
-基于硬件的RAID技术
  -->做缓存等等。。 性能强 磁盘检测,修复方面。。
  -->DELL服务器。默认支持RAID0,1 如果RAID5,10 需要购买RAID卡
LVM: Logical Volume Manager 逻辑卷管理:管理磁盘的容量 动态给磁盘扩容或缩容 【分区类型:8e 类型】

【如果过于强调性能与备份,那么还是应该使用RAID,而不是LVM】
  场景:虚拟机扩容
【区别】
  LVM: 灵活的调整磁盘容量,有一定的冗余和性能功能,但很弱
  RAID:更侧重性能和数据安全
【企业用RAID不用LVM】
  1. 提升数据安全性
  2.提升数据读写性能
  3.提供更大的单一逻辑磁盘数据容量存储


【RAID0】:把连续的数据分散到多个磁盘上存取。读写并发,但是没有容错 磁盘坏了,数据全丢


【性能】:以4块盘为例 理论上读写速度比单盘提升4倍,磁盘越多,倍数越小
【应用场景】
-负载均衡集群下面的多个相同RS节点服务器
-分布式文件存储下面的主节点或CHUNK SERVER
-MYSQL主从复制的多个Slave服务器
-对性能要求很高,对冗余要求很低的先关业务
【特点】:速度快,无冗余,容量无损失


---------------------------------------------------------------------------


【RAID1】: 【数据双备份】
Mirror /Mirroring【镜像】:最大程度的保障用户数据的可用性和可修复性
【冗余】:在所有RAID级别中,RAID1提供最高的数据安全保障,冗余度100%
【应用场景】:适用于存放重要数据,如服务器系统分区和对性能要求不好的数据库存储等等
【特点】:100% 冗余,容量损失一半
---------------------------------------------------------------------------


【RAID5】:是一种存储性能,数据安全,和存储成本兼顾的存储解决方案
至少三块盘,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中一块坏了,利用剩余的数据和相应的
奇偶校验信息去回复被损坏的数据
【特点】中庸,只能坏一块盘,RAID0 和 RAID 1之间的折中方案
【MYSQL主从复制,普通服务器等等】
【高并发 和 高性能的不适合】

-----------------------------------------------------------------------------


【RAID10】系统对比【RAID01】
4块盘最好 损失一半的容量
既保障数据安全性,也保障数据存储效率,理论上可以坏两块盘
性能: 大于DAID1 和 RAID5,小于RAID 0
冗余: 可损失2块盘,冗余大于 RAID 5和 RAID 0, 小于RAID 1
场合: 高并发存储和数据库系统

-----------------------------------------------------------------------------
总结:
【Dell R710】使用6块盘实践RAID制作:
RAID 0  支持1 块盘到多块盘,容量是所有盘之和
RAID 1 【只支持2块盘】 大小可以不一致 以小的为例,容量损失一块盘
RAID 5 最少3块盘,不管硬盘的数量有多少,只损失一块盘的容量
RAID 6 最少4块盘,5块也可以,损失2块盘,不管硬盘多少,只损失两块盘容量
RAID 10 最少4块盘,必须偶数盘,不管硬盘多少,都损失一半的容量,不支持虚拟磁盘
---------------------------------------------------------------------------------

【企业面试:一台服务器6块600G的磁盘,raid5之后,总大小3T。此时无法装系统,为啥?】
【答】:做完raid5之后,不要重启系统,而是在raid界面上,继续分1个小的虚拟磁盘vd200G,
用这个200G的虚拟磁盘装系统,装完系统之后再把剩余的2.8T分区通过parted
【方法2】:先拿1块盘raid0,剩下的5块再做raid5,在raid0装系统
【方法3】:装系统时,选下gpt分区格式
--------------------------------------------------------------------------------------

【系统启动引导记录】

位置:0磁头 0磁道 1扇区(512字节)446bytes主引记录(MBR)+(DPT)64bytes磁盘分区表/+2bytes 分区结束标识55AA

占用空间:446字节

【磁盘分区核心命令fdisk与parted】
1.磁盘分区:
【分区】:相当于给磁盘打隔断
类型特点:
【主分区 primary】
1. 系统中必须要存在的分区,系统盘选择主分区安装
2. 数字编号只能是 1-4
3. 主分区最多四个,最少一个
【扩展分区 extend】
1. 相当于一个独立的小磁盘,独立的分区表,不能独立存在
2. 有独立的分区表
3. 不能独立存在,即不能直接存放数据
4. 必须在扩展分区上建立逻辑区才能存放数据
5. 占用主分区的编号(2<=主分区(primary)+扩展分区(extend)<=4)
6. 扩展分区可以没有,最多只有一个
【逻辑分区 logic】
1. 数字编号从5开始
2. 存放于扩展分区之上
3. 存放任意普通数据
【分区的核心本质就是改64字节的分区表】


【fdisk分区工具介绍】:
-linux下做最常用的分区工具,一般是在装完系统之后进行分区。装系统之前的分区,多数是系统ISO里面的工具分,或者raid分磁盘
-fdisk只能root权限用户使用
-fdisk适合于对装系统后的剩余空间进行分区。例如:安装系统时没有全部分区,或者安装系统后添加新的磁盘
【注Centos6.X】:fdisk不能对大于2T的磁盘分区.

 Centos 7可以!

  g   --- 修改分区表为gpt

  o   --- 将分区表改回dos分区表

【磁盘分区:】
按柱面分区
分区登记的地点--> 磁盘分区表【存放分区结果信息的】
划分起始以及结束磁头号,扇区号 及柱面号
fdisk磁盘分区实质】 修改0磁头 0磁道 1扇区的 前446 bytes 之后的 64 bytes的分区表信息
剩下的两个字节是分区结束标志
-----------------------------------------------------------------------------------
命令: fdisk /dev/sdb
-l 列出所有分区表

【m: 显示菜单和帮助信息】
a: 活动分区标记/引导分区
d: 删除分区
l: 显示分区类型
g create a new empty GPT partition table 【创建GPT分区表信息(可以划分大的分区)】
o create a new empty DOS partition table 【创建DOS分区类型】
【n:新建分区】
【p:显示分区信息】
【q:退出不保存】
t:设置分区号

  a 设置swap分区类型 82 Linux swap / Solaris

  b 设置扩展分区类型 5 Extended

  c 设置LVM分区类型 8e Linux LVM

  d 设置默认分区类型 83 Linux

v:进行分区检查
w:保存修改
x:扩展应用,高级功能

==>在系统不重启时, 识别新添加的磁盘信息


echo "- - -" > /sys/class/scsi_host/host0/scan

--------------------------------------- 

当4个分区表满了之后,再分区:

【If you want to create more than four partitions, you must replace aprimary partition with an extended partition first.】
【如果要创建四个以上的分区,则必须替换首先是扩展分区的主分区。报错】
-------------------------------------------------
******【partprobe】*****
# 告诉内核,分区变化
[root@localhost ~]# partprobe /dev/sdb


【partend】:磁盘分区管理工具 分大于2T的磁盘
比fdisk灵活 操作都是实时的

以100M的磁盘为例:
#修改分区格式为gpt
parted /dev/sdb mklabel gpt yes
#创建10M的主分区
parted /dev/sdb mkpart primary 0 10 Ignore
#创建10M的swap交换分区
parted /dev/sdb mkpart primary linux-swap 11-21 Ignore
#创建10M的逻辑分区
parted /dev/sdb mkpart primary logical ext4 22 32 Ignore
parted /dev/sdb p


分区参数:
mklabel(创建分区表 MRB-msdos/gpt) create a new disklabel (partition table)
mklabel gpt
mkpart (创建新的分区) make a partition
mkpart primary 0 20M
print (显示分区表信息) display the partition table
rm (删除指定分区信息) delete partition NUMBER
quit (退出分区界面) exit program

【mklabel msdos】partend 改变分区的类型
---------------------------------------------------------------------------

磁盘表示:
/dev/hda1
/dev 设备文件目录
hd : IDE接口的硬盘
sd :sata, sas , usb, scsi 接口硬盘
a: linux用字母表示第几块磁盘,a代表第一块
1:linux用数字表示某块磁盘的第几个分区

【磁盘使用】
主分区:1-4 直接存数据(安装操作系统 可以直接格式化 有启动标识 Boot *)
扩展分区:无法直接使用 -->逻辑驱动器(最大 16个 理论无限)-->格式化 --->存取数据


2.磁盘格式化:

  给磁盘装一个文件系统(库管)主要负责数据如何存储在硬盘,
文件是以什么方式存在硬盘,又是以什么方式读出来 ------》(有丢数据的危险)
分类: 低级格式化(损伤磁盘寿命 需要专业的工具)
      高级格式化

----------------------------------------------------------------------------------------------
【文件系统】:
-什么是文件系统?

  【计算机存储和组织数据的方法或者机制】
-为啥需要文件系统?
  磁盘,物理介质,磁粒子物理元素。硬件需要软件驱动使用,磁盘需要文件系统驱动
文件系统实现通过磁盘管理,存取数据
-文件系统类型:
windows:  NTFS fat32,modos
Linux :    ext2, ext3(Centos 5), ext4(Centos 6),
xfs(Centos 7) 格式化效率更高 | 高并发存储效率更高

  查看支持的文件系统

-创建文件系统实践
命令:mkfs
语法: mkfs[options] device_name
命令选项:
-t 指定文件类型
【格式化ext4文件系统】
【其实关键就是生成一定数量的Inode 和 Block】

方式一:

方式二:


覆盖原来的文件系统!


------------------------------------------------------------------------------
3.磁盘挂载: 设备必须经过挂载才能使用
挂载的方式其实是将某个设备挂到系统文件中的某个文件夹
命令: mount
命令语法: mount device dir

命令选线:
-a 挂载所有文件 参考文件 /etc/fstab
-l 显示当前挂载
-t 文件系统类型 【mount -t ext4 /dev/sdb1 /mnt】
-o 指定挂载权限 【mount -o rw,remount /】【用于修复文件系统】
【磁盘挂载操作说明】
如何进行磁盘挂载 mount 挂载磁盘设备文件 挂载点(空目录--不是空目录,原目录数据信息无法再进行查看)

【临时挂载】

#查看进程的内核信息 查看挂载情况
[root@localhost /]# cat /proc/mounts
/dev/sdb1 /mnt ext4 rw,relatime,data=ordered 0 0
设备 挂载点 文件系统类型 挂载选项(权限..) 是否备份 是否开机磁盘检测

mount -o defaults /dev/sdb1 /mnt == mount -o rw, suid, dev, exec, auto, nouser, async /dev/sdb1 /mnt

rw --- 保证挂载点目录具有可读可写权限
ro --- 保证挂载点目录只具有可读权限

suid --- 保证挂载点目录中文件具有setuid权限
nosuid --- 保证挂载点目录中文件具有setuid权限失效

exec --- 保证挂载点目录中可执行文件可以执行
noexec --- 保证挂载点目录中可执行文件不可以执行

auto --- 可以实现自动批量挂载操作***********
noauto --- 不可以实现自动挂载操作

nouser --- 禁止让普通用户可以挂载磁盘
user --- 允许让普通用户可以挂载磁盘 

【自动挂载】

【方式一:】
vim /etc/fstab


[root@localhost /]# tail -2 /etc/fstab
/dev/sdb1 /mnt ext4 defaults 0 0
/dev/sdb2 /opt xfs defaults 0 0
设备 挂载点 文件系统类型 挂载选项(权限..) 是否备份 是否开机磁盘检测
01   02           03                        04                  05                       06
01: 存储设备文件信息 /dev/sdd1 or UUID
02: 挂载点信息(空目录)
03: 文件系统类型
04: 挂载的参数信息
05: 是否对磁盘数据进行备份 (便于数据恢复)
06: 是否对磁盘进行定期检查


# 查看挂载的情况【df 查看磁盘分区的使用情况(只针对挂载分区) df -Th】
[root@localhost ~]# df -h|grep sdb
/dev/sdb2 17M 1.1M 16M 7% /opt
/dev/sdb1 19M 332K 17M 2% /mnt

【方式二:】【不推荐】
vim /etc/rc.local
/sbin/mount -t ext4 /dev/sdb1 /mnt
/sbin/mount -t xfs /dev/sdb2 /opt

--------------------------------------------

【卸载】 :
-lf 懒惰卸载
umount /opt/data1 (设备挂载点卸载)
umount /dev/sdb1 (设备源卸载)

【查看文件系统内部细节】
【dumpe2fs 只能查看ext4类型的】
[root@localhost ~]# dumpe2fs /dev/sdb1|grep "Inode"

[root@localhost ~]# xfs_
xfs_admin xfs_db xfs_fsr xfs_io xfs_metadump xfs_quota
【备份】 【支持配额】
xfs_bmap xfs_estimate xfs_growfs xfs_logprint xfs_mkfile xfs_repair
【日志打印】 【修复】
xfs_copy xfs_freeze xfs_info xfs_mdrestore xfs_ncheck xfs_rtcp
【拷贝】

【xfs_info /dev/sdb2】
[root@localhost ~]# xfs_info /dev/sdb2

【磁盘空间满如何进行处理:】
cat: write error: No space left on device
原因1): block空间不足
df -h
/dev/sdd1 98M 98M 80K 100% /oldboy01


清除大文件方法:
创建大文件 -- dd
dd if=从哪拿出空间 of=创建一个大文件 bs=每次拿出多少空间 count=总共拿去几次
dd if=/dev/zero of=/opt/10G bs=1G count=10


第一步: 找出大文件
方法一: 利用find命令
find / -type f -size +1G
方法二: 查询目录中最大的文件
du -sh /opt/*|sort -hr --- 查找目录中大的数据信息


原因2): inode空间不足
df -i
/dev/sdd1 51712 51712 0 100% /oldboy01
清楚大量小文件方法:
第一步: 找出大量小文件
第二步: 一部分一部分进行删除

【磁盘检查】
fsck
1.正常的磁盘不能操作
2.卸载挂载点再操作

-a 修复磁盘【e2fsck】
[root@localhost ~]# fsck
fsck fsck.cramfs fsck.ext3 fsck.fat fsck.msdos fsck.xfs
fsck.btrfs fsck.ext2 fsck.ext4 fsck.minix fsck.vfat

只能对已经卸载的 ext文件系统类型的磁盘修复
[root@localhost ~]# fsck -a /dev/sdb1
fsck from util-linux 2.23.2
/dev/sdb1: clean, 12/5136 files, 2009/20480 blocks


不能对挂载的磁盘做修复
[root@localhost ~]# fsck -a /dev/sdb1
fsck from util-linux 2.23.2
/dev/sdb1 is mounted.
e2fsck: Cannot continue, aborting.

不能对xfs做修复
[root@localhost ~]# fsck -a /dev/sdb2
fsck from util-linux 2.23.2
/sbin/fsck.xfs: XFS file system.

xfs_repair 对已经卸载的xfs系统类型的磁盘做修复
[root@localhost ~]# xfs_repair /dev/sdb2
Phase 1 - find and verify superblock...
Only one AG detected - cannot validate filesystem geometry.
Use the -o force_geometry option to proceed.
----------------------------------------------------------------------

【swap分区】
作用:内存不够用时。用来充当内存,一般是内存的1.5倍
大于8G 就给 8G
【java服务】-->存在内存泄漏-->swap就会占用 --> 操作系统性能下降

【分交换分区】
mkswap   /dev/sdb3
[root@localhost oldboy]# mkswap /dev/sdb3
Setting up swapspace version 1, size = 20476 KiB
no label, UUID=9fc5f000-2d0e-4170-800b-2cc891cff889

【挂载】
swapon -a swap(交换分区挂载)
读取 ---> /etc/fstab

【磁盘中如何调整swap空间大小】
将硬盘空间 交换 内存使用
第一个历程: 划分出硬盘空间被swap所使用
dd if=/dev/zero of=/tmp/1G bs=10M count=100
[root@oldboyedu tmp]# 【dd if=/dev/zero of=/tmp/1G bs=10M count=100】
记录了100+0 的读入
记录了100+0 的写出
1048576000字节(1.0 GB)已复制,2.418 秒,434 MB/秒
[root@oldboyedu tmp]# ll -h /tmp/1G
-rw-r--r--. 1 root root 1000M 10月 12 16:18 /tmp/1G

第二个历程: 【设置硬盘空间被swap使用】
[root@oldboyedu tmp]# mkswap /tmp/1G
正在设置交换空间版本 1,大小 = 1023996 KiB
无标签,UUID=1db64f5f-2251-4a7f-a46e-e3372e18100e
[root@oldboyedu tmp]# file /tmp/1G
/tmp/1G: Linux/i386 swap file (new style), version 1 (4K pages), size 255999 pages, no label, UUID=1db64f5f-2251-4a7f-a46e-e3372e18100e

第三个历程: 【将划分swap空间进行加载】
[root@oldboyedu tmp]# swapon /tmp/1G
swapon: /tmp/1G:不安全的权限 0644,建议使用 0600。
[root@oldboyedu tmp]# free -h
total used free shared buff/cache available
Mem: 1.9G 159M 84M 9.6M 1.7G 1.6G
Swap: 2.0G 0B 2.0G

第四个历程: 【将swap空间进行回收】
[root@oldboyedu tmp]# swapoff /tmp/1G
[root@oldboyedu tmp]# free -h
total used free shared buff/cache available
Mem: 1.9G 158M 84M 9.6M 1.7G 1.6G
Swap: 1.0G 0B 1.0G

原文地址:https://www.cnblogs.com/zhanghongqi/p/11657153.html