1磁盘管理
1.1硬盘的构造原理
硬盘分类:
机械式硬盘,固态硬盘
硬盘出厂会进行低级格式化,分磁盘,再分扇区,硬盘的第一个磁道的一个扇区就是MBR 512Bytes
Master boot record
446 bytes bootloader主引导程序
64bytes:主分区存储16bytes表示一个主分区,最多4个主分区
2bytes:magic number表示mbr是否有效
硬盘的注意事项:
a)1.硬盘需要绝对的无尘环境,生活环境拆开,硬盘基本上就是挂掉的
b)2.硬盘的外圈读写速度较快,C盘一般在外圈,因此一般把系统安装在C盘
c)3.机械硬盘是盘面不端旋转,磁头固定读取数据
硬盘组成:
a)圆形的盘片(存储数据)
b)机械手臂(旋转读取数据)
c)主轴马达,转动盘片,让这个机械手臂来读取数据
硬盘构造原理:
a.硬盘由多个盘片组成,每个盘面都有一个磁头,所以磁头数决定盘面数。一般读写数据都是几个磁头同时进行,这样速度会比较快
b.盘片划分成多个磁道,外圈…中圈….内圈..每个盘面从外圈向内圈编号,具有相同编号的磁道就形成一个圆柱,称之为柱面
c.磁盘上的每个磁道被等分为多个弧段,这些弧段就称为磁盘的扇区,扇区是存储的最小单位512bytes
d.多个扇区组成磁道,多个磁道组成柱面,柱面是分区的最小单位。
e.g:Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
硬盘的容量=柱面数*磁头数*扇区数*512B。
每个柱面通过255个磁头来控制,每个磁头控制63个扇区,所以一个柱面的大小为
255*63*512=8225280 bytes
这里就有个问题,扇区肯定是外围磁道的大,就是相对面积大,但是为什么磁盘做成一样的大小的呢?
a)磁头单位时间内读取的字节数是一定的;
b)不管是在这个外圈中圈内圈单位时间扫过的扇区数量是一样的(角速度一样)单位时间略过的面积是不一样(线速度不同);
c)基于前面的两点,扇区的容量不是按照这个面积作为衡量标准,而是单位时间能够读取的字节数来决定的,所以每个扇区的存储容量做成一样是最合理的
硬盘的代号和分区关系:
SCSI USB SATA FLASH接口的磁盘
/dev/sd[a-p][1-15]a-p是硬盘数量,1-15是分区的数量
IDE接口的磁盘
/dev/hd[1-p][1-63]
逻辑分区:
1)主分区和扩展分区最多只能有四个(硬盘的限制)
2)扩展分区最多只能一个(操作系统限制)
3)逻辑分区是通过扩展分区分出来的
4)扩展分区是无法使用的,是不能被格式化分区,能够使用的是逻辑分区
5)逻辑分区数量是和这个操作系统有关系的,linux中的IDE最多有59个逻辑分区,1-3是主分区4是扩展分区
6)这个SATA USB SCSI硬盘最多有11个逻辑分区。
2文件系统
Linux文件系统支持的类型:
基本文件系统:Ext2, Ext3, Ext4, Reiserfs(支持小文件), xfs(支持大文件), btrfs, JFS, vfat(支持WindowsFAT32), NTFS
交换分区:swap
集群文件系统:GFS2(全局文件系统), OCFS2
网络文件系统:NFS, smbfs(CIFS) Common Internet File System
光盘:iso9660
分布式文件系统:ceph
moosefs, mogilefs, hdfs, gfs, glusterfs
(1)日志型文件系统:
非日志型文件系统:ext2
日志型文件系统:ext3
(2)swap:交换分区
VFS(virtual File System)的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。
文件系统是通过一层VFS(virtual file system)层来屏蔽所有的文件系统的差异,提供统一的调度接口给用户使用,让用户操作每个文件系统都是一致的。
vfs详解:
cpu有4个级别
ring 0内核运行级别内核空间(内核模式)
ring 1 2历史原因,没有使用
ring 3进程运行的级别(用户模式用户空间)
文件系统是操作硬盘硬件,因此要在内核空间下进行system call,功能调用接口
vfs弥合了所有文件系统的不同之处,提供一个统一的调用接口给程序的开发者
#查看系统支持的文件系统
#说明这些是内核有装载的内核模块,以后要新增文件系统类型,需要自己去装载模块
2.1linux Ext2和Ext3文件系统的特性分析(非常重要)
文件系统:分区--格式化成相应操作系统支持的文件系统格式。
分区就是文件系统,文件系统是一个分区?这句话在传统时代是没问题的。
不过现在有了这个lvm raid技术,一个分区可以再逻辑的分为多个分区。所以现在一般认为是一个可以挂载的数据文件为一个文件系统,记得dd一个磁盘镜像么,它也可以单独格式化成相应的文件系统,然后挂载。
现在就开始介绍这个linux的ext2文件系统是如何来运行的,怎么记录文件的权限等元数据和存储真实数据的。
主要有下面的集中存储数据的块:
1.data block:实际存储数据的块
2.inode:存储数据的元数据(权限,时间戳,文件大小,block存储位置等)
3.super block:主要记录block inode的总量和已使用量,和文件系统的格式等一堆相关信息,dump2fs可以查询
4.inode bitmap:利用bit来记录这个inode是否已经使用了。
5.block bitmap:利用这个bit来记录这个block是否已经使用了
linux文件系统和windows的fat,ntfs系统对比
a.linux文件系统是利用这个索引文件查找方式,所以一个inode记录的数据库都可以快速查找到。相当一下指向所有block的存储位置,这样就可以马上进去数据的读取。
b.FAT格式的系统是利用链表的形式来读取这个数据,所以要第一个读取了才能知道下一个数据在哪里,效率比较低。
c.这就涉及到这个磁盘碎片整理了,假如FAT格式的文件系统读写太频繁,这个数据比较乱,可能盘片需要旋转很多圈才能读取到,很正常。但是linux的ext2系统就不需要这样,索引方式一次遍历就能全部找到可能有时会有点分散,还是需要一定寻道时间。
综上可知:
A.windows下的NTFS和FAT一般使用一段时间后需要进行这个磁盘碎片整理;如果这个文件系统分区存储的数据比较少,建议备份,然后重新格式化,这样可以减少这个读写次数,保护磁盘;
B.linux系统不需要磁盘碎片整理;
inode详解:
一个文件占用一个inode
inode记录了文件数据存储的data block块位置,各类权限,时间戳,文件大小等元数据
inode的大小为128bytes
由于一个磁盘过大,一般会把一个分区分成多个block group,每个组都有一套inode,data block
inode bitmap,block bitmap
superblock: block和inode的总量
block和inode的使用量,为使用量自然就可以算出来剩余量
block块大小
block gourp组个数
superblock只有部分block group中有,一般是1 3 5 7 9包含,备份
GDT:第一个block bitmap所在的block号
第一个inode bitmap所在的block号
第一个inode tables所在的block号
group中空闲的block总数
group中空闲的inode总数
目录数
block的大小为1024bytes 2048bytes 4096bytes
block大小102420484096
最大的单一文件限制16GB256GB2TB
最大的文件系统容量2TB8TB16TB
由于一个文件占用一个inode,因此创建的文件数量要小于等于inode的数量
由于inode里面有存放这个data block的位置,存放单个block num要4bytes,但是inode的大小是固定的128bytes,因此inode做成了多重索引的形式,12个直接索引,1个间接索引,1个双间接索引和1个三间接索引.
假如block=1K,则单个文件最大支持多少?
直接:12*1K(一个直接索引放一个block)
单间接=256*1K=256K
双间接=256*256*1K=64M
三间接=256*256*256*1K=16G
一个block可以存储block num 1024/4=256个
2K 4K由于文件系统的限制,无法这样计算。
通过stat来查看这个文件的属