本章将介绍硬盘的简介、硬盘数据存储方式、在企业生产服务器中添加硬盘的方法、对硬盘进行分区、初始化和挂载等操作。
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),每个扇区存储512字节的数据。为了提高读取效率,操作系统会一次性连续读取多个扇区,这样的一组扇区被称为块(Block)。在Linux中,块的大小通常设置为4KB,即连续的8个扇区组成一个块。
可以通过以下方法查看Linux分区的块大小:
[root@superman-vm01 ~]# stat /boot | grep "Inode"
Device: 801h/2049d Inode: 64 Links: 5
[root@superman-vm01 ~]#
例如,如果创建一个大小为10字节的普通文件,默认的块大小为4KB。如果有1万个小文件,每个块只能存放一个文件。如果文件的大小超过了块的大小,将会占用更多的块,反之,如果文件的大小小于块的大小,仍然会占用一个块,导致剩余的空间被浪费掉。
2. 硬盘块和Inode详解
通常情况下,操作系统对文件数据的存放包括两个部分:文件内容和权限、属性等信息。操作系统使用文件系统将文件的实际内容存储到块中,而将权限和属性等信息存放到Inode中。
在硬盘分区中,还有一个超级区块(SuperBlock),它记录了整个文件系统的整体信息,包括Inode和块的总量、使用大小、剩余大小等信息。每个Inode和块都有一个编号,方便Linux系统快速定位和查找文件。
因为每个Inode和块都有编号,而每个文件都会占用一个Inode,Inode中记录了文件数据所放置的块号码。如果能够找到文件的Inode,就可以找到该文件所放置数据的块号码,从而读取文件的内容。
在操作系统进行格式化分区时,会自动将硬盘分成两个区域:一个是数据块区,用于存放文件数据;另一个是Inode Table区,用于存放包含Inode的元信息。
每个Inode节点的大小可以在格式化时指定,默认为128字节或256字节。例如,/boot
分区的Inode默认为128字节,其他分区默认为256字节。可以通过以下方法查看Linux系统的Inode大小:
3. 硬链接介绍
通常情况下,文件名和Inode编号是一一对应的关系,每个Inode编号对应一个文件名。但在UNIX/Linux系统中,多个文件名也可以指向同一个Inode编号。这意味着可以使用不同的文件名访问相同的内容,对文件内容进行修改会影响到所有文件名,但删除一个文件名不会影响另一个文件名的访问。这种情况被称为硬链接(hard link)。
创建硬链接的命令为:ln superman1.txt superman2.txt
,其中superman1.txt
为源文件,superman2.txt
为目标文件。上述命令中,源文件和目标文件的Inode编号相同,都指向同一个Inode。Inode信息中有一项叫做”链接数”,记录指向该Inode的文件名总数,创建硬链接后,链接数会增加1。
删除一个superman2.txt
文件会使superman1.txt
的Inode节点中的”链接数”减1。如果该Inode的链接数减到0,表明没有文件名指向这个Inode,系统会回收该Inode编号及其对应的块区域。
需要注意的是,硬链接不能跨分区链接,只能对文件生效,不能对目录进行硬链接。硬链接的源文件和目标文件共用一个Inode编号,从某种意义上来说,节省了Inode空间。无论是单独删除源文件还是删除目标文件,文件内容始终存在。同时,链接后的文件不会占用额外的空间。
4. 软链接介绍
除了硬链接,还有一种链接方式是软链接(symbolic link)。文件superman1.txt
和文件superman2.txt
的Inode编号虽然不同,但是文件superman2.txt
的内容是文件superman1.txt
的路径。当读取文件superman2.txt
时,系统会自动将访问者导向文件superman1.txt
。
无论打开哪个文件,最终读取的都是文件superman1.txt
。这时,文件superman2.txt
就称为文件superman1.txt
的软链接或符号链接。
文件superman2.txt
依赖于文件superman1.txt
而存在。如果删除了文件superman1.txt
,打开文件superman2.txt
就会报错:”No such file or directory”。软链接与硬链接最大的不同是,文件superman2.txt
指向文件superman1.txt
的文件名,而不是文件superman1.txt
的Inode编号。因此,文件superman1.txt
的Inode链接数不会发生变化。
需要注意的是,软链接可以跨分区链接,支持对目录和文件进行链接。软链接的源文件和目标文件的Inode编号不相同,从某种意义上来说,会消耗Inode空间。无论是删除源文件还是重启系统,软链接仍然存在,但是文件内容会丢失。一旦新建同名的源文件,软链接文件将恢复正常。
5. Linux下磁盘实战操作命令
在企业真实场景中,由于硬盘经常进行大量的读写操作,常常会出现坏盘需要更换,或者由于磁盘空间不足需要添加新硬盘的情况。添加新硬盘后,需要进行格式化和分区才能被Linux系统使用。
以下是添加新硬盘的操作流程:
5.1 fdisk分区命令参数
常用的参数包括m
、n
、p
、e
、d
、w
。
5.2 检测识别的硬盘设备
新添加的硬盘被识别为/dev/sdb
,如果有多块硬盘,会依次识别为/dev/sdc
、/dev/sdd
等设备名称。
fdisk -l
5.3 创建磁盘分区
基于新硬盘/dev/sdb
设备,创建磁盘分区/dev/sdb1
。
fdisk /dev/sdb
5.4 创建/dev/sdb1
分区方法
使用fdisk /dev/sdb
命令,然后按下n
、p
、1
、Enter
、Enter
、Enter
、w
键,最后执行fdisk -l|head -10
命令。
(a) 使用fdisk /dev/sdb
创建/dev/sdb1
分区
(b) 使用fdisk -l
查看/dev/sdb1
分区
5.5 格式化分区
使用mkfs.xfs /dev/sdb1
命令格式化磁盘分区。
# 创建/data/数据目录
mkdir /data
# 挂载/dev/sdb1分区至/data/目录
mount /dev/sdb1 /data
# 查看磁盘分区详情
df -h
# 开机自动挂载(永久挂载)
echo "/dev/sdb1 /data xfs defaults 0 0" >>/etc/fstab
5.6 挂载分区
将/dev/sdb1
分区挂载到/data/
目录,并将其添加到/etc/fstab
文件中,以实现开机自动挂载。
6. 基于GPT格式磁盘分区
MBR分区标准决定了MBR只支持2TB以下的硬盘。为了支持大于2TB的硬盘空间,需要使用GPT格式进行分区。创建大于2TB的分区需要使用parted
工具。
在企业真实环境中,通常一台服务器有多块硬盘,整个硬盘容量可能达到10T。需要基于GPT格式对10T硬盘进行分区,操作步骤如下:
6.1 检测识别的硬盘设备
使用fdisk -l
命令检测识别的硬盘设备。
6.2 设置分区类型为GPT格式
6.2.1 非交互方式
执行命令parted -s /dev/sdb mklabel gpt
和parted /dev/sdb mkpart primary 0 100%
。
6.2.2 交互方式
使用parted
命令行进行分区。
6.3 格式化磁盘
基于mkfs.xfs /dev/sdb
命令格式化磁盘。
6.4 挂载分区
创建挂载目录并挂载。
7. Mount命令工具
Mount命令工具主要用于将设备或分区挂载到Linux系统目录下。在Linux系统中,分区是基于mount机制将/dev/sda
分区挂载到系统目录,以实现文件的存储。
7.1 Mount命令参数详解
以下是Mount命令常用参数的详细解释:
7.2 企业常用Mount案例
以下是Mount命令的常见用法:
7.2.1 挂载/dev/sdb1
分区到/data/
目录
mount /dev/sdb1 /data
7.2.2 挂载CD-ROM光盘到/mnt
目录
mount /dev/cdrom /mnt
7.2.3 挂载/dev/sdb1
移动硬盘到/data
目录
mount -t ntfs-3g /dev/sdb1 /data
注意:如果提示未知的文件系统类型”ntfs”,请执行yum install -y ntfs-3g
命令安装ntfs-3g软件包。
7.2.4 重新以读写模式挂载/
系统
mount -o remount,rw /
7.2.5 将CentOS-7-x86_64-DVD-1810.iso镜像文件挂载到/mnt
目录
mount -t iso9660 -o loop CentOS-7-x86_64-DVD-1810.iso /mnt
7.2.6 将U盘/dev/sdd1
挂载到/mnt/
目录
mount -t vfat /dev/sdb1 /mnt
7.2.7 将远程192.168.1.182:/data
目录挂载到本地/data
目录
mount -t nfs 192.168.1.182:/data/ /data
以上是Linux下磁盘实战操作的命令和案例。