存储管理

机械硬盘:

track:磁道,

sector:扇区,512Bytes,现在所说的扇区,实际上是平均值;

cylinder:柱面,从磁道向所有盘片做投影

partition:分区,分区就是基于柱面来划分的存储空间

head:磁头,每个磁盘表面都有一个磁头;


设备文件:/dev

设备文件是关联到硬件设备的驱动程序和设备的访问入口;


设备号:

major:主设备号,区分设备的类型,用于标明设备所需的驱动程序;

minor:次设备号,区分同种类型下的不同设备,是特定设备的访问入口;


mknod命令:

mknod - make block or character special files

mknod [OPTION]... NAME TYPE [MAJOR MINOR]


设备类型:

块设备:用于随机访问的设备,数据存储和交换的单位是块;

字符设备:用于线性访问的设备,数据的交换单位一般是字符;


设备文件名:IANA-->ICANN 

/dev/

IDE:hd[a-d]

SCSI/SATA/SAS/USB:sd[a-z]


RHEL6、CentOS6开始:

所有的接口类型的硬盘设备统一命名为sd[a-z]


设备引用方式:

设备文件名

卷标(Volume Lable)

link

UUID:全局唯一标识符,128bit


如何使用一个新的硬盘设备?

分区

创建文件系统(格式化)

挂载分区


为何分区?

1.优化I/O性能

2.实现磁盘空间的配额限制

3.进行高速修复

4.隔离系统文件和其他程序文件

5.安装多个操作系统


如何分区?

MBR:硬盘空间小于2TB

MBR:Master(Main) Boot Record, 主引导记录,起源于1982年,

0磁道0扇区:512Byte

446Bytes:boot loader,引导加载程序,GRUB

64Bytes:partition table,分区表,每16Bytes表明一个分区的内容;因此一共有四个主分区;

注意:

1.主分区+扩展分区,最多可以有4个,其分区表位的编号依次为:1,2,3,4

2.逻辑分区的编号从5开始,不管前面的四个数字编号是否被占用;

2Bytes:结束标记,55AA


GPT:硬盘空间大于2TB

GUID Partition Table,GUID分区表,支持128个分区

UEFI(统一扩展固件接口)的硬件可以支持GPT  Boot Legacy


通常使用的分区工具:

fdisk:

用于创建和管理MBR分区,对于一块硬盘,最多只能管理15个分区;


gdisk:GNU disk

用于创建和管理GPT分区,


如果使用fdisk或gdisk命令对于已经有分区并挂载的磁盘的剩余空间进行再次分区,分区的信息即便是保存了,也不会被内核重新读取;如果要让内核识别此类分区:

1.重启计算机;

2.partprobe命令或者partx命令,强制内核重读分区表;

CentOS5/7:partprobe -a [device] 如果省略了设备名,则表示重读所有磁盘的分区表

CentOS6/7:partx -a [device]

kpartx -af [device]


fdisk分区示例:

fdisk - Partition table manipulator for Linux


fdisk -l [device...]

查看指定磁盘的分区表,如果省略device参数,则显示所有磁盘设备的分区表;


fdisk device

对于指定设备进行分区管理;


fdisk子命令:

d   delete a partition

l   list known partition types

m   print this menu

n   add a new partition

e   extended

p   primary partition (1-4)

l logical 


p   print the partition table

q   quit without saving changes

t   change a partition's system id

w   write table to disk and exit


parted:GNU

高级分区工具,实时生效;

parted - a partition manipulation program


parted [options] [device [command [options...]...]]


parted /dev/sdb mklabel gpt|msdos

parted /dev/sdb print

parted /dev/sdb mkpart primary 1 200

parted /dev/sdb rm 1


~]# echo '- - -' > /sys/class/scsi_host/host2/scan

强制内核识别在开机状态下插上的SCSI接口的磁盘



创建文件系统:

FHS /bin /dev /etc

权限

文件的命名规则


为什么要创建文件系统?

一百万册图书

平面分类管理

想要搜索需要的图书,需要遍历;

空间分类管理

门类

几次有限的但有效的查找即可;


创建文件系统实际上就是给分区进行存储空间的逻辑编址;


格式化:

低级格式化:

物理层面完成格式化,在磁盘设备出厂时,通过低级格式化来创建磁道;

主要作用:划分磁道


高级格式化:

分区之后进行,

主要作用:用来创建文件系统,为分区构建逻辑编址单元,簇,块

无论是簇还是块,都是将一个或多个扇区组织在一起,共同完成数据存储;

簇:512B 1024 2048 4096 8192 16384 32768 65536

块:1024 2048 4096


注意:

1.一个块只能放置一个文件的内容,一个文件可以占用多个块;

2.如果在某个分区中,将创建大量的小文件,把块划分的小一些;反之,块就大些

3.如果分区空间比较大,块也应该大一些;


在一个分区中创建了文件系统:

首先,会将分区划分成大小相等的若干块;

元数据块

元数据——inode(index node)

文件的属性:

文件大小

文件权限

文件所有者

文件时间戳

数据块指针


存放元数据的固定的存储空间,称为inode;


每个inode都有其对应的inode编号


数据块

存放文件中所包含的流式数据


特殊文件:

设备文件:block special 或 character special

仅仅是将元数据中的数据块指针换成了设备号

符号链接文件:symbolic link

仅仅是将元数据中的数据块指针换成了另一个文件的访问路径;


这类文件只占据元数据区域,没有数据块占用;


随着磁盘空间越来越大,划分的块的数量也越来越多,管理起来很不方便


划分块组可以解决该问题


块组:

每个块组中有独立的元数据块和数据块

存放数据的时候,以块组内的数据块优先选择,如果块组内的数据块不够,可以通过存储策略来请多个块组协同存储;


超级块:

主要定义了有多少个块组,以及每个块组的边界。


为了防止超级块发生故障倒置整个文件系统崩溃,对超级块进行冗余备份。


日志块:

对于数据的写入操作做记录的块;


防止数据不一致;


数据不一致通常都是由不洁关机,不洁断电导致;


一个完整的文件系统:

超级块,inode,inode bitmap,block bitmap,data block,journal block


想要查找/var/log/messages文件的内容,是怎样的过程?


首先查找/目录inode编号,从元数据区域中找到对应inode,再读取inode中的数据块指针,找到存放/目录内容的数据块;

然后,在数据块中查找名称为var的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存var目录内容的数据块;

再然后,在该数据块中查找名称为log的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存log目录内容的数据块;

之后,在该数据块中查找名称为messages的文件名,如果有,就定位其inode编号,再到元数据区域总查找对应编号的inode,再根据数据块指针找到messages文件对银的数据块,就可以读取数据;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章