磁盘管理

磁盘管理
Linux 系统一切以文件的方式存储于硬盘,应用程序数据需要时刻读写硬盘,所以企业
生产环境中对硬盘的操作变得尤为重要,对硬盘的维护和管理也是每个运维工程师必备工作
之一。本节介绍硬盘简介、硬盘数据存储方式、如何在企业生产服务器添加硬盘、对硬
盘进行分区、初始化以及对硬盘进行故障修复等
1、计算机硬盘简介
硬盘是计算机主要存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成,碟片外覆盖有铁磁性材料,硬盘内部由磁道、柱面、扇区、磁头等部件组成,如图:

Linux 系统中硬件设备相关配置文件存放在/dev/下,常见硬盘命名:/dev/hda、/dev/sda、
/dev/sdb、/dev/sdc、/dev/vda。不同硬盘接口,在系统中识别的设备名称不一样。IDE 硬盘接口在 Linux 中设备名为/dev/hda,SAS、SCSI、SATA 硬盘接口在 Linux 中设备名为 sda,高效云盘硬盘接口会识别为/dev/vda 等。
文件储存在硬盘上,硬盘的最小存储单位叫做 Sector(扇区),每个 Sector 储存 512 字节。操作系统在读取硬盘的时候,不会逐个 Sector 的去读取,这样效率非常低,为了提升读取效率,操作系统会一次性连续读取多个 Sector,即一次性读取多个 Sector 称为一个 Block(块)。由多个 Sector 组成的 Block 是文件存取的最小单位。Block 的大小常见的有 1KB、2KB、4KB,Block 在 Linux 中常设置为 4KB,即连续八个 Sector 组成一个 Block。
/boot 分区 Block 一般为 1KB,而/data/分区或者/分区的 Block 为 4K。可以通过如下三种方法查看 Linux 分区的 Block 大小:
1、dumpe2fs /dev/sda1 |grep “Block size” 2、tune2fs -l /dev/sda1 |grep “Block size”
3、stat /boot/|grep “IO Block”
例如创建一个普通文件,文件大小为 10Bytes,而默认设置 Block 为 4K,如果有 1 万个小文件,由于每个 Block 只能存放一个文件,如果文件的大小比 Block 大,会申请更多的Block,相反如果文件的大小比默认 Block 小,仍会占用一个 Block,这样剩余的空间会被浪
费掉。
1 万个文件理论只占用空间大小:10000x10=100000Bytes=97.65625MBytes;1 万个文件真实占用空间大小:10000x4096Bytes=40960000Bytes=40000MBytes=40GB。根据企业实际需求,此时可以将 Block 设置为 1K,从而节省更多的空间。
2、硬盘 Block 及 Inode 详解
通常而言,操作系统对于文件数据的存放包括两个部分:文件内容、权限及文件属性。操作系统文件存放是基于文件系统,文件系统会将文件的实际内容存储到 Block 中,而将权限与属性等信息存放至 Inode 中。
Superblock:记录文件系统的整体信息,包括 inode 与 block 的总量、使用大小、剩余大小,以及文件系统的格式与相关信息等;
Inode:记录文件的属性,权限,同时会记录该文件的数据所在的 block 编号;
Block:存储文件的内容,如果文件超过默认 Block 大小,会自动占用多个 Block。
因为每个 inode 与 block 都有编号,而每个文件都会占用一个inode ,inode 内则有文件数据放置的 block 号码。如果能够找到文件的 inode,就可以找到该文件所放置数据的block 号码,从而读取该文件内容。
操作系统进行格式化分区时,操作系统自动将硬盘分成两个区域。一个是数据 Block 区,用于存放文件数据;另一个是 Inode Table 区,用于存放 inode 包含的元信息。每个 inode 节点的大小,可以在格式化时指定,默认为 128Bytes 或 256Bytes,/boot 分区 Inode 默认为 128Bytes,其他分区默认为 256Bytes,查看 Linux 系统 Inode 方法如下:
dumpe2fs -l /dev/sda1 |grep node
tune2fs -l /dev/sda1 |grep node
stat /boot/|grep node
格式化磁盘时,可以指定默认 Inode 和 Block 的大小,-b 指定默认 Block 值,-I 指定默认 Inode 值,如图 7-2 所示,命令如下:
mkfs.ext4 -b 4096 -I 256 /dev/sdb

3、硬链接介绍
一般情况下,文件名和 inode 编号是一一对应的关系,每个 inode 号码对应一个文件名。但 UNIX/Linux 系统多个文件名也可以指向同一个 inode 号码。这意味着可以用不同的文件名访问同样的内容,对文件内容进行修改,会影响到所有文件名。但删除一个文件名,不影响另一个文件名的访问。这种情况就被称为硬链接(hard link)。
创建硬链接的命令为:ln jf1.txt jf2.txt,其中 jf1.txt 为源文件,jf2.txt 为目标文件。如上命令源文件与目标文件的 inode 号码相同,都指向同一个 inode。inode 信息中有一项叫做"链接数",记录指向该 inode 的文件名总数,这时会增加 1,变成 2,如图所示:

同样删除一个 jf2.txt 文件,就会使得 jf1.txt inode 节点中的"链接数"减 1。如果该 inode值减到 0,表明没有文件名指向这个 inode,系统就会回收这个 inode 号码,以及其所对应block 区域,如图所示:

实用小技巧:硬链接不能跨分区链接,硬链接只能对文件生效,对目录无效,也即是目录不能创建硬链接。硬链接源文件与目标文件共用一个 inode 值,从某种意义上来,节省 inode空间。不管是单独删除源文件还是删除目标文件,文件内容始终存在。同时链接后的文件不占用系统多余的空间。
4、软链接介绍
除了硬链接以外,还有一种链接-软链接。文件 jf1.txt 和文件 jf2.txt 的 inode 号码虽然不一样,但是文件 jf2.txt 的内容是文件 jf1.txt 的路径。读取文件 jf2.txt 时,系统会自动将访问者导向文件 jf1.txt。无论打开哪一个文件,最终读取的都是文件 jf1.txt。这时,文件 jf2.txt 就称为文件 jf1.txt的"软链接"(soft link)或者"符号链接(symbolic link)。文件 jf2.txt 依赖于文件 jf1.txt 而存在,如果删除了文件 jf1.txt,打开文件 jf2.txt 就会报错:“No such file or directory”。软链接与硬链接最大的不同是文件 jf2.txt 指向文件 jf1.txt 的文件名,而不是文件 jf1.txt的 inode 号码,因此文件 jf1.txt 的 inode 链接数不会发生变化,如图所示:

实用小技巧:软链接可以跨分区链接,软链接支持目录同时也支持文件的链接。软链接源文件与目标文件 Inode 不相同,从某种意义上来,会消耗省 inode 空间。不管是删除源文件还是重启系统,该软链接还存在,但是文件内容会丢失,一旦新建源同名文件名,软链接文件恢复正常。

你可能感兴趣的:(磁盘管理)