linux磁盘管理
磁盘管理
知识要点
磁盘的接口类型
磁盘的结构
管理磁盘的分区
正面
反面
硬盘内部
磁盘的常用接口类型
IDE
SCSI
光纤通道(价格高,高端服务器)
SATA(一般家庭,价格低,容量大)
SAS(服务器,容量相对较小,读写快,盘片转速快)
SATA
IDE
光纤
SCSI
盘面
硬盘一般会有一个或多个盘片,每个盘片可以有两个面(Side) ,即第1个盘片的正面称为0面,反面称为1面;第2个盘片的正面称为2面,反面称为3面...依次类推。每个盘面对应一个磁头(head)用于读写数据。第一个盘片的正面的磁头称为0磁头,背面称为1磁头;第二个盘片正面的磁头称为2磁头,背面称为3磁头,以此类推。盘面数和磁头数是相等的。
一张单面的盘片需要一个磁头,双面的盘片则需要两个磁头。硬盘采用高精度、轻型磁头驱动和定位系统。这种系统能使磁头在盘面上快速移动,读写硬盘时,磁头依靠磁盘的高速旋转引起的空气动力效应悬浮在盘面上,与盘面的距离不到1微米(约为头发直径的百分之一),可以在极短的时间内精确定位到计算机指令指定的磁道上。早期由于定位系统限制,磁头传动臂只能在盘片的内外磁道之间移动。因此,不管开机还是关机,磁头总在盘片上。所不同的是,关机时磁头停留在盘片启停区,开机时磁头“飞行”在磁盘片上方。
磁道
每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。关机时磁头停留在硬盘的着陆区(Landing Zone),这个着陆区以前是位于离盘心最近的区域,不存放任何数据。在后期的硬盘工艺中有些硬盘生产厂商将这个区域被移动到了盘片的外面 。在每个盘面的最外圈,离盘心最远的地方是“0”磁道,向盘心方向依次增长为1磁道,2磁道,等等。硬盘数据的存放就是从最外圈开始。
扇区
根据硬盘规格的不同,磁道数可以从几百到成千上万不等。每个磁道上可以存储数KB的数据,但计算机并不需要一次读写这么多数据。在这一这基础上,又把每个磁道划分成若干弧段,每段称为一个扇区(Sector)。扇区是硬盘上存储的物理单位,从DOS时代起,每扇区是512字节,现在已经成了业界不成文的规定,也没有哪个硬盘厂商试图去改变这种约定。也就是说即使计算机只需要硬盘上存储的某个字节,也须一次把这个字节所在的扇区中的全部512字节读入内存,再选择所需的那个字节。扇区的编号是从1开始,而不是0,这一点需要注意。
扇区
另外硬盘磁道中,扇区号是按照某个间隔跳跃着编排。比如,2号扇区并不是1号扇区后的按顺序的第一个而是第二个,3号扇区又是2号扇区后的按顺序的第二个,依此类推,这个“二”称为交叉因子。这个交叉因子的来历有必要详述一下,我们知道,数据读取经常需要按顺序读取一系列相邻的扇区(逻辑数据相邻)。如对磁道扇区按物理顺序进行编号,很有可能出现当磁头读取完第一个扇区后,由于盘片转速过快来不及读取下一个扇区,(要知道物理相邻扇区位置距离是极小的),必须等待转完一圈,这极大浪费了时间。所以就用交叉来解决这个问题。
柱面
柱面其实是我们抽象出来的一个逻辑概念,前面说过,离盘心最远的磁道为0磁道,依此往里为1磁道,2磁道,3磁道....,不同盘面上相同编号磁道则组成了一个圆柱面,即所称的柱面(Cylinder)。这里要注意,硬盘数据的读写是按柱面进行,即磁头读写数据时首先在同一柱面内从0磁头开始进行操作,依次向下在同一柱面的不同盘面(即磁头上)进行操作,只有在同一柱面所有的磁头全部读写完毕后磁头才转移到下一柱面,因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换。电子切换比从在机械上磁头向邻近磁道移动快得多。因此,数据的读写按柱面进行,而不按盘面上的不同磁道进行。 读写数据都是按照这种方式进行,尽可能提高了硬盘读写效率。
CHS
现代硬盘寻道都是采用CHS(Cylinder Head Sector)的方式,硬盘读取数据时,磁头会移动到要读取的扇区所在磁道的上方,这段时间称为寻道时间(seek time)。因读写磁头的起始位置与目标位置之间的距离不同,寻道时间也不同。目前硬盘一般为2到30毫秒,平均约为9毫秒。磁头到达指定磁道后,然后通过盘片的旋转,使得要读取的扇区转到读写磁头的下方,这段时间称为旋转延迟时间(rotational latencytime)。
一个7200(转/每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋转半圈)。平均寻道时间+平均旋转延迟称为平均读写时间。
所以,最后看一下硬盘的容量计算公式:
硬盘容量= 512字节x扇区数x柱面数x盘面数
磁盘基本参数
磁盘的基本参数
容量
转速
缓存
传输速率
平均寻道时间
固态硬盘(Solid State Disk)
MBR
MBR是什么
每个硬盘都有MBR
Master Boot Record:主引导记录
硬盘的0柱面、0磁头、1扇区称为主引导扇区(主引导记录)
MBR不会被分配
MBR大小
512字节,分为三个部分(一个扇区大小)
主引导程序:446字节(引导操作系统,有一点被破坏,那么系统无法启动)
硬盘分区表DPT:64字节
分区结束标记也叫硬盘有效标志 :2字节,固定为55AA
DPT:磁盘分区表
DPT大小64字节
★每个主分区要占用16个字节
★扩展分区也要占用16个字节的主分区空间
管理磁盘分区
常见的分区方式
主分区可以引导操作系统
一个磁盘上最多可以建立四个主分区
磁盘分区需要超过4个时
可将剩余空间作为1个扩展分区
扩展分区会占用一个主分区位置
扩展分区不能直接存储文件
划分成逻辑分区来存储文件
1个扩展分区可以划分成多个逻辑分区
dd命令数据备份
从底层复制数据
功能:从指定文件中抽取指定长度的数据
格式:dd if=输入文件 of=输出文件 bs=单位大小 count=数目
- 备份MBR
dd if=/dev/sda of=mbr.bak bs=512 count=1 [root@localhost ~]# dd if=/dev/sda of=/opt/mbr.bak bs=1 count=512 512+0 records in 512+0 records out 512 bytes (512 B) copied, 0.00348838 s, 147 kB/s
- 还原MBR
dd if=mbr.bak of=/dev/sda bs=512 count=1
跳过备份
创建10M的文件
dd if=/dev/zero of=test bs=1M count=10
Linux磁盘分区表示
Linux中将硬盘、分区等设备均表示为文件
逻辑分区从5开始!!!(1-4分配给主分区或者扩展分区)
硬盘和分区的结构
查看分区信息
fdisk命令
格式:fdisk -l [磁盘设备]
创建分区
fdisk命令建立分区
用途:在交互式的操作环境中管理磁盘分区
格式:fdisk [磁盘设备]
交互模式中的常用指令
m:查看操作指令的帮助信息
p:列表查看分区信息
n:新建分区
d:删除分区
t:变更分区类型
w:保存分区设置并退出
q:放弃分区设置并退出
[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x651a5860.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-133674, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-133674, default 133674): +50G
Command (m for help): p
Disk /dev/sdb: 1099.5 GB, 1099511627776 bytes
255 heads, 63 sectors/track, 133674 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x651a5860
Device Boot Start End Blocks Id System
/dev/sdb1 1 6528 52436128+ 83 Linux
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (6529-133674, default 6529):
Using default value 6529
Last cylinder, +cylinders or +size{K,M,G} (6529-133674, default 133674): +20000
Command (m for help): p
Disk /dev/sdb: 1099.5 GB, 1099511627776 bytes
255 heads, 63 sectors/track, 133674 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x651a5860
Device Boot Start End Blocks Id System
/dev/sdb1 1 6528 52436128+ 83 Linux
/dev/sdb2 6529 26529 160658032+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]#
partprobe命令
格式:partprobe
修改磁盘分区后不用重启,使用partprobe更新磁盘分区的变化
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
parted命令
格式:parted 磁盘或分区
[root@localhost ~]# parted /dev/sda
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32.3kB 10.2GB 10.2GB primary ext3 boot
2 10.2GB 10.7GB 535MB primary linux-swap
分区表类型
msdos
gpt
验证:
大容量硬盘(5T)
fdisk(msdos,最大支持的容量2T)
parted(gpt,)
本章总结
硬盘相关概念
主分区、扩展分区、逻辑分区
查看分区信息命令
fdisk、parted、partprobe
MBR是什么,由什么组成
dd命令有什么用
练习,破坏MBR:
1、破坏400字节
[root@localhost ~]# dd if=/dev/zero of=/dev/sda obs=1 count=400
2、破坏DPT(跳过446字节之后再破坏64字节)
[root@localhost ~]# dd if=/dev/zero of=/dev/sda seek=446 bs=1 count=64
3、破坏512字节(有效位破坏,整个硬盘无法发现)
破坏之前做一个快照,备份到另一个磁盘
dd if=/dev/zero of=/dev/sda bs=[字节] count=1