版权声明:此文章转载自infocool
如需转载请联系听云College团队成员小尹 邮箱:yinhy#tingyun.com
存储管理:一、硬盘、分区及文件系统
二、硬盘配额限制
一、硬盘、分区、文件系统
硬盘的物理概念:硬盘其实由许多的圆形硬盘片组成,按照硬盘片能容纳的数据量,分为单盘(一块硬盘里面只有一个硬盘片)或者多盘(一块硬盘里含有多个硬盘片)的硬盘。
硬盘里有刺磁头(head)在硬盘片上读写,磁头固定在机械手臂上,机械手臂上有多个磁头,可以进行读取。当磁头固定不动时(假设机械手臂不动),硬盘片转一圈所画出来的圆就是磁道。一块硬盘可能有多个硬盘片,所有硬盘片上相同半径的那个磁道就组成了柱面。
两个硬盘片上的同一磁道就是一个柱面。这个柱面也是分区时最小的单位;由圆心想外画直线,可以将磁道再细分为扇区,扇区就是硬盘片上最小的存储物理量。通常一个扇区的大小为512字节。这些就是硬盘的基本组成。
在计算整个硬盘的存储量时,简单的公式就是:柱面*磁头*扇区*512字节
分区:为什么要分区呢?因为我们必须要告诉操作系统:这块硬盘可以访问的区域是由A柱面到B柱面,如此一来操作系统才能控制磁盘的磁头去A~B范围内的柱面访问数据,如果没有指定A-B柱面为一个分区或者D-E柱面为一个分区那么操作系统就不知道该到哪里去访问数据了,分区大小的要点是:起始柱面与结束柱面。
那么分区的起始与结束柱面的信息存放在哪里呢?就是MBR(Master Boot Recorder)主引导区,它是硬盘的第0轨上的,这是计算机启动后要去使用硬盘时必须首先读取的第一个区域!它记录了所有的分区信息,以及启动时可以写入引导程序的位置。当一个硬盘的MBR坏掉时,由于分区的信息不见了,这个硬盘也可以说是寿终正寝了。
MRB一般为512Byte(字节),因此mrb仅能提供最多4个分区的记忆,这就是主分区P(primary)与扩展分区E(Extended)最多只能有4个的原因,如果超过4个分区就要使用3P+E的方式:3个主分区+一个扩展分区,再由一个扩展分区划分成若干个逻辑分区使用。
这里给一个备份硬盘MBR的命令:dd if /dev/sda /mbr bs=512 count=1 将sda硬盘的mbr备份到/mbr文件
Mbr是硬盘的第一个区域,大小为512B,dd命令可以根据设备进行备份,bs=512为备份规划的一个块的大小,如果没有指定默认为512,count=1指bs的数量。这里只备份mbr所以只需要备份第一个512B大小的区域就可以了。如果要备份整个分区:dd if /dev/sda5 /sda5,if输入文件,of输出文件。
这里一个block默认规划为了4K,所以mbr这个文件占用了一个block大小,浪费了4096B-512B的空间
文件系统:在高职系统分区所在的起始柱面与结束柱面后,随后要将分区格式化为“操作系统能够识别的文件系统”因为每个操作系统能够识别的文件系统并不相同(windows:fat、fat32、ntfs... linux:ext2、ext3...),例如windows在默认状态下就无法识别linux的文件系统,不同的文件系统有不同的数据读取方式区分。
归根结底数据时要存到硬盘中的,在硬盘(分区)中存储数据的最小单位是扇区。而扇区只有512B大小,磁头在读取的时候要一个扇区一个扇区的移动,这样160G的硬盘要分多少个512的扇区啊,磁头在读取数据时候要一个扇区一个扇区的移动,效率太低下了。所以为了解决这个问题就出现了逻辑块block的概念,block的容量是以扇区的大小为基础,是扇区大小的整数倍,512的整数倍512、1024、2096...
查看block的命令:dumpe2fs -h /dev/sda
一个文件或目录就存储在一个block或者多个中。假设block块的大小是2048B,一个文件的大小是512B,那么这个文件就占用了一个block块,其中有2048-512B的容量被浪费了。所以在划分分区的时候一定要根据使用的数据类型来规划block的大小。
现在知道了分区中是以block作为最小单位的,那么在分区中的第一个内容block中记载着这个分区中所有的block、indoe还有文件关联等信息,这个分区中第一个块被称为超级块,功能类似于硬盘中的mbr区域。
文件和目录的索引和文件的时间
文件在操作系统中分为2个元素,一个是indoe一个是block,indoe就是记录文件内容的一个指针,而block中才是文件真正的内容。操作系统在读取一个文件的时候首先要找到文件的indoe,然后根据indoe上记录的文件的block内容的位置去读取真正的文件的内容。
目录和文件类似,也具有indoe和block2个元素,目录的indoe记录了目录的block所在的位置,而目录的block则记录了目录下的文件的indoe的位置信息。这样操作系统需要访问某个文件的时候就会先去查找这个文件所在目录的indoe,通过目录的indoe去查找到了目录的block,然后从目录的block中查找到了目录下的该文件的indoe,然后在从该文件的indoe中知道了该文件的block的位置,然后去读取该文件的block块的内容,才是真正的读取了文件的内容。举个例子,我们在同一个分区中剪切文件的时候(不管多大)速度很快,而在不同分区之间剪切文件的时候就相对慢的多,是为什么呢,是因为在同一个分区中文件的block是存在的,而改变了文件的位置只是更改一下indoe的指针指向block的位置而已,所以很快。而将一个文件剪切到另一个分区,因为另一个分区并没有这个文件的block和indoe所以需要创建block和indoe,故而慢。
基本上indoe和文件的数量是对应的,当文件过大,比如一个文件的大小占用了多个block的时候,那么这个文件的indoe就指向了多个block。这就是每次安装完操作系统,空分区也会少一些空间的缘故,一方面是系统自动建立了indoe表占用了空间,一方面是系统默认有一些预留空间以防止空间不足的时候应用程序启动的时候产生临时文件而没有空间。
文件或目录有三个时间,分别是Access-time、Modify-time、Change-time,查看命令stat
linux-suse:/ # stat /test
Access: 2013-05-23 06:42:14.000000000 -0400 文件最后访问时间
Modify: 2013-05-23 06:42:14.000000000 -0400 文件内容最后的更改时间
Change: 2013-05-23 06:42:14.000000000 -0400 文件属性最后更改时间
Access-time是文件的最后访问时间,比如用test restart、vi test、cat test等访问过文件,不管内容是否改变就会有变化
Modify-time是文件内容的最后更改时间,比如用vi在文件中添加、修改内容时会改变
Change-time是文件属性的最后更改时间,比如文件的权限、位置(indoe发生变化了)、属组等发生变化话会改变
touch是创建文件的命令,但是如果对于一个已经存在的文件touch test就会更改test的三个时间到当前,多用于由于时间戳产生的系统文件无法运行,服务无法运行等故障。
在ls -l 中显示的文件时间是Modify-time
分区的操作
在linux中使用fdisk来做磁盘的分区规划等操作
使用命令为fdisk /dev/sda(磁盘设备)
进入fdisk的命令界面按h是查看帮助
主要参数:p 查看分区
n 创建一个分区P为主分区、E为逻辑分区
d 删除一个分区
w 保存
q 退出不保存
L 查看文件系统对应的ID号
例如:创建一个500M的主分区和一个1G的逻辑分区
1.添加硬盘一块
2.使用fdisk打开该硬盘
fdisk /dev/sdb
3.n创建主分区和逻辑分区(从扩展分区中创建)
4.查看创建的分区确认
5.保存w
这个First sector是分区起始柱面,Last sector是分区结束柱面。这个柱面的多少来决定分区的大小,这个分区一共可以用2048-10485759这么多个柱面(应该是5G的大小)前2048应该是用于indoe表了,所以空间柱面就从2048可以用,这个磁盘5G的总共有10485759这么多个柱面,但是我们一般不知道一个柱面是多少G或者多少M,所以我们再起始柱面的时候默认就从2048开始用(也可以从3048、5987开始用,但是这样就会造成空间使用不连续磁盘读取数据效率低了),在Last sector的时候可以用容量来表示,+500M就是增加500M的容量,让系统自己计算是多少个柱面就可以了,+1G就是分配了1G的空间。去掉“+”表示最大空间
6.刷新内核识别新增分区(如果是删除分区需要在内核中先删除缓存记录在刷新)
partprobe或者partx -a /dev/sdb
当删除原有分区在创建新分区时候要使用partx -d /dev/sdb 再用 partx -a /dev/sdb
man对于partprobe或者partx解释:
1.partprobe is a program that informs the operating system kernel of par-tition table changes, by requesting that the operating system re-read the partition table.
2.partx - tell the Linux kernel about the presence and numbering of on-disk partitions
8.挂载使用
9.开机挂载
补充:1.硬盘检测坏道命令:fsck /dev/sdb 和
2.将内存中的数据装回硬盘sync,需要在关机前多执行几次保证数据不会在内存中没回到硬盘而断电丢失
想阅读更多技术文章,请访问听云技术博客,访问听云官方网站感受更多应用性能优化魔力。