马哥学习----李洋个人笔记 ----磁盘管理

硬盘分为 机械硬盘和固态硬盘两种。
机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制
电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个
旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比
头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头
可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置
上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过
相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤

 固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存

储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通
硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致

块设备:block,存取单位“块”,磁盘
字符设备:char,存取单位“字符”,键盘

设备文件(驱动程序):关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

设备号码:
主设备号:major number, 标识设备类型
次设备号:minor number, 标识同一类型下的不同设备

创建设备文件 mknod 创建指定的设备类型,设备名及路径,主设备号及次设备号

mknod /app/sda b 8 0 在app目录下创建一个名字为sda的块设备文件,主设备号为8,次设备号为0。

mknod /app/zhongduan1 c 4 1
主设备号及次设备号完全一致的,被视为同一个设备。

各种时期的硬盘命名规则

centos5及之前
ide /dev/hda 第一块
/dev/hdb 第二块
...
/dev/hdaa
sata的硬盘 sata/sas/scsi/usb /dev/sda第一块 /dev/sdb 第二块

centos6及之后
sata/sas/scsi/usb/ide /dev/sda

kvm虚拟机的虚拟硬盘 /dev/vda
xen虚拟机的虚拟硬盘 /dev/xvda
vmware的虚拟硬盘 /dev/sda

磁盘的三围 柱面,扇区,磁头 多个磁道合在一起叫柱面。 柱面,扇区,磁头和磁道是硬盘存储术语。

计算硬盘的存储总数,需要硬盘三围,即柱面 磁头及扇区。
扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参数,用这些参数可以得到硬盘的容量
公式为:存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数。举例:
柱面 c:2^10=1024
磁头 h:2^8=256
扇区 s:2^6=64
一个扇区大小512byte,存储总量为256641024*512/1024/1024/1024=8GB
1.磁道,扇区,柱面和磁头数
硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,
都可记录信息。

扇区:盘片被分成许多扇形的区域,每个区域叫一个扇区,在DOS 中每扇区是128×2的2次方=512字节,
磁道:盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道。磁道与柱面都是表示不同半径的圆,
柱面:不同盘片相同半径 的磁道所组成的圆柱称为柱面。在许多场合,磁道和柱面可以互换使用。
磁头:每个磁盘有两个面,每个面都有一个磁头,习惯用磁头号来区分。

存储单位,从低到高 KB, MB, GB, TB, PB, EB, ZB, YB, BB, NB, DB

为什么要分区

1 优化I/O性能 更好的读写速度。

2 实现磁盘空间配额限制

3 提高修复速度

4 隔离系统和程序 实现多系统,以及中病毒的恢复速度

6 采用不同文件系统 网络共享限制单个用户的上传文件带下

分区的参数:

设备识别

设备分区

创建文件系统

标记文件系统

在/etc/fstab文件中创建条目

挂载新的文件系统

分区的种类:MBR和GPT
MBR:使用32位表示扇区数,单个分区不超过2T

在0磁道0扇区:512bytes上,叫做第一个扇区,叫主引导记录。由三部分组成:第一部分 boot loader 大约446字节
作为启动系统来使用。
hexdump -C -n 512 -v /dev/sda 查看整个硬盘前512个字节的内容

MBR的分区
最多四个主分区 活动分区引导标志是80,非活动分区为00

1.BIOS basic input/output system(基本输入输出系统) 自检

2.由第一启动项,引导OS(操作系统)

3.MBR Master boot record 主引导记录
446 boot loader(每个操作系统都有自己的引导方式。)

16*4=64 分区     4个分区,每个分区占16个字节

55 AA  结束位    校验位,读到这个位置,就代表分区全部读完了。一共占2个字节。

4 进入系统

hexdump -C -n 512 -v /dev/sda 可以查看整个硬盘前512个字节的内容,结束位置是 55 AA,起始值为80.80到55 AA之间。
共计64个字节,每16个字节代表一个分区,剩余的446个字节,就是主引导记录了.

分区的16个字节(1-16来表示),每个位置代表:

1 引导标志,值为80表示活动分区.值为00代表非活动.

2 磁头号,是那个磁头,定位了那个面.这个分区从那个面开始.占一个字节共八位.

3 扇区号 第三字节低六位.

4 柱面号 第三字节高二为+第四字节 柱面号为10位.第四个字节(八位)加上第三个的二位,共计10位.

磁头号,扇区号,柱面号(2,3,4)共同表示这个磁盘分区的起点.共占用了3个字节又24位.

最大可以表示2的24次方个扇区,每个扇区是2^9字节.2^24字节*2^9字节/2^30字节=8GB

5 第五个字节表示,分区的类型.83代表linux的正常分区.05表示扩展分区,82表示交换分区.

6 磁头号,表示chs分区结束的位置.

7 扇区号,第七字节低六位.

8 柱面号,第七字节高二位+第八字节
(6,7,8)共计24位,占了三个字节表示这个磁盘分区的终点
前8个字节表示的是最大寻址为8GB的方法。

后面的8个字节.前四个字节表示磁盘分区的起点,后四个字节表示磁盘分区的终点.共计2的32次方个扇区。

如果要分5个以上的分区,就要用扩展分区(最后一个主分区,集合了逻辑分区,特殊的主分区)。
就从扩展分区里面建立逻辑分区。逻辑分区像主分区一样建立主引导记录,并将第一个扇区拿来做引导,叫EBR
但是逻辑分区的引导不用启动系统,所以它前446位的值为空。中间的64位用来表示分区,同样是4个,第一个分区
表项指向逻辑分区1,其中的组成结构同MBR。第二个分区指向下一个扩展分区的EBR,后两个暂时不用。最后两位表示
结束,值同样为 55 AA。

MBR分区结构
硬盘主引导记录MBR由4个部分组成

主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。

出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。

分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个
字节,共64字节为分区项1、分区项2、分区项3、分区项4

结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA

MBR的分区方式,最大只能寻找2TB的地址。所以,有了新的分区方式,GPT
GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z
( 512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾
两份,并有CRC校验位
主板只能用UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动,不能使用BIOS来启动系统了。

GPT的分区
第一格为保护MBR,避免老的分区工具不认识,导致数据丢失,所以把511和512两个字节上的值设为55 AA。表示结束。
前面的值都为空。接下来是GUID的起始LBA1,然后1---4的分区位置LBA2,5---8的分区位置LBA3,直到123--128LBA33,
每四个分为一组,然后从第LBA34组开始,写第一个分区的数据,依次类推。直到128个分区数据写完之后,又开始备份
的分区表,直至结束的头。

UEFI运行流程
开机----UEFI初始化----引导操作系统----进入系统

dd命令
skip=xxx 是在备份时对if后面的部分也就是原文件跳过多少块
seek=xxx 是在备份时对of后面的部分也就是目标文件跳过多少块开始写

实验一:备份mbr,并破坏,再恢复
1.备份mbr
dd if=/dev/sda of=/app/mbr.img bs=1 count=512
2.将mbr.img 复制到其他主机 sz /app/mbr.img
3.破坏mbr
dd if=/dev/zero of=/dev/sda bs=1 count=512
4.关机
5.在另一个主机上将被破坏的硬盘添加
6.在vmware虚拟机,新加硬盘不用重启的生效方法
echo '- - -' > /sys/class/scsi_host/host0/scan
7.恢复
dd if=mbr.img of=/dev/sdb
8.poweroff
9.开启被恢复的主机
10.从恢复机中删除故障硬盘.

实验二:仅破坏分区表,并恢复.
dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
dd if=/app/mbr.img of=/dev/sda bs=1 count=64 skip=446 seek=446

实验三:新增硬盘sdb,并使用sda的mbr备份来恢复sdb的分区表
dd if=/app/mbr.img of=/dev/sdb bs=1 count=66 skip=446 seek=446

lsblk

parted 支持msdos和gpt
交互和非交互
parted /dev/sda
parted -l 列出所有硬盘的分区信息
parted /dev/sda print 列出指定硬盘的分区
parted /dev/sdb mklabel msdos 设置硬盘的分区类型
或gpt
parted /dev/sdb mklabel msdos -s 自动回答yes
parted /dev/sdb mkpart primary 1 2G
parted /dev/sdb mkpart primary 2G 4G
parted /dev/sdb mkpart primary 4G 6.5G
parted /dev/sdb mkpart extended 6.5G 21.5G
parted /dev/sdb mkpart logical 6.5G 7G

fdisk 支持msdos,在centos7中也支持gpt(不建议使用)
fdisk -l 查看所有硬盘的分区信息
fdisk -l /dev/sda 查看指定硬盘的分区信息
fdisk /dev/sdb
o 设置msdos分区表
g 设置gpt分区表(不建议使用)
m 帮助
n 创建分区
p 主分区
e 扩展分区 (请把所有空间分给扩展)
起始的扇区数 一般直接回车,取可用的最小扇区
结束的扇区数 一般用+XX K/M/G 来指定具体分多少大小的分区
q 退出不保存
w 退出并保存
t 设置分区的类型
L 查看分区的类型所对应的代码表示方式
d 删除指定分区
a 设置该分区为启动分区,或设置为非启动
p 显示分区表
u 更新显示分区起止的单位,在扇区和柱面之间切换

非交互方式
echo -e "n\np\n\n\n+1G\nw\n" |fdisk /dev/sdb &> /dev/null

gdisk 只能划分gpt分区
gdisk -l 列出所有硬盘分区表
gdisk -l /dev/sdb 列出指定硬盘的分区表
gdisk /dev/sdb 对分区进行划分
o 创建gpt分区表
m 帮助
n 创建分区
起始的扇区数 一般直接回车,取可用的最小扇区
结束的扇区数 一般用+XX K/M/G 来指定具体分多少大小的分区
q 退出不保存
w 退出并保存
t 设置分区的类型
L 查看分区的类型所对应的代码表示方式
d 删除指定分区
p 显示分区表

非交互方式 
echo -e "n\n\n\n+2G\n\nw\ny\n" |gdisk /dev/sdb

cat /proc/partitions 当前内核所加载的分区表
lsblk

对于非系统所在硬盘,内核自动更新分区表,而对于系统所在硬盘,不能直接列新,要使用以下命令
通知内核读取分区表
cenots5\centos7: partprobe (centos6不可用)
centos6:partx -a /dev/sda 添加
partx -d --nr /dev/sda7 删除

猜你喜欢

转载自blog.51cto.com/13477118/2127850
今日推荐