Linux磁盘管理

本文详细介绍了Linux系统中硬盘的基本概念,包括硬盘结构、分区、格式化、挂载等操作,以及如何处理只读文件系统的问题。通过实例演示了如何使用fdisk、mkfs.ext4、mount等命令进行硬盘管理,并讲解了硬链接和软链接的区别。此外,还探讨了GPT分区格式在处理大容量硬盘时的应用。内容涵盖了硬盘维护、故障排查和修复等企业运维中的关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux系统一切以文件的方式存储于硬盘,应用程序数据需要时刻读写硬盘,所以企业生产环境中对硬盘的操作变得尤为重要,对硬盘的维护和管理也是每个运维工程师必须做的工作之一。

本章向读者介绍硬盘简介,硬盘数据存储方式,如何在企业生产服务器添加硬盘,对硬盘进行enquiry,初始以及对硬盘进行故障修复等内容。

 

7.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,即连续8个sector组成一个block。

/boot分区的block一般为1KB,而/data分区或者/分区的block为4KB。可以通过以下3种方法查看Linux分区block大小:

[root@yunanjiaoyu ~]# blkid /dev/sda1 //查看磁盘文件类型

 

下面命令适用于EXT3或者EXT4文件系统:

[root@yunanjiaoyu ~]# dumpe2fs /dev/sda2 |grep "Block"

[root@yunanjiaoyu ~]# tune2fs -l /dev/sda1 | grep "Block size"

[root@localhost ~]# stat /boot/ | grep "IO Block"

 

如果遇到XFS文件系统,使用下面的命令查看:

[root@yunanjiaoyu ~]# xfs_info /dev/sda1

[root@yunanjiaoyu ~]# xfs_growfs /dev/sda1

 

例如创建一个普通文件,文件大小为10B,而默认设置block为4KB,如果有1万个小文件,由于每个block只能存放一个文件,如果文件的大小比block大,会申请更多的block,相反如果文件大小比默认block小,仍会占用一个block,这样剩余的空间会被浪费掉。说明如下:

  • 1万个文件理论只占用空间大小:10000*10=100000B=97.65625MB。
  • 1万个文件真实占用空间大小:10000*4096B=40960000B=40000MB=40GB。
  • 根据企业实际需求,此时可以将block设置为1KB,从而节省更多的空间。

 

7.2 硬盘block及inode详解

通常而言,操作系统对于文件数据的存放包括两个部分:一个文件内容;二是权限及文件属性。操作系统文件存放是基于文件系统,文件系统会将文件的实际内容存储到block中,而将权限与属性等信息存放至inode中。

在硬盘分区中,还有一个超级区块(superblock),superblock会记录整个文件系统的整体信息,包括inode,block的总量,使用大小,剩余大小等信息。每个inode与block都有编号对应,方便Linux快速定位查找文件。详细说明如下:

  • superblock:记录文件系统的整体信息,包括inode与block的总量,使用大小,剩余大小以及文件系统的格式与相关信息等。
  • inode:记录文件的属性,权限,同时会记录该文件的数据所在的block编号。
  • block:存储文件的内容,如果文件超过默认block大小,会自动占用多个block。

每个inode与block都有编号,而每个文件都会占用一个inode,inode内则有文件数据放置的block号码。如果能够找到文件的inode,就可以找到该文件所放置数据的block号码,从而读取该文件内容。

操作系统进行格式化分区时,操作系统自动将硬盘分成两个区域,一个是数据block区,用于存放文件数据;另一个是inode table区,用于存放inode包含的元信息。

每个inode节点的大小,可以在格式化时指定,默认为128B或256B,/boot分区inode默认为128B,其它分区默认为256B,查看Linux系统inode的方法如下:

[root@yunanjiaoyu ~]# dumpe2fs /dev/sda2 |grep "Block"

[root@yunanjiaoyu ~]# tune2fs -l /dev/sda1 | grep "Block size"

[root@localhost ~]# stat /boot/ | grep "IO Block"

 

格式化磁盘时,可以指定默认inode和block的大小,-b指定默认block值,-I(大写)指定默认inode值,

[root@yunanjiaoyu ~]# mkfs.ext4 -b 4096 -I 256 /dev/sdb

7.3 硬链接介绍

一般情况下,文件名和inode编号是一一对应的关系,每个inode号码对应一个文件名。但UNIX/Linux系统多个文件名也可以指向同一个inode号码。这意味着可以用不同的文件名访问同样的内容,对文件内容进行修改,会影响到所有文件名。但删除一个文件名,不影响另一个文件名的访问。这种情况被称为硬链接(hard link)。

创建硬链接的命令为ln yn1.txt ya2.txt,其中yn1.txt为源文件,yn2.txt为目标文件。如果上述命令源文件与目标文件的inode号码相同,则都指向同一个inode。inode信息中有一项叫做“链接数”,记录指向该inode的文件总数,这是会增加1变成2,如下图:

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

实用小技巧:硬链接不能跨分区链接,硬链接只能对文件生效,对目录无效,也即是目录不能创建硬链接。硬链接源文件与目标文件公用一个inode值,从某种意义上来说,节省inode空间,不管是单独删除源文件还是删除目标文件,文件内容始终存在。链接后的文件不占用系统多余的空间。

7.4 软连接介绍

除了硬链接以外,还有一种连接——软连接,文件yn1.txt和文件yn2.txt的inode号码虽然不同,但是文件yn2.txt的内容是文件un1.txt的路径。读取文件yn2.txt时,系统会自动将访问者导向文件yn1.txt。

无论打开哪一个文件,最终读取的文件都是yn1.txt。这时,文件yn2.txt就成为文件yn1.txt的“软连接(soft link)”或者“符号链接(symbolic link)”。

文件yn2.txt依赖于文件yn1.txt而存在,如果删除了文件yn1.txt打开yn2.txt就会报错No such file or directory。

软连接与硬链接最大的不同是文件yn2.txt指向文件yn1.txt的文件名,而不是文件yn1.txt的inode号码,因此文件yn1.txt的inode链接数不会发生变化。如下图:

删除yn1.txt源文件链接数不变

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

 

7.5 Linux下磁盘实战操作命令

企业真实场景由于硬盘常年大量读写,处经常会出现坏盘,需要更换硬盘。或者由于磁盘空间不足,需添加新硬盘,新添加的硬盘需要经过格式化,分区才能被Linux系统所使用。虚拟机CentOS 7 Linux模拟DELL R730 真实服务器添加一块新硬盘,不需要关机,直接插入用硬盘科技,一般硬盘均支持热插拔功能。企业中添加新硬盘的操作流程如下:

(1)检测Linux系统识别的硬盘设备,新添加硬盘被识别为/dev/sdb,如果有多块硬盘,会依次识别成/dev/sdc,/dev/sdd等设备名称。如下图:

[root@yunanjiaoyu ~]# fdisk -l

(2)基于新硬盘/dev/sdb设备,创建磁盘分区/dev/sdb1,如下如:

[root@yunanjiaoyu ~]# fdisk /dev/sdb

(3)fdisk分区命令参数如下,常用参数包括m,n,p,e,d,w。

  • b:编辑bsd disklabel。
  • c:切换dos兼容性标志。
  • d:删除一个分区。
  • g:创建一个新的空GPT分区别。
  • G:创建一个IRIX(SGI)分区表。
  • l:列出已知的分区类型。
  • m:打印帮助菜单。
  • n:添加一个新分区。
  • o:创建一个新空DOS分区表。
  • p:打印分区表信息。
  • q:退出而不保存更改。
  • s:创建一个新的空的sun磁盘标签。
  • t:更改分区的系统ID。
  • u:更改显示/输入单位。
  • v:验证分区表。
  • w:将分区表写入磁盘并退出。
  • x:额外功能。

 

(4)创建/dev/sdb1分区方法,执行命令fdisk /dev/sdb,然后按屏幕提示一次输入n、p、1,按Enter键,再输入+20G,按Enter键,输入w,最后执行fdisk -l | tail -10,如下图所示:

fdisk /dev/sdb创建/dev/sdb1分区

 

fdisk -l 查看/dev/sdb1分区

(5)mkfs.ext4 /dev/sdb1格式化磁盘分区,如下图:

(6)/dev/sdb1分区格式化,使用mount命令挂载到/date/目录,命令详解如下,结果如下图所示:

  • mkdir -p /data:创建/data/数据目录。
  • mount /dev/sdb1 /data:挂载/dev/sdb1分区至/data/目录。
  • df -h:查看磁盘分区详情。
  • echo "mount /dev/sdb1 /data" >> /etc/rc.local:将挂载分区命令加入/etc/rc.local开机启动。

(7)自动挂载分区除了可以加入到/etc/rc.local开机启动之外,还可以加入到/etc/fstab文件中,命令详解如下,结果如下图所示:

[root@yunanjiaoyu ~]# vim /etc/fstab

/dev/sdb1 /data ext4 defaults 0 0

mount -o rw,remount /

如上命令表示重新挂载/系统,检测/etc/fstab是否有误。

 

7.6 基于GPT格式磁盘分区

MBR分区标准决定了MBR只支持在2TB一下的硬盘分区,为了能支持使用大于2TB硬盘空间,需使用GPT格式进行分区,创建大于2TB的分区,需要使用parted工具。

在企业真实环境中,通常一台服务器有多块硬盘,整个硬盘容量为10TB,需要基于GPT格式对10TB硬盘进行分区,操作步骤如下:

  • parted -s /dev/sdb mklabel gpt:设置分区类型为gpt格式。
  • mkfs.ext3 /dev/sdb:基于ext3文件系统类型格式话。
  • mount /dev/sdb /data/:挂载/dev/sdb设备至/data/目录。

(1)如下图所示,建设/dev/sdb/为10TB硬盘,使用GPT格式来格式化磁盘。

(2)执行命令parted -s /dev/sdb mklabel gpt,如下图所示。

[root@yunanjiaoyu ~]# parted -s /dev/sdb mklabel gpt

(3)基于mkfs.ext3 /etc/sdb格式化磁盘,如下图所示:

parted命令行也可以进行分区,依次输入如下命令,如图所示:

parted→select /dev/sdb→mklabel gpt→mkpart primary 0 -1→print

mkfs.ext3 /dev/sdb1

mount /dev/sdb1 /data/

格式化/dev/sdb磁盘

parted工具执行GPT格式分区

parted工具执行GPT格式分区

7.7 mount命令工具

mount命令工具主要用于将设备或者分区挂载至Linux系统目录下,Linux系统在分区时,基于mount机制将/dev/sda分区挂载至系统目录,将设备与目录挂载之后,Linux操作系统防控进行文件的读取和存储。

7.7.1 mount命令参数详解

以下为企业中mount命令常用参数详解。

常见用法如下:

mount [-Vh]

mount -a [-fFnrsvw] [-t vfstype]

mount [-fnrsvw] [-o options [,...] ] device | dir

mount [-fnrsvw] [-t vfstype] [-o options] device dir

 

参数详解如下:

  • -V:显示mount工具版本号。
  • -l:显示以加载的文件系统列表。
  • -h:显示帮助信息并退出。
  • -v:输出指令执行的详细信息。
  • -n:加载没有写入文件/etc/mtab中的文件系统。
  • -r:将文件系统加载为只读模式。
  • -a:加载文件/etc/fstab中配置的所有文件系统
  • -o:指定mount挂载扩展参数,常见扩展指令rw,remount,loop等。

其中与-o相关指令如下:

  • -o atime:系统会在每次读取文档时更新文档时间。
  • -o noatime:系统会在每次读取文档时不更新文档时间。
  • -o defaults:使用预设的选项rw,suid,dev,exec,auto,nouser等。
  • -o exec:允许执行档被执行。
  • -o user、-o nouser:使用者可以执行mount /umount的动作。
  • -o remount:将已挂在的系统分区重新以其他再次模式挂载。
  • -o ro:只读模式挂载。
  • -o rw:可读可写模式挂载。
  • -o loop:使用loop模式,把文档当成设备挂载至系统目录。
  • -t:指定mount挂载设备类型,常见类型有nfs,ntfs-3g,vfat,iso9660等。

其中与-t相关指令如下:

  • iso9660:光盘或光盘镜像。
  • msdos:FAT6文件系统。
  • vfat:Fat32文件系统。
  • ntfs:ntfs文件系统。
  • ntfs-3g:识别移动硬盘格式。
  • smbfs:挂载Windows文件网络共享。
  • nfs:UNIX/Linux文件网络共享。

 

7.7.2 企业常用mount案例

mount常用案例演示详解如下:

  • mount /dev/sdb1 /data:挂载/dev/sdb1分区至/data目录。
  • mount /dev/cdrom /mnt:挂载光盘至/mnt。
  • mount -t ntfs-3g /dev/sdc /data1目录。
  •  
  • mount -o remount,rw /:重新以读写模式挂在/系统。
  • mount -t iso9660 -o loop centos7.iso /mnt:将CentOS7镜像文件挂载至/mnt目录。
  • mount -t fat32 /dev/sdd1 /mnt:将U盘/dev/sdd1挂载至/mnt目录。
  • mount -t nfs 192.168.1.11:/data/ /mnt:将远程192.168.1.11:/data目录挂载至本地/mnt目录。

 

7.8 Linux硬盘故障修复

企业服务器运维中,经常会发现操作系统的分区变成只读文件系统,错误提示信息为Read-only file system。出现只读文件系统会导致只能读取而无法写入新文件,新数据等操作。

造成该问题的原因包括:磁盘老旧长期大量的读写,文件系统文件被破坏,磁盘碎片文件,异常断电,读写中断等。

以企业CentOS7 Linux为案例来修复文件系统,步骤如下:

(1)运城备份本地其他重要数据,出现只读文件系统,需要备份其他重要数据,基于rsync | scp远程备份,其中/data为源目录,/data/backup/2020为目标备份目录。

rsync -av /data/ root@192.168.22.12:/data/backup/2020/

(2)可以重新挂载/系统,挂载命令如下,测试文件系统是否可以写入文件。

mount -o remount,rw /

(3)如果重新挂载/系统无法解决问题,则需要重启服务器以CD/DVD光盘引导进入Linux Rescue修复模式。如下图所示,光标选择Troubleshooting,按Enter键,然后选择Rescue a CentOS system,按Enter键。

光盘引导进入修复模式

光盘引导进入修复模式

(4)选择“1)Continue”继续操作,如下图:

(5)进入修复模式,执行如下命令,df -h显示原来的文件系统,如下图所示:

(6)对有异常的分区进行检测并修复(以下为假设出现故障),根据文件系统类型,执行命令如下:

umount /dev/sda3

fsck.ext4 /dev/sda3 -y

(7)修复完成之后,重启系统即可。

reboot

 

小结:

这章节我们掌握了Linux硬盘内部结构,block及inode特性,能够针对企业硬盘进行分区,格式化等操作,满足企业的日常需求。

基于mount工具,能对硬盘,各类文件系统进行挂载操作,同时对只读文件系统能快速修复并投入使用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值