在Linux系统上一切皆文件,各种硬件设备在Linux上可以找到对应的设备文件,系统通过这些设备文件对硬件进行各种操作
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
常用操作接口:open(), read(), write(), close(),使用open接口打开设备文件,read或write接口从设备读取或写入数据,最后close关闭
设备类型:块设备( block,存取单位“块”,如:磁盘 )、字符设备:( char,存取单位“字符”,如:键盘 )
设备号码:主设备号( major number, 标识设备类型 )、次设备号( minor number, 标识同一类型下的不同设备 )
硬盘设备
设备文件:通常存放在/dev 目录下,通常以sd开头,如:SCSI、SATA、 SAS、IDE、USB等的设备文件名通常为:/dev/sda、/dev/sdb、 ...,最后的a、b为先后序号,常用序号:a-z,aa,ab…,而同一设备上的不同分区以1、2、 ...排序,如:/dev/sda1, /dev/sda5。虚拟磁盘:/dev/vd 、/dev/xvd
接口类型:
并行:IDE( 133MB/s )、SCSI( 640MB/s )
串口:SATA( 6Gbps )、SAS( 6Gbps )、USB( 480MB/s )
机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
上图为传统磁盘盘面划分结构,从盘面中心点往外,磁道数量相同,因为每个扇区大小相同,造成了盘面外圈的物理空间的浪费,所以现在一般采用如下图的划分方法,即ZBR(Zoned Bit Recording),区位记录磁盘扇区结构
,这样每个扇区面积相等,盘面外圈可以划分更多的扇区,同样大小的盘面就可以存储更多的数据。
磁道号从0开始逐数增加,从盘面外圈开始向内数。
扇区:每个磁道以512字节等分为多个弧段,这个弧段就是扇区,扇区是磁盘控制器的最小读写单元。通常情况下每个扇区大小为512字节,但不是绝对的。
柱面:将所有盘片相同磁道数的磁道划分为柱面,标记方式是由外向内从0开始逐数增加。之所以划分柱面,是因为所有磁盘同步旋转,所有磁头同步移动,所有的磁头在任意一个时刻总是会处在同一磁道同一扇区上。
读写数据时,任意一段数据总是按柱面来读写的,所以盘片越多,读写所扫的扇区数就越少,所需的时间相对就越少,性能就越好。
向磁盘写数据是从外圈柱面向内圈的,只有写完一个柱面才写下一个柱面。
磁盘容量大小由扇区数、磁道数、盘面数(每个盘面都有一个磁头,也可以是磁头数)决定
磁盘大小=磁头数(headers) × 每个磁道上的扇区数(sectors) × 柱面数(cylinders) × 512
磁盘大小=units × 柱面数据(cylinders)
固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍
相较于SSD,HDD在价格、容量占有绝对优势
硬盘有价,数据无价,目前SSD不能完全取代HHD
磁盘寻址方式:CHS与LBA
CHS:采用24bit位寻址,其中前10位表示柱面( cylinder ),中间8位表示磁头( head ),后面6位表示扇区(sector),最大寻址空间为8GB,即 8GB=2^10 × 2^8 × 2^6 × 512。由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式
LBA(logical block addressing):LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址,ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes。在磁盘容量大于大概8GB时,则只能使用LBA寻址方式
磁盘分区
为了优化磁盘I/O性能、实现磁盘空间配额限制、提高修复速度、隔离系统和程序、安装多个操作系统OS、采用不同文件系统,需要对磁盘进行分区。
分区方式:MBR,GPT
MBR分区:
MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
按柱面进行分区,并规定第0磁道0扇区中的512bytes 为硬盘主引导区域
硬盘主引导分成4个部分:
1、主引导程序,占446bytes,其中偏移地址0000x--0088x,它负责从活动分区中装载,并运行系统引导程序;
2、0089x--00E1x为出错信息数据区,00E2x--01BDx全为0字节
3、分区表(DPT,Disk Partition Table)含4个分区项,占64bytes,其中每16bytes标识一个分区,偏移地址01BEx--01FDx,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4;MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区),每个分区项16字符用途如下:
第1字节:引导标志,若值为80x表示活动分区,若为00x表示非活动分区
第2、3、4字节:分区起始位置,第2字表磁头号、第3字节低6位表示扇区号、第3字节高2位到4字节表示柱面号
第5字节:分区类型符,00表示未设置文件系统、06表示FAT16基本分区、0B表示FAT32基本分区、05表示扩展分区、07表示NTFS分区、0F表示(LBA模式)扩展分区等。
第6、7、8字节:分区结束位置,第6字表磁头号、第7字节低6位表示扇区号、第7字节高2位到8字节表示柱面号
第9--12字节:表示分区已使用的扇区数
第13--16字节:表示分区所占扇区数
4、分区标识位,占2bytes,偏移地址01FEx--01FFx的2个字节值为结束标志55AA,系统找不到标识位,将无法识别磁盘分区
分区结构如下:
备份/还原MBR的启动信息:(0磁道0扇区的前446个字节)
dd if=/dev/sda of=start.bak bs=1 count=446 备份
dd if=start.bak of=/dev/sda bs=1 count=446 还原
备份/还原MBR的分区表信息:(0磁道0扇区的倒数66个字节)
dd if=/dev/sda of=dpt.bak bs=1 count=66 skip=446 备份
dd if=dpt.bak of=/dev/sda bs=1 count=66 seek=446 还原
注意:分区信息被损坏后,使用光盘启动后是找不到原来的磁盘分区信息,所以最好备份到其地方
GPT分区
GPT( GUID(Globals Unique Identifiers)partition table ):支持128个分区,使用64位,支持8Z(512Byte/block)、64Z(4096Byte/block)
使用128位UUID(Universally Unique Identifier)( 可使用uuidgen 命令生成UUID)表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI(Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT
GPT分区结构:
BIOS+MBR与UEFI+GPT
分区管理工具
列出块设备:lsblk
创建分区工具:
fdisk 创建MBR分区
gdisk 创建GPT分区
parted 高级分区操作
重新设置内存中的内核分区表版本:partprobe [/dev/DEVICE](一般在CentOS 5、7使用)
查看内核是否已经识别新的分区:cat /proc/partations
parted命令
parted的操作都是实时生效的,小心使用
用法:parted [选项]... [设备 [命令 [参数]...]...]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200(默认M)
parted /dev/sdb rm 1
parted –l 列出分区信息
partx命令(一般在centos6中使用)
添加分区
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
删除分区用
partx -d --nr M-N /dev/DEVICE
分