第十章 磁盘管理
10.1 磁盘基本概念
我们知道,日常中我们的台式机、笔记本电脑上的磁盘都会有几百G的容量,这种磁盘一般都是机械磁盘,即使用一些精密的机械部件组成的磁盘。而近几年来,越来越多的笔记本电脑中内置了固态磁盘,固态磁盘又称SSD磁盘。
SSD磁盘的是使用存储芯片提供空间,可以想象成类似于U盘一样,也是芯片式存储。SSD的特点是空间越大读写性能越好,所以SSD正在慢慢向PC机主流磁盘的应用发展。但是由于其成本、价格较高,且故障率高、寿命低等缺点,暂时不适合于应用在大型数据中心或磁盘阵列的环境中。本章我们还是以机械磁盘为主要的介绍对象。
10.1.1 磁盘结构
机械磁盘,顾名思义,是由机械组件组成的磁盘,它主要的储存空间是由盘片提供的。盘片是一个圆形的薄片,样子类似于小一号的光盘,现今使用的材质一般是铝材料的金属或石英玻璃。盘片表面会均匀的分布一次带有磁性的磁介质,可以想象成一层极细的磁性粉末,磁盘通过控制、识别磁介质的磁性不同,来区分0、1二进制数字。盘片的一侧表面称为一个盘面。盘面上的磁介质会按照一定的规则排列成一个一个的同心圆结构,每个同心圆称为一个磁道。每个磁道又被划分成多个小的弧形,称之为扇区,为了便于管理,每个扇区都会被加以编号,编号是从0开始计数的。如下图:
这里值得解释的是,每个扇区上存储的数据大小是固定的,都是512B(字节),无论是内层磁道上的扇区还是外层磁道上的扇区,无关长短如何,存储的容量都是512B。
而一块磁盘上的第一个扇区,即0号删除,被称为磁盘首扇区,英文MBR,虽然只有512B,但上面存放着本分区的分区表和引导程序相关信息。(关于引导程序的概念,会在后续章节讲解)
磁盘盘片的正面是由各个磁道组成的,那么侧看图是什么样的呢?请看下图:
如图所示,磁盘的侧面是多个盘片的罗列,其实不同的磁盘盘片数量也不尽相同,比如笔记本电脑的磁盘和移动硬盘的磁盘,可能只有一个盘片,台式机磁盘由于尺寸比较大,里面可能会有1-3个盘片不等。我们为了便于读者理解,这里以3个盘片为例讲解。其中3个盘片罗列以后,中心会有一个中轴贯穿,连接一个电机,带动3个盘片同时转动,而盘片之间由磁头读写数据,多个磁盘的一侧共连一个杠杆,也连着一个电机,控制磁头左右移动。由此,我们可以想象的到,盘片在转动的同时,磁头左右移动,就能够读写到所有盘面的任何位置的数据了。
再者,由于所有磁头是在同一条垂直线上的,所以,当一个磁盘定位到一个盘面的某个磁道时,其他所有磁头也都定位到了相应盘面的对应磁道上了。这样,我们可以想象一下,假设把上下所有磁头定位的磁道连贯起来,就会形成一个圆柱体的样子,称之为柱面。其实磁盘在进行存储时,是按柱面为存储顺序的,写满一个柱面再写入另一个柱面,这样所有磁头可以同时工作,效率较高。
了解了磁盘的机械结构,我们再来分析一下磁盘盘片的转速,一般盘片中轴所连接的点机会有不同的转速,分类来讲有如下三种:
1)低速磁盘 5400r/m(转每分钟) 常用于笔记本硬盘、移动硬盘
2)高速磁盘 7200r/m 常用于台式机硬盘
3)服务器磁盘 10000r/m 15000r/m 普通服务器常用
我们知道,有了磁盘,我们还要给它做分区,再格式化分区,才可以使用。那么分区的格式化分几种类型呢?一般也分为三种,如下:
1)快速格式化 仅清空分区数据,无修复功能,简称
快格
2)高级格式化 可以修复逻辑坏道,简称高格
3)低级格式化 可以标记物理坏道,简称低格
如上图可见,下侧点中“快速格式化”,即是快格,去掉“快速格式化”前的√,即是高格。windows和Linux系统内本身是不支持低级格式化的。
再来解释一下坏道问题。磁道上某块小区域,由于磁头的长期读写,可能会造成磁介质的排列不规范或磁性紊乱,造成无法正常读写,那么使用高格可以修复这些逻辑坏道,使其重新按照正确格式排列或磁性梳理正确。而物理坏道则是由于磁头的长时间磨损或收到磕碰、震荡等,致使磁道上某块区域磁介质丢失或失去磁性。这种物理坏道是无法修复的,只能使用特殊的工具软件,通过低格后标记出来,让磁头读写到这里时跳过坏道区间,继续向下读写。如果一块磁盘的物理坏道过多,则建议丢弃掉,因为坏道多会对磁头读写速度造成极大影响,并容易产生程序的数据丢失,致使电脑进场出现蓝屏现象。
另外,在Linux中,制作文件系统的概念即是格式化的意思。下面的章节中将频繁使用“制作文件系统”的称谓来替代“格式化”。还有分区的概念,对于已经格式化好的、可以使用的分区,我们也可以称之为文件系统。
10.1.2 磁盘分区类型
在Linux系统中,磁盘有两种使用方式:标准分区(又称基本磁盘)和LVM逻辑卷管理(又称动态磁盘)。我们将在下一章重点介绍LVM的管理,本章首先来介绍标准分区的原理。
磁盘的标准分区方式,分区时有以下三种分区类型:
1)主分区:允许装系统的分区,一块磁盘最多允许分4个主分区
2)扩展分区:不可以直接使用,即不允许存入数据;占主分区的一个名额
3)逻辑分区:必须建立在扩展分区之内,仅用于存数据,不支持安装系统,允许划分多个
可以想象,如果一块磁盘已经划分了4个主分区,但仍然有空闲空间,那么剩余的空闲空间是不允许再分分区的,因为4个主分区的名额已满。所以,一般磁盘的使用方案是:3主 1扩, 扩展的基础上创建多个逻辑分区。即创建3个主分区,磁盘剩余空间都划分给一个扩展分区,这样4个主分区的名额用满。进而再在扩展分区内划分多个逻辑分区
10.1.3 磁盘接口类型
之上,我们介绍完毕了磁盘的内部结构和分区方式,那么磁盘连接到主机时,接口是有如下几种的:
IDE,并口,已基本被淘汰
SATA,串口,PC机主流
SAS,串口,服务器主流,磁盘转速可达10kr/m、15kr/m,与SATA接口可兼容
SCSI,串口,小型机或大中型磁盘阵列使用
10.1.4存储设备分类
按照设备存储数据方式划分,有块设备和字符设备之分:
块设备,就是在空间使用时允许不依次、连续的使用空间,比如:某个分区中创建了f1、f2、f3,我们可以想象,这三个文件本来会在磁盘上依次连续的占用空间,但是当我们把f2删除后,f1和f3之间就会产生空间的间隙,所以若一个分区使用时间过长,势必会有很多类似的空闲间隙。这种使用空间时允许不依次使用,允许有空闲间隙的设备,我们称为块设备,所以磁盘就属于块设备类型。
ls -l ---显示第一个字符为 b,即表示块设备
字符设备,它要求空间使用必须连续,不允许有空闲间隙,比如磁带设备。
ls -l ---第一个字符为 c ,即表示字符设备
10.2 fdisk磁盘管理
10.2.1 分区表查看
我们可以使用命令fdisk -l 查本机磁盘的分区表信息,显示的结果如下图:
单词解释:sector 扇区 byte 字节
显示信息介绍:
第一行可见本机连接磁盘的名字和总容量
下侧显示具体分区表,其中 start、 end表示该分区的开始、结束扇区号
blocks列表示分区大小,单位KB。
ID system两列表示该分区的文件系统编号和类型,即是格式化类型,显示的是 83 linux,表示ext4文件系统
sda4的system列会显示为 extended,表示其为扩展分区,start和end占据了所有的剩余空间
sda5、sda6的start、end是在sda4范围内的,说明是逻辑分区。
通过sda4、sda5、sda6的blocks列信息,可计算出本块磁盘未做分区的空间大小。
注:在RHEL7.0之前版本,fdisk -l 显示中会有柱面(cylinder)的显示,start、end表示开始、结束柱面号。
除了fdisk –l 命令,我们还可以使用lsblk命令查看块设备的分区信息。如下图:
查看已挂载分区的使用信息,使用的是df -h 命令,其中-h参数表示按照合适的单位显示空间大小,若不加-h参数,显示时是以k作为单位,换算到M、G比较麻烦。
显示结果中有很多非分区的信息,仔细看会见到文件系统列中好多都包含tmp字符,tmp是template的缩写,即临时空间,是Linux系统使用的一些缓存、临时等空间,我们暂时不用关注,主看/dev/下的各分区信息即可。
10.2.2 fdisk分区工具使用简介
之前,我们使用fdisk -l 查看到本机有磁盘/dev/sda,已经划分了6个分区,通过blocks列又得出扩展分区sda4共大约7G容量,sda5、sda6各占用约2G,那么sda4中还剩余约3G未用,下面我们来针对这3G的空间做分区管理。命令如下:
fdisk /dev/sda ---使用fdisk工具,对磁盘进行分区管理,
回车后进入fdisk菜单界面,会要求输入操作命令,但是具体有哪些命令我们并不知道,按照括号中的提示,输入m,现示帮助,即所有可用命令的列表,如下图:
其中,常用的命令如下:
d 删除分区
n 创建新分区
t 更改文件系统类型,即格式化类型
p 查看分区表,等同于 fdisk -l 命令
w 保存新的分区表,退出
q 不保存退出
g 创建新的GPT分区表,GPT分区的功能后续再做介绍
o 创建新的dos分区表,默认是dos的
10.2.3 磁盘分区案例
依据fdisk菜单的提示信息,我们来开始手动新建分区:
fdisk /dev/sda ---进入fdisk管理菜单,后续操作如下:
输入n,创建分区=>输入开始扇区号,直接回车,即使用默认
=>输入结束扇区号: 若输入数字,表示指定结束扇区号,如 40000000
若输入 数字,表示占用的扇区数,如: 1000 即占1000个扇区
若输入 数字M/G,表示占用的空间大小,如: 800M,即占800M
在这里我们输入 800M
=>输入p,可查看到新建出的分区sda7
再次重复以上过程创建分区sda8,大小1000M
=>输入t,更改分区的文件系统类型
=>指定分区号,如:8,即指定更改sda8
=>到这里会要求输入文件系统编号,可输入l 显示所有可用文件系统号
=>在这里,我们输入86,即设置sda8的文件系统为windows的NTFS
=>输入w,保存退出
以上过程,如下图:
到此,我们可以看到已经新建出了2个分区:sda7、sda8。然后输入w即可保存分区表并退出了。
实验中,我们之所以更改sda8的文件系统为NTFS的,是为了让sda8分区可以被windows所使用。从兼容性的角度分析,windows是不能兼容Linux文件系统的,所以用Linux创建的分区,若采用ext4类型做格式化,在双系统的主机上(windows、Linux并存的主机)使用windows登录后,是无法访问Linux的分区的。如果我们在Linux中把某个分区按windows的NTFS或FAT格式化,则在windows中便可访问了。
保存退出以后,新的分区表被写入到了磁盘中,但是Linux系统中并未更新过来,用lsblk命令查看是见不到sda7、sda8的。若要刷新新的分区表到系统中,命令如下:
partprobe ---更新新的分区表给系统,或者reboot重启后也会更新
更新成功后,执行lsblk命令可见到新建的分区了。
有了分区,下一步我们需要对分区制作文件系统,即格式化。其实,刚才在fdisk菜单中,我们设置的文件系统类型,如:83 Linux、86 NTFS,都只是对分区的文件系统类型做了个标签、标记而已,在保存分区表后,并未真正做格式化,所以需要手动完成。命令如下:
mkfs -t ext4 /dev/sda7 ---给分区制作文件系统, -t 指定文件系统类型
mkfs -t vfat /dev/sda8
注:Linux中无法真正区分windows的NTFS、FAT类型,统一定位为vfat类型
我们也可以使用mkfs.ext4 /dev/sda7 mkfs.vfat /dev/sda8命令,两种命令效果相同,只是格式不同而已。
制作完文件系统的分区,按照Linux的特性,必须挂载后才可使用,所以我们还需要手动创建挂载点,如下:
cd /mnt ---Linux中习惯于在/mnt目录中存放设备的挂载点。
mkdir d1 d2 ---创建挂载点
最后挂载分区,即可使用了:
mount /dev/sda7 /mnt/d1 ---挂载分区,格式:mount 源设备 挂载点
mount /dev/sda8 /mnt/d2
lsblk df -h 都可查看到
mount ---查看本机挂载表,其中显示的type表示文件系统类型
到此新建的分区便可正常使用了,若想卸载分区,可是使用umount命令。
umount /dev/sda7 ---指定源设备卸载
umount /mnt/d2 ---指定挂载点卸载,注:指定源设备或挂载点任一个都可卸
注:卸载后,挂载点内的原有文件,都跟分区走了,挂载点恢复成空目录状态。
下面再来看一下下图中的操作:
图中,卸载时报设备正忙,卸载失败,仔细看,会发现问题是输入卸载命令时,当前路径已经在挂载点中了,所以才会失败。因此卸载前一定要先退出挂载点目录。
另外,卸载后,再次挂载时可以在命令后增加–o ro参数,如下:
mount /dev/sda7 /mnt/d1 -o ro
参数解释:-o 指定挂载权限,ro表示挂载后只读
如此,挂载后的分区只允许读取,不允许写入了。用mount命令查看,可见到该分区信息的()中显示为ro,即只读状态挂载
10.3 实现重启自动挂载
与环境变量的配置类似,我们使用命令做的分区挂载,当系统重启后,就是失效了,若想系统重启后能够自动挂载,需要编辑文件系统的配置文件,如下:
vi /etc/fstab ---编辑文件系统配置文件
格式:源设备 挂载点 文件系统类型 挂载权限 是否自动备份 是否自动扫描
/dev/sda7 /mnt/d1 ext4 rw,user 1 2
/dev/sda8 /mnt/d2 vfat defaults 0 2
解释:rw,user 表示设置挂载时的权限,user表示允许普通用户访问,一般都写defaults表示使用默认权限。若写上noauto则表示不自动挂载,一般光驱设备会写noauto。
第五列的数字,表示该分区是否支持自动备份,备份关机时未能及时保存的数据,会备到挂载点下的lost found目录中,针对于windows的文件系统,即vfat格式的,是不支持自动备份的。
第六列的数字,表示开机后是否自动扫描,0不扫描,1自动扫描,2手动扫描。扫描即是检查有无逻辑坏道并修复。手动扫描的命令将在下一节介绍
注:若/etc/fstab书写有误,则开机自动进入单用户模式(如下图),即1级别,直接输入root的密码登录后,改回/etc/fstab中的正确设置,重启即可。
如果一台Linux主机,运行时间较长,很可能有些/etc/fstab中设定的自动挂载的分区,在日常使用中被人无意或有意的卸载了,我们又不想重启系统再自动挂载,可以使用如下命令完成挂载:
mount -a ---命令挂载/etc/fstab文件中指定所有分区。
即/etc/fstab中指定的分区,已处于挂载状态的则不再挂载,处于卸载状态的则会立即挂载。
10.4 UUID的使用
我们在编辑/etc/fstab时,会发祥里面有很多原有内容,好多都是以UUID=…开头的行,这些都是安装系统时创建的分区,制定为开机自动挂载,那么UUID是什么?作用是什么呢?
UUID其实是设备在系统中的唯一编号,使用下列命令可查看设备的UUID
blkid ---查看块设备id,即所有磁盘设备的UUID
blkid /dev/sda7 ---只查看指定分区的UUID
注:可以把UUID抄写到/etc/fstab中,模仿原有分区挂载的格式,设置自动挂载。
10.5 分区卷标
卷标其实是分区的一个标签或别名,可用于标记该分区中存放数据的种类。如:假设sda7中我们将放置常用的软件安装包,则为了便于长期的管理,可使用如下命令:
e2label /dev/sda7 "SoftPackage" ---给分区设置卷标
mount LABEL= SoftPackage /mnt/d1 ---使用卷标挂载,注意:LABEL大写
vi/etc/fstab ---使用卷标实现自动挂载
写入:LABEL= SoftPackage /mnt/d1 ext4 defaults 1 2
保存退出
e2label /dev/sda7 ---查看分区卷标
e2label /dev/sda7 "" ---撤销卷标
10.6 磁盘热连接
在实际的生产环境中,系统上运行着很多应用和服务,系统是不允许随意重启的。而我们知道,给系统增加了新磁盘后,需要重启才可被系统所识别、加载进去。那么如果想要不重启让新加磁盘被系统使用该如何操作呢?带着这个问题我们继续往下学习。
10.6.1 总线的概念
首先,我们来介绍一下计算机主板总线的概念。我们知道,一台计算机的基本工作原理是:所有程序都交由CPU执行,而CPU只从内存中提取数据再运行,运行结果也只返回给内存,再转给相应设备。所以,计算机的所有设备都是先把数据交给内存,再转给cpu处理。那么,内存和设备间是如何做数据交互的呢?答案是通过总线来实现。
从计算机组成的角度看,cpu、内存、声卡、显卡、磁盘等计算机组件都是独立的个体,这些组件都是统一插到主板上才组成一台计算机的,而主板上就会为这些组件设备间传输数据提供电子线路的支持,这些电子线路我们称为主板总线。
主板为了能够更好的为内存和其他设备提供传输支持,把所有组件设备按类型分配不同总线负责传输,如:USB总线负责所有USB类设备与内存间的数据传输;pci总线负责IO设备与内存间的数据传输,如显卡、声卡、网卡等;scsi总线负责存储类设备与内存间的数据传输,如:磁盘、光驱(注:某些笔记本电脑会把光驱连接到usb总线上)。所以,usb总线、pci总线、scsi总线是每台计算机主板上必备的三大总线。
其次,每根总线上都会有多个通道(可认为是接口)连接各个组件设备,为了提高效率,主板会给几个临近的通道分配一个芯片做管理,因此,一根总线上会有多个芯片管理多组通道,每个芯片都加以编号,从0开始计数。如:一块主板上有四个SATA磁盘接口,前两个由一个scsi0芯片管理,后两个由scsi1芯片管理。
再者,一个接口上一般会只有一个设备插槽,但有时也会有多个插槽的,类似于我们日常中购买的usb hub,它一端连接电脑的一个usb口上,另一端可以有多个usb插槽,可以同时连接多个usb设备。针对这种拥有多个插槽的接口,称为通道(channel)。
如图:scsi总线上有两个芯片,可视为scsi0,scsi1,每个总线上有两个通道,channel0、channel1,每个通道上又有两个插槽,可命令为ID0、ID1号槽。
好了,有了以上的概念介绍,我们就可以查看系统中存储设备的连接信息了。
cat /proc/scsi/scsi ---查看当前系统中存储设备的连接信息
可见磁盘、光驱所连接的总线信息,如:hostscsi0 channel 00 id 00 lun 00 等。
其中我们看到的scsi0 channel00 id00即对应总线芯片、通道、插槽号。TYPE显示为 Direct-Access的表示为磁盘设备,TYPE显示为CD-ROM表示为光驱。
注:/proc目录是Linux系统中较为特殊的目录,其中存放了当前系统的所有硬件信息、连接信息、参数信息等。/proc中数据是在每次开机时根据当时的硬件连接状况实时更新的。具体原理会在后续章节中介绍。
上图中,我们还可看到信息中有lun 00 项。关于lun的概念其实是存储领域中常用的理论,在这里我们可以理解lun是指多个磁盘组成的一个磁盘组,同一lun中的磁盘可以进行协同工作,如创建动态分区,分区空间跨越多块磁盘,这多块磁盘必须在同一lun中(关于动态分区,即LVM管理,将在下一章中讲解)。一般系统中的所有磁盘都放在同一个lun中。
10.6.2 热连接配置
有了以上的知识准备,我们可以来实际操作下。首先,先在虚拟机的配置中添加一块新磁盘,大小随意,如:10G。(右键虚拟机标签=>设置=>添加=>磁盘=>…)
磁盘连接好后,进入系统,输入以下命令:
echo "scsi add-single-device 0 00 0100" >> /proc/scsi/scsi
---增加磁盘连接信息,模拟原有磁盘的连接信息,仅ID号 1即可
--- 号码顺序:芯片号 channel号 id号 lun号
fdisk -l ---可见到新的磁盘,如:sdb, lsblk也可见到
fdisk /dev/sdb ---给新磁盘做分区,新磁盘新建分区时会有分区类型的选择:p 主分区 e 扩展分区,如下图:
其余操作就与之前讲过的磁盘管理一样了。
其实,在实际的生产环境中,很多系统是运行在云平台上的,即系统都是以类似于虚拟机形式存在(如ESXi的虚拟机、OpenStack的计算实例),并且系统上运行着应用或服务,在需要增加存储时,都是在虚拟的云平台管理工具中,给虚拟机分配新的磁盘,在系统中以如上的方式热加载到系统中的,所以本节操作较为使用,读者可多加练习。
10.7 usb存储设备的连接
众所周知,U盘、移动硬盘等usb设备是直接可以热插拔的,那么当Linux中连接到U盘后该如何使用呢?
其实很简单,因为U盘属于热插拔设备,当插入U盘后,Linux系统会自动识别并安装驱动,我们只需要等驱动安装完毕后,用fdisk –l 或lsblk即可查看得到,记录下其设备名,如:sdc 或 sdd等。因为U盘已经是格式化好的设备了,我们不需要再次格式化,直接创建挂载点,挂载使用就好了。
mkdir /mnt/uDisk ---创建挂载点
mount /dev/sdc /mnt/uDisk ---挂载使用
同样,如果是连接的移动硬盘,可以已经建立好分区了,fdisk–l后可见到移动硬盘中的各个分区,也是创建挂载点后挂载使用即可。
10.8 block存储块
下面,我们来介绍一下文件系统中对于文件的存储的原理。针对一个分区,当制作文件系统,即格式化时,会按照一个固定的大小,把分区空间划分成n多个存储块,称为block。分区中存入文件时,根据文件的大小,给其分配足够多的block即可,若block中有空间浪费,也不再用。这样磁头在分区内寻址时,即可以block的大小,快速后移,找到目标文件所在位置,所以,以block的形式存储文件,是为了加快分区内文件的寻址时间。
可以总结得到,block是一个分区给文件分配的最小空间单位,即一个文件在分区上占据的最小空间。举例来看,假设一个分区格式化时设定的block大小是4KB(4096B),则若有一个50B的文件,在分区内占据1个block的空间,block内剩余的4000多B是浪费掉的。若有一个500B的文件,同样占据1个block,但是若有一个5000B的文件,则会占据2个block空间。
Linux中,默认的block的大小为4KB,即制作文件系统时,若不做指定,则默认按4KB创建block。
之前我们讲过的命令中,ls -l 可见到文件的大小,是指文件的实际大小,但是文件在文件系统内占据的真实大小却是用du命令查看的,案例如下
du f1 ---查看文件在分区内占据的真正大小,显示单位:KB
du -s /var ---仅查看指定目录占分区空间的大小
关于一个文件系统(即分区)的block信息,我们可以用tune2fs命令查看:
tune2fs -l /dev/sda5 ---查看分区的block信息
一个文件系统的block大小,只有在制作文件系统时才可以设定,文件系统制作完毕后不可修改。制作文件系统时使用-b参数设置block大小,案例如下:
mkfs -t ext4 -b 2K /dev/sda7
注:-b指定block大小时,最大值是4KB,若设置大于4KB则会询问是否强制执行,
但强制执行后,分区将不可被挂载使用
10.9 磁盘扫描
之前章节中,我们介绍了/etc/fstab文件中可设置开机自动挂载的文件系统,其中最后一列的数字是表示是否开机自动扫描的,设置为2,则表示人为手动扫描。扫描的命令是fsck,案例如下:
fsck -t ext4 /dev/sda7 ---文件系统扫描,前提:未挂载的分区
注:或者使用fsck.ext4 /dev/sda7 也可以
另外,也可是设置系统自动的周期性扫描,如下:
tune2fs -c 5 /dev/sda7
--- -c指定扫描的挂载频率,即该分区每备挂载几次,自动扫描一次
tune2fs -i 5d /dev/sda7
--- -i指定扫描的时间频率,即每隔多少时间自动扫描一次
tune2 -c -1 /dev/sda7 ---设定为负一,表示取消
tune2 -i 0 /dev/sda7 ---设定间隔为零,表示取消
10.10文件系统中block的使用
10.10.1 inode节点
一个分区被制作文件系统后,所有的block块会被划分成两区域:inode区、数据IO区。
inode区:每一个block对应一个文件,存放该文件的属性信息,如:文件名、大小、权限、所属、数据区地址指针等。该block被称为文件的inode节点,简称i节点。可以认为,inode区中有多少个block就代表该分区能够存放多少个文件,即有多少个inode节点.
数据IO区:由inode节点中的数据区地址指针指向该文件在数据区中占据的地址编号,存放文件中的数据。如下图:
上节讲过的tune2fs -l 也可查看到分区的inode节点信息。
针对与文件我们使用stat命令查看其inode节点内的信息,如下:
stat f1 ---查看文件的inode信息
对于分区、文件的inode信息,还有如下命令可用:
df -h ---查看各分区数据IO区的使用率
df -i ---查看各分区inode区的使用,显示的单位是:个,即总共多少个inode,用了多少个,剩余多少个
ls -i ---查看文件的inode编号
再者,inode区中的第一个block,即0号inode节点不针对文件,专用于记录本分区的属性信息,如:分区大小、已用、未用、分区地址范围等。该inode被称为 超级块,所以超级块节点最为重要,如果超级块故障了,则整个分区将不可使用。为了超级块的数据安全,inode区中第31个inode作为超级块的备份,称为次超级块。
10.10.2 分区空间存满的原因分析
如果向一个分区中存入文件时,报分区已存满,则可能是由如下两种情况造成的:
情况一:
分区中存放较大的文件,把数据IO区占满,但是inode区仍有空闲的inode节点。可以接受
情况二:
分区中存放较小的文件,文件个数特别多,数据IO区仍有空闲,但inode节点被占满。不可接受
总结:在对分区制作文件系统时,需要提前思考该分区将要存放什么类型的数据,以便制定更合理的block方案。
10.11 find命令总结
Linux学习到现在,系统基本的文件、用户、权限、磁盘等各方面的管理我们已经学习完毕,而find命令,我们之前介绍了很少的一些功能,下面就来结合之前所学,把常用的参数详细介绍一下:
find /-name f1 ---按文件名找文件
find /-user zhang ---查找属主是zhang的文件
find / -groupzu11 ---按属组找文件
find / -perm 644 ---按准确权限找文件
find /-perm -111 --- -111表示ugo三项中都包括x权限的文件
find /-perm 111 --- 111表示ugo三项中至少有一项包括x权限的文件
find /-type f ---按文件类型找 f文件 d目录 l软链接 b块设备 c字符设备
find / -inum 166633 ---按inode编号找
find / -size 100M ---按大小找
find /mnt/-perm -111 -type f -exec {} ; ---查找到可执行文件后立即执行
参数解释:-exec 查找到后执行操作
{}是占位符,即把找到的结果放到{}处, ; 是结束符,必须加
find /mnt/-perm -111 -type f -exec chmod a-x {};
---查找到文件后,去除x权限
注:因为之前已经介绍过find命令的格式,所以以上find命令及其参数,直接以
案例形式为大家展示。具体效果大家可自行验证。
10.12 GPT分区
我们之前讲的分区方案,无论是原系统磁盘上新建分区还是新家磁盘全新的制作分区,默认使用的都是dos的分区表方案。dos分区表也是Linux、windows传统的分区表方案,适合于MBR引导的建立与启动。但是随着现今磁盘容量越来越大,对启动、读写、分区大小的要求越来越高,而且前数年就很多主板已经就出现了UEFI启动方式(windows2008开始支持UEFI启动),它就主要支持GTP分区格式,大体功能如下:
1、定义
GPT:Globally Unique Identifier Partition Table Format,全局唯一标示磁盘分区表格式。
2、功能
当前数据存储越来越大,为了能够支撑更大的分区,更大的独立文件。越来越多的技术开始支持GPT了。GPT还有另一个名字叫做GUID分区表格式,我们在许多磁盘管理软件中能够看到这个名字。而GPT也是UEFI所使用的磁盘分区格式。
GPT分区的一大优势就是针对不同的数据建立不同的分区,同时为不同的分区创建不同的权限。就如其名字一样,GPT能够保证磁盘分区的GUID唯一性,所以GPT不允许将整个硬盘进行复制,从而保证了磁盘内数据的安全性。相比与我们目前通常使用的MBR分区,GPT本身就有着得天独厚的优势。
fdisk /dev/sdb ---磁盘管理菜单中的g键即是创建GTP分区表的项
3、GPT特点
1). 支持128个分区
2). 支持大于2T的分区
3). 最大支持18EB
4). 操作灵活、简单
5). 安全性高
小结:由于GPT分区现今使用尚不频繁,尤其是在Linux服务器领域,主要还是使用dos分区方案,所以在此暂不做过多介绍,读者还是了解其功能即可。学习重点还是放在dos分区的管理上。