硬盘信息

  机械一个盘的最小物理单位是扇区,扇区就是柱面和从圆心向外发射线切割而成的最小块,大小为512byte,如此一来一个硬盘分区就将有无数个删除,对于数据量太大,操作系统无法基于扇区寻址(数量太多了),因为存储数据指针的空间长度有限,存不下这么多扇区长度,于是操作系统就将相邻的若干个扇区归结在一起,形成所谓的“簇”,如此一来,就有若干个“簇”,“簇”的个数等于扇区总数除以每个“簇”所占的扇区。对于windows文件系统而言,一般一个“簇”会占用2、4、8、16、32或64个扇区,操作系统就是基于“簇”来进行寻址。比如我的电脑文件系统为NTFS,“簇”的大小是4k,所以每个“簇”就占用了8个扇区。有时候我们也把“簇”叫做数据块。一个文件如果小于4k,那么他将占用一个“簇”,如果大于4k他将占用若干个数据块。这也就是为什么,在电脑上面新建一个txt文件,里面只存两个字他也要占用4k的原因。

  操作系统每次读取一个或者多个数据块。每个块只能存放一个文档数据,Linux亦是如此。

  操作系统的块是操作系统的块,Oracle的块是Oracle的块,二者不能混为一谈,但是二者是相关联的。

  对于数据库,Oracle,由于我才疏学浅,只是对Oracle相对较熟悉,SqlServer和MySql不是很熟悉,所以仅仅针对Oracle来说。不过其他的数据库大致原理我想应该也差不多。我们平常说所的Oracle数据块,他是占用了N倍操作系统的数据块,N是偶数(1除外),Oracle的数据块大小可以是4k,8k,16k,32k,64k,也就是那个db_block_size的值,通过select value from v$parameter where name=‘db_block_size‘语句可以查询出来(需要DBA权限才能看到),我机器上是8k,也是Oracle的默认块大小,既然是8k,就是操作系统“簇”的2倍,这样做的用意何在?这就得从数据查询的角度来看,Oracle每一次读取最少一块,数据没沾满一块也要读取一块,这个操作系统的读取都一样。我们都知道查询分为2中,一种是全表扫描的方式,把整张表的数据全部读取,这样就为了减少IO次数,就需要块越大越好,另外一种是索引查询,因为索引查询IO次数非常少,我们希望每次读取的块大小跟操作系统的块大小一样就够了(排除海量数据,海量数据需要表分区,同时块也不能太小,太小索引B树层次太多),这样就很矛盾,对于不同的情况,有时候希望大些,有时候希望小些,所以折中8k比较合适。

  题外话,数据库块也称作数据库“页”。比如平常对MySql所谓得表锁,行锁,页锁,这个页锁的页就是数据库块。Oracle没有页锁这个概念。只有表锁和行锁,并且Oracle的行锁跟MySql还不太一样,Oracle的行锁开销其实相当小。不像MySql行锁开销很大,竞争很大,死锁也很多。这也能说明Oracle技术强大的原因。

  上面的情况是针对一般的情况而言,但是对于不同用途的表,我们需要建立不同块大小的表。通俗点来说,我们平常的CRUD表就因为经常变动,也经常通过索引查询,所以需要块小一点,而对于仓库表,用来做数据分析,统计的仓库表(通常是全表扫描),用作日志的表(通常不停的往表里面写数据,一般不用查询),这种类型的表就需要块比较大,毕竟越大,IO次数越少。也也就是所谓的数据库优化的一个方面。比较专业的说法是这两种类型的表称作:OLAP和OLTP。

  上面将操作系统和Oracle数据库的块分别解释了一下,接下来继续说操作系统的块。操作系统的块按照起存放的数据不同其实又分为2种,一种是索引块,一种是数据块,此针对NTFS和Linux的Ext2这些文件系统。他将文件属性和权限(比如Linux有rwx权限,拥有者,群组,时间参数等)和数据分别存放在索引块和数据块,名字叫做inode block与data block中,inode存放有data block的地址。通过找到inode来对data block寻址,速度快,并且如果data block不连续,也能够一次性读取出不连续的块的内容,这也就是为什么NTFS和Ext2这种文件系统整理碎片之后和之前效果差不多,FAT不一样,FAT就需要整理碎片,因为他不是通过索引来读取数据的,有点类似链表结构。其实说操作系统文件系统有2种块还不够全面,分区开头还有一种超级块super block,存放整个分区的信息,比如用量,剩余量,扇区数量等等。分别称这3种类型为inode,block,super。并且inode和block大小是不一样的,在Linux下面inode是128byte,而block可以划分成1k,2k,4k这几种类型,super是1024bytes,当然看情况划分,分的太小,对于大文件inode会存在读取性能问题,分的太大,对于很多小文件造成对空间的浪费。这里的inode其实才用的多级处理方式来记录文件所占块编号的。这个super并不是磁盘开头的MBR区域。MBR区域是存放整个磁盘的信息的,super只是存当前分区信息的。MBR(Master boot record)主引导记录,一般是512byte,而这个区域可以分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。他是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。对于文件太大的情况,存放在磁盘上是相当分散的,虽然说索引技术可以一次性读取出来的,但是由于在硬盘上分散的太过于散开,机械手臂移动幅度会很大,那么也会影响读取性能。

  每个文档或者目录都会占用一个inode,用来记录文件或者目录所占的所有块地址。前面说了inode是通过分级存放数据块编号(说地址不准确)的。

  再说数据库索引,我们所谓的通过索引找到索引结构的根,再一层一层往下找到数据,那怎么找到根的呢,其实就是通过文件系统索引块来找到跟块,然后跟块再一层一层往下找。跟块就不用在通过索引来找下一个节点块,因为没必要,跟块里面直接存放了下层节点的地址。

硬盘信息

时间: 2024-08-26 10:04:51

硬盘信息的相关文章

学习笔记:硬盘信息查看与检测

mkfs:make file system -t  fstype mkfs -t ext3 /dev/sda4 (其中默认5%预留给了管理员用户) mkfs -t ext2 =mkfs.ext2 mke2fs:专门用来管理ext系列的文件系统,选项多 -j :ext3 mke2fs -j /dev/sda4 -b block_size:指定块大小(默认4096,可用取值1024,2048,4096) 若文件小多,可以用1024或者2048 mke2fs -b 2048 /dev/sda4 -L

amazon免费服务器12个月、linux查看硬盘信息命令

亚马逊免费服务器12个月:AWS免费套餐-AWS云服务  申请成功了! http://aws.amazon.com/cn/free/(有点麻烦的是要接听一个英语的电话,要填信用卡,验证时会冻结1美元,可能到时会退,期待中).有1GB可以使用.后面,再看说明即可. https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/putty.html 如果申请多个实例,每月按总小时来算的,超过就可能会自动扣款.不用时,可以停止. 如何在Amazon

linux学习笔记二:硬盘信息查询

在linux管理中,硬盘管理是很重要的一部分.包括阵列,分区,逻辑卷等操作,在对硬盘操作前,需要充分的了解硬盘的信息.常用的硬盘查询有以下几种: 1.df  查看文件系统空间使用情况: linux-lszd-db:~ # dfFilesystem     1K-blocks     Used Available Use% Mounted on/dev/sda6      809262496 37615092 770825244   5% /udev             8076412    

Linux通过命令查询服务器型号、主板、CPU、内存及硬盘信息

测试环境: Dell服务器 CentOS 6.4 主要使用到的命令: dmidecode.cat.megaCli64.df 查询服务器型号: dmidecode -t 1 查询主板信息: dmidecode -t 2 查询CPU信息: 查看CPU型号 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 查看CPU物理个数 cat /proc/cpuinfo |grep "physical id" | sort | uniq | w

Java如何获取系统cpu、内存、硬盘信息

1 概述 前段时间摸索在Java中怎么获取系统信息包括cpu.内存.硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插件进行获取.下面列举出了这两种方式获取系统信息的方式及代码. 2 使用Java自带包获取系统信息 2.1 使用Java自带包获取系统信息代码如下: 2.1.1 Bytes.java public class Bytes { public static String substring(String

megacli 查看Raid卡和硬盘信息

megacli的安装 通过如下链接 http://down.51cto.com/data/2042596 或者 http://pan.baidu.com/s/1eQ2FeHc 下载至windows本地桌面,然后在linux命令行用命令:rz -be ,在弹出的窗口中选择刚才下载的压缩包(注意不要勾选已ASCII码方式传送文件) tar xf megacli-8.02.21-1-mdv2012.0.x86_64.rpm.tar rpm -ivh megacli-8.02.21-1-mdv2012.

【裸机装系统】获取硬盘信息失败,请谨慎操作!

公司新买了两台服务器,需要安装操作系统. 我在安装其中一台进PE时,提示“获取硬盘信息失败,请谨慎操作!” 研究了半天,网上说是因为磁盘设置了RAID,于是我把RAID删除.按CTRL+R键到配置RAID的地方,有如下提示,如图 找了半天将RAID删除 删除RAID后,没有了上面的提示,可是PE依然提示“获取硬盘信息失败,请谨慎操作” 同事说要不用光盘引导安装,于是我拿了张光盘刻录了一个镜像,也还是不行,报下面的错误: 既然光盘也不行,我把BIOS的参数也都看了几遍,实在是没辙了,于是找公司买服

MegaCli查看物理硬盘信息及zabbix告警介绍

参考:https://www.cnblogs.com/heaven-xi/p/9618078.html 1.MegaCli 监控主要是通过MegaCli 软件获取到物理主机的read及硬盘相关状态信息.然后通过zabbix的自定义报警进行监控. MegaCli是一款管理维护硬件RAID软件,可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid 上各磁盘状态,等等. 通常,我们对硬盘当前的状态不太好确定,一般通过机房人员巡检来完成,有没有通过软件的方式来检

java获取cpu、内存、硬盘信息

1 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息. 下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files 解压压缩包,将lib下sigar.jar导入eclipse的CLASSPATH中,再将sigar-x86-winnt.dll存入Java的bin目录即可. 2 代码示例 /**    * @