【Linux】磁盘与磁盘文件系统管理

磁盘管理与文件系统
本文详细介绍了计算机磁盘管理的基础知识,包括磁盘分区、MBR与GPT分区格式的区别,以及常用的磁盘分区管理命令。此外,还深入探讨了磁盘文件系统,包括文件系统的创建、检测、挂载、信息查看和卸载命令。


0 引言

在Windows系统的计算机中,我们都知道文件是存储在磁盘(硬盘)里的,只要我们知道存储的位置,便能将文件打开,并进行后续的操作。

在Linux系统的计算机中同样如此,但是Linux系统中的磁盘(硬盘)存储和读取数据却和Windows系统有所不同。


1 计算机磁盘

大家应该都看到过电视剧里面的那种留声机吧,简单来讲就是将声音存储在唱片上,在唱针下随着唱片的转动,各种音乐播放出来了。而计算机磁盘(硬盘)存储和读取数据的方式和留声机类似。

磁盘(硬盘)主要由马达、磁盘、磁头等组成,其中关于磁盘的有几个概念(盘面、磁道、扇区、柱面)需要清楚明白,如何读取的话只要想着留声机就可以了,这里不再一一赘述。

如果想要深入了解,可参考这两篇:
简单理解磁盘结构
硬盘内部硬件结构和工作原理详解


2 磁盘分区

一般电脑买回来的时候只有一个C盘,如果要玩什么其他系统了,要重装一个系统,那就会很麻烦,所以就需要分区了,可以另外再分D盘、E盘等。

磁盘分区不仅可以保证重要的数据不丢失,还有一个重要的原因就是有助于加快数据的读取及增加磁盘的使用率,使你的系统跑的更加流畅。

那么如何进行磁盘分区呢?要进行磁盘分区,应该遵循一定的规则,从而使数据的存储和读取更加有序,而这样的规则就称为磁盘分区表(partition table,用来记录磁盘分区的状态,有64bits)。


2.1 开机流程

在谈到磁盘分区之前,先简单了解一下计算机的开机流程:计算机开机后,先执行BIOS程序。接下来BIOS会去分析计算机里有哪些存储设备,假如计算机中只有硬盘这一存储设备,BIOS会根据使用者的设定区取得能够开机的硬盘,并且到该硬盘里面去读取第一个扇区的MBR的位置,从而获得最基本的开机管理程序。然后开机管理程序会去加载核心文件,之后就能看见操作系统的界面了,当然,操作系统也是一个程序。流程如下图:

BIOS
MBR
Boot Loader
核心文件
操作系统
  1. BIOS:开机主动执行的韧体,会认识第一个可开机程序的装置;
  2. MBR(Master Boot Record):硬盘容量为446bits,第一个可开机装置的第一个扇区内的主要启动记录区块,内含开机管理程序;
  3. 开机管理程序(Boot Loader):一支可读取核心文件来执行的软件;
  4. 核心文件:开始操作系统的功能。

欲知详情,可参考:
计算机开机过程
计算机启动从bios到操作系统整过程详解


2.2 两种分区格式(MBR和GPT)

早期的Linux系统为了兼容Windows系统的磁盘,因此使用的是支持Windows的MBR的方式来处理开机管理程序与分区表。一般开机管理程序和分区表都放在磁盘的第一个扇区。这个扇区通常是512bytes,其中包含主要启动记录区(Master Boot Record,MBR,可以安装开机管理程序的地方,有446bytes)和分区表(partition table,记录整颗硬盘分区的状态,有64bytes)。

分析磁盘可用工具 Winhex


2.2.1 MBR分区格式

MBR磁盘分区是一种使用最为广泛的分区结构,它也被称为DOS分区结构,但它并不仅仅应用于Windows系统平台,也应用于Linux,基于X86的UNIX等系统平台。它位于磁盘的0号扇区(一扇区等于512字节),是一个重要的扇区(简称MBR扇区)。

MBR扇区由以下四部分组成:

  1. 引导代码(Bootstrap code area):引导代码占MBR分区的前440字节,负责整个系统启动。如果引导代码被破坏,系统将无法启动。
  2. Windows磁盘签名:占引导代码后面的4字节,是Windows初始化磁盘写入的磁盘标签,如果此标签被破坏,则系统会提示“初始化磁盘”。
  3. MBR分区表(partition table):占Windows磁盘标签后面的64个字节,是整个硬盘的分区表。每个分区需要16字节,所以最多有四个分区,而四个分区往往不够用,所以就有了扩展分区逻辑分区
  4. MBR结束标志(Boot signature):占MBR扇区最后2个字节,一直为“55 AA”。
    图片来源于维基百科

欲知详情,可参考:
Master boot record


2.2.2 GPT分区格式

在磁盘的介绍中,我们有看到开始和结束磁道,而磁盘通常有很多个,所有的磁盘的同一磁道我们称为磁柱,通常那是文件系统的最小单位,也就是分区槽的最小单位,但现在有一个GPT(GUID partition table)文件系统可以达到64bits记录功能的分区表,我们甚至可以用扇区号码来作为分区单位,所以,我们可以参考磁柱或扇区号码来处理。

GPT磁盘分区的基本特点GPT磁盘分区结构解决了MBR只能分4个主分区的的缺点,理论上说,GPT磁盘分区结构对分区的数量好像是没有限制的。但某些操作系统可能会对此有限制。GPT磁盘分区结构由6部分组成,即

  1. 保护性MBR(LBA 0):保护MBR保护MBR位于GPT磁盘的第一扇区,也就是0号扇区,有磁盘签名,MBR磁盘分区表和结束标志组成,没有引导代码。而且分区表内只有一个分区表项,这个表项GPT根本不用,只是为了让系统认为这个磁盘是合法的。
  2. GPT头(LBA 1):GPT头位于GPT磁盘的第二个磁盘,也就是1号扇区,该扇区是在创建GPT磁盘时生成,GPT头会定义分区表的起始位置,分区表的结束位置、每个分区表项的大小、分区表项的个数及分区表的校验和等信息。
  3. 分区表(LBA 2-33):位于GPT磁盘的2-33号磁盘,一共占用32个扇区,能够容纳128个分区表项。每个分区表项大小为128字节。因为每个分区表项管理一个分区,所以Windows系统允许GPT磁盘创建128个分区。每个分区表项中记录着分区的起始,结束地址,分区类型的GUID,分区的名字,分区属性和分区GUID。
  4. 分区区域(LBA34):GPT分区区域就是用户使用的分区,也是用户进行数据存储的区域。分区区域的起始地址和结束地址由GPT头定义。
  5. GPT头备份(LBA -1):GPT头有一个备份,放在GPT磁盘的最后一个扇区,但这个GPT头备份并非完全GPT头备份,某些参数有些不一样。复制的时候根据实际情况更改一下即可。
  6. 分区表备份(LBA -33~-2):分区区域结束后就是分区表备份,其地址在GPT头备份扇区中有描述。分区表备份是对分区表32个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也能够保证正常识别分区。GPT的分区结构相对于MBR要简单许多,并且分区表以及GPT头都有备份。
    在这里插入图片描述

欲知详情,可参考:
详解MBR分区结构以及GPT分区结构
GUID Partition Table


2.3 常用磁盘分区管理命令:fdisk,parted,sfdisk

  • 查看分区(注意需要root):
    fdisk -l [DEVICE]...

如图所示,命令后不加[DEVICE]就会列出所有磁盘的所有分区。
在这里插入图片描述
下图即为sda设备的分区情况
在这里插入图片描述

  • 创建分区
    fdisk [DEVICE]

fdisk创建的分区是一个交互式界面,有许多子命令

	p:显示磁盘分区表
	n:new,新建分区
	d:delete,删除分区
	t:修改分区的系统ID
	l:列表出所有已有的系统ID
	w:保存并退出
	q:不保存退出

例子:创建一个5G的主分区。
在这里插入图片描述

  • 查看内核是否已经识别新的分区:
    cat /proc/partitions

查看上一步建立的分区是否被内核识别。
在这里插入图片描述

对于已经有分区处于使用状态的磁盘来讲,新建分区后需要让内核重读其分区表:
CentOS 5:partprobe [DEVICE]
CentOS 6、7:partx -a [DEVICE] kpartx -af [DEVICE]

  • partedsfdiskfdisk的用法类似

3 磁盘文件系统

磁盘进行分区后,并不能直接使用,还得进行格式化(format)并挂载之后才能被系统所使用。格式化之后的文件系统(filesystem)有众多种类,常用的有ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap等。


3.1 创建文件系统命令:mkfs,mke2fs,mkswap,blkid,e2label,tune2fs

  • mkfs命令:make file system
	-t {ext2|ext3|ext4}:指定文件系统
	-b {1024|2048|4096}:指定块大小
	-L LABEL:打标
	-j:想当于-t ext3
	-i #:每多少字节给创建一个inode,此字节数不应该小于块大小
	-N #:直接指定可用的inode数
	-m #:指定预留空间占整个分区空间的百分比;默认为5
	-O:制定分区特性
  • mke2fs:对于ext系列文件系统有个专用的管理工具。
同mkfs
	-t {ext2|ext3|ext4}:指定文件系统
	-b {1024|2048|4096}:指定块大小
	-L LABEL:打标
	-j:想当于-t ext3
	-i #:每多少字节给创建一个inode,此字节数不应该小于块大小
	-N #:直接指定可用的inode数
	-m #:指定预留空间占整个分区空间的百分比;默认为5
	-O:制定分区特性
  • mkswap:创建交换分区swap,需提前调整设备分区类型为8e
  • blkid:查看指定块设备的属性信息
blkid [OPTION]...[DEVICE]
	-L '卷标名':可以查看到卷标名所对应的磁盘分区
	-U ‘UUID’:可以查看到UUID所对应的磁盘分区
  • e2label:管理ext系列的卷标
e2label DEVICE [LABEL]
  • tune2fs:重新设定ext系列文件系统中可调整参数的值
	-l:查看指定文件系统的超级块信息:
		#tune2fs -l DEVICE
		#dumpe2fs -h DEVICE

	修改分区属性:块大小无法调整
	-j:ext2 -->ext3
	-L LABEL:修改卷标
	-m #:修改预留空间百分比
	-O [^]FEATURE:启用制定特性,特性前加^,表示关闭此种特性
	-o [^]mount-option:开启或关闭指定的挂载选项
	-U UUID:修改UUID

举个例子:把已创建的分区格式化为ext4文件系统,要求block大小为2048,预留空间20%,卷标为MYDATA。
mkfs -t ext4 -b 2048 -m 20 -L MYDATA /dev/sda1
在这里插入图片描述


3.2 文件系统检测命令:fsck、e2fsck

因进程意外中止或系统崩溃等情况导致写入操作非正常中止时,可能会导致文件损坏;此时,因该修复文件系统,注意:需要离线修复

  • fsck
-t:fstype
-a:自动修复错误
-r:交互式修复错误
  • e2fsck:专用于修改ext系列文件系统
-y:对文艺自动回答为yes
-f:强制进行检测

3.3 文件系统的挂载命令:mount,swapon

磁盘分区要想被使用必须先挂载,所谓挂载是指将额外的分区与根文件系统上的某目录建立关联关系的过程(默认只有管理员才有权限)。如果该目录中有文件,则目录中的原有文件会被隐藏。

  • mount:挂载命令
mount DEVICE MOUNT_POINT
	DEVICE:所需挂载的磁盘分区
	MOUNT_POINT:挂载点,另一个文件系统的访问入口

固定挂载点:/mnt,/media
	mount [OPTION]..[-t fstype] [-o option] 设备 挂载点
	挂载点需要具备以下两点:
		1. 事先存在;
		2. 使用空闲目录;

常用的挂载选项:
	-t fstype:指定文件系统类型
	-r:readonly,只读挂载
	-w:read and write,读写挂载
	-L LABEL:以卷标方式指定设备,mount -L MYDATA挂载点
	-a:自动挂载所有(/etc/fstab文件中定义的)的支持自动挂载设备
	-n:挂载时,不更新/etc/mtab文件
	-B, --bind:绑定目录到另一个目录上
	-o option:
		async:异步I/O,数据写操作先于内存完成,而后再根据某种策略同步至持久设备中
		sync:同步I/O
		atime/noatime:文件和目录被访问时是否更新最近一次的访问时间戳
		auto/noauto:设备是否支持mount的-a选项自动挂载
		diratime/nodiratime:目录被访问时是否更新最近一次的访问时间戳
		dev/nodev:是否支持在此设备上使用设备
		exec/noexec:是否允许执行此设备上的二进制程序文件
		suid/nosuid:是否支持在此设备的文件上使用suid
		remount:重新挂载,通常用于不卸载的情况下重新指定挂载选项
		ro:只读
		rw:读写
		user/nouser:是否允许普通挂载此文件设备
		acl:使此设备支持使用facl,默认不支持
		注意:1.上述选项可多个同时使用,彼此之间用逗号隔开;2.默认挂载选项:rw,suid,dev,exec,auto,nouser,async
  • swapon:挂载交换(swap)分区
	-a:激活所有交换分区
	-p:priority,指定优先级(用数字来表示)
  • swapoff:取消挂在交换分区
-a:禁用所有

注意:如果想要设备自动挂载,需要在配置文件/etc/fstab中更改

举个栗子:将已格式化好的/dev/sda1分区挂载至/mnt目录,要求禁止程序自动运行,且不更新文件的访问时间戳。
mount -o noexec,nodiratime,remount /dev/sda1 /mnt


3.4 文件系统信息查看命令:free,df,du

  • free:内存及交换分区的使用信息查看
  • df:disk free,查看设备的使用情况
  • du:查看某目录空间的占用情况

三种方式查看所有已经挂载的设备:

  1. mount
  2. cat /proc/mounts
  3. cat /etc/fstab

3.5 文件系统的卸载:unmount,fuser

在卸载前先查看哪些设备正在访问挂载的设备:
fuser -v 挂载点

如果有程序正在使用该设备,则需要中止正在此挂载点的进程:
fuser -km 挂载点

没有被进程访问时便可卸载:
unmount DEVICE


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值