最近刚学到硬盘及分区的基础知识,就想着按照要求将其写成一篇博客,因水平有限,有错误之处,还望指出。
1、硬盘的接口类型及组成
一般的机械硬盘外部组成如图所示接口类型:
由接口传输方式不同分为:串口传输和并口传输
其中串口传输的有:
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
其中并口传输的有:
IDE:133MB/s ==>接口速率
SCSI:640MB/s ==>常见
linux中磁盘设备的设备文件命名方式:
IDE:/dev/hd#
SCSI、SATA、SAS,USB:/dev/sd#
不同设备的标识:a-z
同一设备上的不同分区的标识:1,2……
其中:主分区:1-4
逻辑分区:5-……
2、硬盘的内部组成
3、硬盘的基础概念
磁道(track):围绕着圆心的一圈圈的灰色同心圆就是磁道。
扇区(sector):从圆心向外做射线,将磁道分成一个一个的有宽度的弧形叫做扇区,扇区一般大小为512byte。
柱面(cylinder):由同一编号(位置)的磁道组成了柱面。
磁头:读取数据的关键部件,每个盘面各一个。
块/簇:逻辑上由多个(2^n)相邻的扇区共同组成的一个整体,方便操作系统对整体进行数据的读写操作,以提高访问效率。
Windows中ntfs文件系统中称为簇,Linux中ext4等文件系统中称为块。
大小均是2^n次方。
扇区:整个硬盘最小的读写单位
柱面:对硬盘进行分区的最小单位
块/簇:操作系统对硬盘进行数据读写的最小单位
4、硬盘存储容量的计算
总容量=磁头数(即盘面数)磁道数扇区数*每个扇区的大小
上图中:
盘面数:6
磁道数:7,ps:此处灰色的磁道数量为7
扇区数:12
每个扇区大小:512byte
总容量:6712*512= 258048byte
5、MBR及分区
准则:以柱面为基本单位进行硬盘分区,其中整个硬盘的分区信息都保存在0柱面0磁道1扇区的MBR里面。
下面简单介绍MBR(Main Boot Record):
MBR,即主引导记录,负责告诉计算机到此硬盘的那个地方去寻找操作系统,其中包含着硬盘的分区信息。
大小:512byte,其中包含着:
446 byte:boot loader,包含最基本的引导程序,即调用操作系统的机器码
64 byte:分区信息,其中一个分区信息为16byte,故主分区一个只能有64/16=4个,一般是3P+1E(N个逻辑分区)
在每个分区信息的16 byte中,后4个byte标志着主分区扇区的总个数,即一个主分区的扇区总个数为2^32个扇区,每个扇区512byte,则每个主分区的大小不超过2T。
2 byte:0x55和0xAA,则此设备可以用于系统启动,若不是这2个字节,则表明不能用于系统启动。
PS:当磁盘的容量大于2T时,多于2T的容量不会被MBR识别,因此当硬盘大于2T时,考虑使用GPT,一种新的分区表类型。
6、Linux中常见的分区命令
分区管理工具:fdisk、parted、sfdisk
fdisk:
特点:
1、对于一块硬盘来说,最多管理15分区
2、只能分2T以下的硬盘,若大于2T,则可以挂载整个硬盘,但是不能分区,因此此时需要使用parted命令进行分区管理。
#fdisk -l ==>列出指定所有设备磁盘分区信息
#fdisk 设备名 ==>进行分区
#fdisk 设备
子命令:管理功能
p:显示已有分区
n:new 创建
d:delete 删除
w:write,写入磁盘并退出
q:quit,放弃更新并退出
m:获取帮助
l:列表所分区ID
t:调整分区ID
分区后先查看,若内核未同步,则使用命令将分区信息同步到内核:
方式一:
查看内核是否已经识别新的分区:
cat /proc/partations
通知内核重新读取硬盘分区表:
partx -a /dev/DEVICE
不理会报错
方式二:
使用file命令:file /dev/sdb2
若结果没有block,则说明Linux内核没有同步,可使用
#partprobe ==>进行内核同步
方式三:关机重启
7、文件系统
文件系统是将文件存储于设备上一种特定的方法和数据结构。根据方法和数据结构的不同,在Linux中将文件系统分为:
ext2 、ext3、ext4、xfs
swap:交换分区,将磁盘当内存使用
光盘:iso9660
文件系统的格式化工具
在对硬盘分区后,我们往往对分区进行格式化,使分区变成我们想要的文件系统,以便存储文件。
在Linux中的格式化命令:
#mkfs.FS_TYPE -L '卷标' /dev/分区名称(不能使扩展分区)==>此步骤将某个分区以FS_TYPE进行格式化
其中FS_TYPE常见的类型有:
ext2
ext3
ext4
xfs
btrfs
vfat
另外ext2、3、4文件系统的专用格式化命令:
mke2fs -t [ext2|ext3|ext4] -L '卷标' /dev/分区
#blkid 分区 == >格式化后,用于查看此分区的信息,例如(格式,卷标,UUID等)
[root@centos ~]# blkid /dev/sdb5
/dev/sdb5: LABEL="i am ext4" UUID="0fe92389-239a-417b-a679-2f32ac98865f" TYPE="ext4"
#e2label DEVICE_NAME 'LABEL_NAME' ==>更改设备的label
当我们感觉到系统中的swap分区不够用时,可以进行swap分区的扩展。
#mkswap /dev/分区 ==>创建swap分区
前提:在此分区的分区ID号必须得是82,即Linux swap
文件系统的检测工具
fsck_FS_TYPE 或fsck -t FS_TYPE
注:FS_TYPE一定要与分区上已有文件类型相同
ext专用修复工具:
e2fsck -f DEVICE_NAME. ==>强制修复DEVICE_NAME
8、文件系统的挂载
当文件系统格式后,我们可以通过将其与系统上的某个目录关联,通过目录进行文件系统中文件的访问,‘关联’这个动作就是挂载。
注:当目录中有文件时,挂载后,文件暂时隐藏,卸载后,文件恢复
相关命令:
#mount DEVICE_NAME MOUNT_POINT
其中device可以为:
1、设备文件 /dev/sda5
2、卷标:-L 'LABEL',例如:-L 'MYDATA'
3、UUID,-U 'UUID',例如:-U 'xxxxxxxxxxxxxxxx'
4、伪文件系统:proc,sysfs,devtmpfs,configfs
mount常用选项:
-a : 自动挂载/etc/fstab里面的设备
-L ‘LABEL’ :以卷标指明要挂载的设备
-o OPTION
OPTION的选项,用此规定要被挂载的文件系统的一些属性,例如:只读,异步……
async : 挂载使用异步模式
sync:同步模式,内存中数据改变后,会立即保存到硬盘中,异步是不立即改变。
atime/noatime:每一次访问文件都会更新时间戳/不更新,包含目录和文件。
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载
exec/noexec:是否支持将文件系统上的应用程序运行为进程(运行程序为进程)
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:
remount:重新挂载
ro:只读
rw:读写
user/nouser:是否允许普通用户挂载此设备
acl:启用此文件系统上的acl功能
默认(defaults):相当于 rw, suid, dev, exec, auto, nouser, async
#umount DEVICE/MOUNT_POINT
卸载时2选一即可�
交换分区的挂载
当我们使用命令mkswap将分区设置为swap格式后,然后需要将swap分区挂载后才能正常使用。
命令:
swapon /dev/DEVICE ===> 将swap格式的分区进行激活
swapon -a DEVICE_NAME :将设备上所有的swap分区全部激活
swapoff /dev/DEVICE ===> 将swap格式的分区进行休眠