磁盘管理
磁盘管理
懒惰的文字搬运工。
一、磁盘基础概念
对文件操作指令
open() read() write() close()
设备号码:
主设备号:major 标识设备类型
次设备号:minor 在同一设备类型设备下区分不同设备
如果主设备号和次设备号一致,说明两者就是同一个设备。即使文件的INODE不一样也是同一个设备
硬盘接口及速率
IDE 133MB/S 并口
SCSI 640MB/S 并口
STAT 6Gbps等同于768MB/S 串口
SAS 6Gbps等同于768MB/S 串口
USB 480MB/S
M.2 450MB/s
NVME 3200 MB/s
注意,速度不单单是由接口决定了。
并口接口:同一线缆可以接多个设备
串口接口:同一线缆只能接一个设备
服务器硬盘大小:
LFF 3.5寸,早期都是这种。和普通家用电脑一样
SFF 2.5寸,不同与2.5英寸的笔记本硬盘
机械硬盘:
生产中一般都是用机械硬盘。容量大,性价比高。由磁头、机械臂、盘片组成
磁头: header 磁头数=盘面数
磁道: cylinder 磁道数=柱面数
扇区: secotr 512字节
在centos7及以后版本就不在按照柱面划分分区了,而以扇区作为划分分区的单位,更加精细化。
centos5\6还是以柱面为单位进行划分分区
机械硬盘转速 5400 7200 10000 15000 RPM 每分钟转多少圈
寻址方式:
CHS: 早先方式,已经淘汰
CHS的意思就是先确认柱面(Cylinder),再确认磁头(Header),最后确认扇区(Sector)。先柱面再磁头再扇区
CHS采用24位寻址
其中前10位表示磁道,中间8位表示磁头,后6位表示扇区
2^10*2^8*2^6=1024*256*64=16,777,216
磁盘最大容量:
16,777,216*512=8,589,934,592=8,388,608K=8,192M=8G
LBA:
LBA是一个整数,通过转换成CHS格式继续完成磁盘具体寻址
ATA-1规范采用28位LBA,同样每个扇区512字节。最大128GB
ATA-6规范采用48位LBA,同样每个扇区512字节。最大128PB
最大寻址个数:2^48
磁盘最大容量:2^48*512=131,072T=128P
磁道号越小,速度越快。磁道号越大,速度越快。
访问数据的时间=寻道的时间 + 盘片转圈的时间 + 起头读数据的时间
也可以把盘片转圈的时间算到寻道的时间内
硬盘的命名:
centos5中: IDE 称为 hd## hda1 hda2 hdb1 hdc1...
STAT称为 sd## sda1 sda2 sdb1 sdb2...
USB 称为 sd## sda1 sda2 sdb1 sdb2...
SAS 称为 sd## sda1 sda2 sdb1 sdb2...
SCSI称为 sd## sda1 sda2 sdb1 sdb2...
centos6\7\8中: 无论IDE还是STAT SCSI SAS都称为sd##
二、磁盘分区:
(一)、添加硬盘
查看硬盘的方式:
cat /proc/partitions 查看内存中的分区表信息
ll /dev/sd* 查看内存中的设备信息
lsblk 查看内存中的设备分区信息
fdisk -l 查看硬盘中的分区信息
在不关机重启的下识别硬盘
echo '---' > /sys/class/scsi_host/host0/scan
其中host0可以改成host1 host2 host3 host4
其中scsi_host标识是scsi接口类型的磁盘
小技巧:可以定义成别名
alias scandisk='echo '\''- - -'\'' > /sys/class/scsi_host/host2/scan;echo '\''- - -'\'' > /sys/class/scsi_host/host0/scan' #表示数字0-n
判断硬盘类型:
lsblk -d -o name,rota 1 表示机械硬盘 0表示固态硬盘
-f 可以显示对应的文件系统
cat /sys/block 1 表示机械硬盘 0表示固态硬盘
(二)、分区介绍
磁盘分区格式化分为低级格式化和高级格式化。
低级格式化主要是磁盘生产厂商再磁盘出厂时进行的,主要时划分磁道,生成簇。
高级格式化主要是用来创建文件系统。
分区的优势:
优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统
查看分区信息
cat /proc/partitions 查看内存中的分区表信息
ll /dev/sd* 查看内存中的设备信息
lsblk 查看内存中的设备分区信息
fdisk -l 查看硬盘中的分区信息
现在磁盘分区格式有两种类型,一种是早期的MBR类型,一种是现在较为流行的GPT类型。
MBR类型:
MBR,又称为主引导记录(Master Boot Record),位于0柱面,0磁头,0扇区当中。使用了32位二进制来表示扇区数。也就是最大只能支持2TB大小的磁盘。
该扇区共计512字节,分成三个部分。
第一部分:前446字节,用来存放操作系统引导程序(bootloader),这是引导某个分区上的操作系统起来的第一段程序。
第二部分:后64字节,用来存放分区表。每16个字节标识一个主分区,一共可以标识4个主分区。
其中每个分区16个字节介绍:
第1个字节:引导标志,十六进制80表示活动分区,00表示非活动分区。在一个硬盘上只能由一个活动分区,标识此分区上存在操作系统。
第2~4个字节:描述了分区起始位置的磁头号,柱面号,扇区号。其中第2个字节的8位标识起始磁头号,第3个字节低6位标识起始扇区号,第3个字节高2位和第4个字节的8位标识起始柱面号。这3个字节也就是分区起始位置的CHS描述方法
第5个字节:分区类型,0标识分区未使用。83表示linux类型分区,82表示swap分区,8e表示LVM逻辑卷,05表示扩展分区
第6~8个字节:描述了分区结束位置的磁头好,柱面号,扇区号。其中第6个字节的8位标识结束磁头号,第7个字节低6位标识结束扇区号,低7个字节高2位和第8个字节的8位标识结束柱面号。这3个字节也就是分区结束位置的CHS描述方法
第9~12个字节:使用LBA方式描述了分区的起始位置。
第13~16个字节,使用LBA方式描述了分区的结束位置。
第三部分:最后2个字节,有效标识位,55AA表示分区表有效。
如果4个分区不够使用,可以拿出一个主分区来扩展使用,变成扩展分区。扩展分区的16个字节里面记录了另外一段磁盘空间,利用另外一段磁盘空间的EBR(前512字节)记录分区信息,
其中EBR的前446字节未使用,中间64字节,最后2字节的结束表示。
而中间64字节中,
第一个16个字节记录了当前逻辑分区的起始位置、结束位置、磁盘类型等等,同MBR类型;
第二个16个字节记录了下一个逻辑分区的起始位置、结束位置、磁盘类型等,同MBR
第三个16个字节,未使用
第四个16个字节,未使用
这样就可以突破只能记录4个分区的限制了。同时也就解释了逻辑分区不允许中间有间隔,如果删了sda5后,后面的sda6就会自动变成sda5的原因,因为逻辑分区是靠前一个逻辑分区中的EBR记录下一个逻辑分区的起始位置的。
MBR分区中一块硬盘最多有4个主分区或者也可以有最多3个主分区+1个扩展分区(N个逻辑分区)
例如, 我们想划分出6个分区,就有下面几种可行方案
一个主分区和五个扩展分区:1P + 5L
sda1 + sda5 + sda6 + sda7 + sda8 + sda9
两个主分区和四个扩展分区:2P + 4L
sda1 + sda2 + sda5 + sda6 + sda7 + sda8
三个主分区和三个扩展分区:3P + 3L
sda1 + sda2 + sda3 + sda5 + sda6 + sda7
备注:所有的逻辑分区一定是从5号开始的,前1~4可以是主分区和扩展分区。
GPT类型 :
GPT类型出来的所有类型都是主分区。GPT突破了MBR只能分4个主分区的限制,最大允许128个主分区。
分为4个区域:EFI信息区(GPT头),分区表,GPT分区区域、备份区域。
GPT头:前512字节为保护的MBR分区,其作用是定位分区表的位置和大小,GPT头还包括GPT头和分区表的校验和
分区表:这个区域由GPT头定义,一般占用磁盘LBA2~LBA33号扇区,每个扇区可储存4个主分区的分区信息,所以一共可以分128个主分区。
每个分区由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。
GPT分区区域:数据区,这个区域的起始地址和结束地址由GPT头定义。
备份区:备份区域我i与磁盘的尾部,包含GPT头和分区表的备份。一共使用了最后的33个扇区,最后一个扇区备份GPT头,倒数第二个扇区备份LBA2的扇区内容,等等倒叙备份。
老式的BIOS不支持GTP,需要使用UEFI。所以就由了两种组合
BIOS + MBR
UEFI + GPT
BIOS和UEFI区别
BIOS采用了16位汇编语言编写,只能运行在实模式(内存寻址方式由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址)下,可访问的内存空间为1MB,只支持字符操作界面
UEFI采用32位或者64位的C语言编写,突破了实模式的限制,可以达到最大的寻址空间,支持图形操作界面,使用文件方式保存信息,支持GPT分区启动,适合和较新的系统和硬件的配合使用
(三)、分区的相关命令
fdisk 管理MBR分区
gdisk 管理GPT分区
parted 高级分区操作,可以是交互或非交互式 ,慎重使用,没有保存这一说法,直接就生效
parted命令
备注,此命令是立即生效,小心谨慎。centos6上不能使用parted命令
pirnt 打印分区表
mklabel [gpt|msdos] 指定卷标
mkpart [primary] # ## 创建primary分区,大小是从第#个扇区到第##个扇区
rm # 删除第几个分区
fdisk命令
fdisk [option] DEVICE
查看分区信息
fdisk -l DEVICE 查看DEVICE设备上的分区信息,DEVICE可以省略,标识列出系统所有硬盘的分区信息
管理分区信息
注意:管理分区时,DEVICE不能省,必须指定。
m 帮助
w 保存
q 不保存退出
p 显示分区表
n 新增分区
d 删除分区
t 更改分区类型,也就是更改system ID
l 可以显示分区类型
gdisk命令
查看分区信息
gdisk -l DEVICE 查看DEVICE设备上的分区信息,DEVICE可以省略,标识列出系统所有硬盘的分区信息
管理分区信息
m 帮助
w 保存
q 不保存退出
p 显示分区表
n 新增分区
d 删除分区
t 更改分区类型,也就是更改system ID
l 可以显示分区类型
三、文件系统创建
mkfs命令
-f 强制创建文件系统
-L "LABEL" 创建卷标,最好加上引号
-t TYPE 指定创建的文件系统类型
-b ## 指定块大小,[1024|2048|4096]也就是指定文件系统分配的最小单位
mkfs.xfs DEVICE 创建xfs文件文件系统
mkfs.ext4 DEVICE 创建ext4文件系统
mkfs -t xfs 创建xfs文件系统
mkfs -t ext4 创建ext4文件系统
uuidgen命令
用于随机生成UUID
tune2fs命令
-l DEVICE 查看DEVICE设备的信息
-U DEVICE 更改设备的UUID
dumpe2fs命令
dumpe2fs DEVICE 查看DEVICE设备的分组信息
xfs_info命令
xfs_info DEVICE 查看DEVICE设备的信息
blkid命令
可以查看块设备的UUID和设备类型,没有创建文件系统的分区,这个命令是查不出的
findfs命令
可以查找设备
四、文件系统检测和修复
注意:一定不要在挂载状态下执行修复命令
fsck命令
fsc.FS_TYPE或 fsck -t FS_TYPE
选项:
-a 自动修复错误
-r 交互式修复错误
e2fsck命令
选项:
-f 强制修复
-y 自动回答yes
-p 自动进行安全的修复文件系统问题
xfs_repair命令
xfs文件系统专用检测修复工具
选项:
-f 修复文件
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复 / 时shiyong ,然后立即重启
五、挂载
关于挂载,在centos6当中每次挂载都会把信息写入到/etc/mtab文件中。
cat /proc/mounts可以读取实时挂载信息
mount命令
一个挂载点,同一时间只能挂载一个设备,一个挂载点同时挂载多个设备,但只能看到最后一次挂载的设备内容
如果一个未挂载的挂载点内有文件,挂载后,此挂载点内原来文件会暂时无法访问。作为挂载点的目录一般未空目录
mount命令读取的也是/etc/mtab的信息。可以使用mount -n选项不更新写入到/etc/mtab文件
mount [OPTIONS] 挂在设备 挂载点
mount 单命令可以查看已经挂载的设备信息
选项:
-t TYPE 指定挂载的设备类型
-r 挂载成只读
-w 挂在成读写
-n 不更新/etc/mtab
-a 自动挂载,只会挂载那些未挂载的设备。挂载上的设备不会重新挂载。
-L '卷标名' 使用卷标名挂载
-U 'UUID' 使用UUID挂载
-B 或 --bind 把一个文件夹挂载到另外一个文件夹
-o OPTIONS
remount 重新挂在
rw 读写挂载
ro 只读挂载
async/sync 是否异步写入,建议asnyc
atime/notime 是否更新文件或目录的访问时间,建议noaime
diratime/nodiratime 是否更新目录的访问时间
exec/noexec 里面的可执行文件直接运行,但是还可以通过脚本调用,间接运行
suid/nosuid 是否支持suid
user/nouiser 是否支持普通文件挂载设备
loop 挂 载成回环设备文件
defaults 默认
nouuid 不检测UUID挂载
挂载设备:
DEVICE
UUID=
LABEL=
有部分特殊的设备:tmpfs swap
lsof命令
lsof /PATH/TO/SOMEFILE 可以查看谁在使用此文件
fuser命令
-V 显示谁在使用
-k 结束
-m 指定挂载点
findmnt命令
判断目录是不是挂载点,然后判断echo $?判断状态
如果是挂载点,就会把挂载点的信息都显示出来
如果不是挂载点,就不会又任何显示
可以使用$?判断状态,0表示又是挂载点,1表示不是挂载点
示例
[root@CentOS7 ~]# findmnt /media [root@CentOS7 ~]# echo $? 1 [root@CentOS7 ~]# findmnt /boot TARGET SOURCE FSTYPE OPTIONS /boot /dev/sda1 xfs rw,relatime,attr2,inode64,noquota [root@CentOS7 ~]# echo $? 0 [root@CentOS7 ~]# echo $? 0 [root@CentOS7 ~]# findmnt /media [root@CentOS7 ~]# echo $? 1
umount命令
取消挂载
关于缓存和缓冲
缓冲区buffer 缓冲写入到磁盘的数据,写入缓存
缓存cache 缓存数据到内存当中,主要用来加速数据从硬盘中读取的速度,读入缓存。
在centos6中还是区分buffer和cache了。centos7以后的版本就不区分了。复用相同文件内容。
swap建议值:
低于2GB 建议2倍内存大小
2~4G 建议1倍内存大小
4~ 4G或0.5倍内存大小
swap是根据/proc/sys/vm/swappiness的值决定是否启用swap
/proc/sys/vm/swapiness的值表示剩余内存达到此值的百分比就启用
mkswap命令
用来格式化swap分区
swapon命令
选项:
-a 自动挂载swap分区
-s 可以查看挂载的swap分区,实际上-s选项就是显示/proc/swaps文件的内容,而且可以显示多个设备的优先级(priority)
swapoff命令
swapoff DEVICE禁用某个swap设备
mkisofs命令
mkisofs -r -o /root/etc.iso /etc 把某个目录打包成iso镜像文件
lsusb命令
查看usb设备是否识别
dmesg命令
可以查看硬件设备
df命令
可以查看已挂载的各个分区使用信息,包括数据和元数据的占用
选项:
-h 人性化显示
-i 显示inode节点信息
-P 按POSIX规范显示
-T 显示出文件系统类型
du命令
可以显示文件或目录的数据实际使用大小
选项:
-h 人性化显示,默认是以k为单位显示
-s 求和,只显示总共大小
六、RAID阵列
RAID0 多个硬盘组合成大的虚拟硬盘,虚拟硬盘之和就是多个硬盘的大小总和。
读性能提升,写性能提升,如果一个磁盘损坏,数据就彻底报废。没有任何容错性。所以生产中不会使用。
RAID1 多个硬盘互为镜像。主要用来防止单点失败。这和备份不一样,仅是用来防止一个硬盘损坏。
读性能提升,写性能略有下降。
RAID4 其中一个硬盘固定只放了校验位。当其中一块硬盘坏了,可以通过异或计算出来。也就是允许坏一块硬盘。存放校验位的硬盘经常损坏
读性能提升,写性能提升
RAID5 多块硬盘轮流存放校验位。只允许坏一块硬盘。
读性能提升,写性能提升
RAID6 和RAID5差不多,只不多有两块硬盘用来存放校验位
RAID10 先RAID1 再RAID0 先镜像 再组合 一般都用这个
RAID01 先RAID0 再RAID1 先组合 再镜像 现在不用这个了
RAID50 先RAID5 再RAID0
JBOD 先用使用一个硬盘,再使用一个,依次。主要用来组合不同容量的硬盘
七、LVM逻辑卷
(一)逻辑卷创建
先创建PE,再创建卷组,再创建逻辑卷。格式化,挂载就能使用了。
pvcreate命令
pvcreate DEVICE1 DEVICE2 创建PE
pvs命令
可以显示简要pe信息
pvdisplay命令
可以显示详细的pe信息
vgcreate命令
创建逻辑卷组
vgs命令
可以显示简要pv信息
vgdisplay命令
可以显示详细pv信息
vgextend命令
vgextend VG_NAME DEVICE 把PE物理卷加入到vg卷组中
lvcreate命令
lvcreate -n LV_NAME -L 600M VG_NAME
-n 指定逻辑卷的名称
-l 指定PE的个数
-L 指定容量大小,容量是PE的整数倍,不一定会刚刚好600M
-s 创建快照
lvcreate -n binlogo_snapshot -s -L 100M /dev/vg0/binlog
lvs命令
可以显示简要lv信息
lvdispaly命令
可以详细显示lv的信息
lvextend命令
lvextend -L +100%free VG_NAME
-l 指定PE的个数 +100%vg表示全部空间
-L 指定容量大小,容量是PE的整数倍,不一定会刚刚好600M +100%free表示全部空间
-r 自动扩展文件系统,无论什么文件系统。
同步文件系统边界命令
resizee2fs LV_DEVICE 同步ext系列文件系统
xfs_growfs 挂载点 同步xfs文件系统
(二)逻辑卷缩减
ext4文件系统才支持缩减,xfs文件系统不支持缩减
缩减只支持离线缩减,先取消挂载
缩减有风险,建议先备份
缩减逻辑卷五大步
第一步、取消挂载
第二步、检查文件系统
e2fsck DEVICE
第三步、缩减文件系统
resize2fs DEVICE ###
第四步、缩减逻辑卷
lvreduce -L ### DEVICE
第五步、重新挂载
(三)逻辑卷创建快照
lvcreate -n binlogo_snapshot -s -L 100M /dev/vg0/binlog 创建快照
lvcreate --merge /dev/vg0/binlog_snapshot 恢复快照,合并快照之前先要取消挂载
再挂载xfs文件系统类型的快照的时候,需要使用-o -nouuid选项,一定要ro挂载 ext系列文件系统,不用加-o -nouuid直接就能挂载
快照特点:
备份速度块
应用场景是测试环境,不能完全代替备份
创建快照之后性能可能会略有下降
(四)逻辑卷删除
从卷组总拆除硬盘
pvmove DEVICE 意思就是把DEVICE上面的数据移动到别的设备上
vgreduce vg0 DEVICE 意思就是把DEVICE设备从vg0中删除
pvromove DEVICE 从PE中移除DEVICE设备
逻辑卷删除
先取消挂载
再删除逻辑卷
再删除卷组
在删除物理