linux 笔记 / 3.分区-格式化-挂载

1.查看磁盘(fdisk)

当你添加一个新的硬盘后,使用 fdisk -l 命令来查看系统中新添加硬盘,下图显示一块新添加并且没有进行分区的硬盘。

获取到硬盘的路径 /dev/sde 后就可以开始为硬盘创建分区。

2.创建分区(fdisk)

运行命令 sudo fdisk /dev/sde 后进入 fdisk 分区菜单选项,在菜单上下文中可以对硬盘的分区信息进行编辑。

输入 m 命令可以查看所有的命令。

使用 p 命令查看硬盘与分区信息。

使用 n 命令创建一个新的分区,默认是 GPT 分区格式。过程中需要输入分区的起点与终点。

之前的操作并未实际写入硬盘,最后我们输入 w 命令后就可以将之前所有的修改写入硬盘。

3. 格式化分区

在硬盘分区创建完成就可以为分区进行文件系统的初始化即格式化分区。在 linux 的 /sbin 目录中有多个对应不同格式的 mkfs 程序,如下面的列表所示:

  • mkfs.bfs
  • mkfs.cramfs
  • mkfs.ext2
  • mkfs.ext3
  • mkfs.ext4
  • mkfs.fat
  • mkfs.minix
  • mkfs.msdos
  • mkfs.ntfs
  • mkfs.vfat

下面的实例中,我们使用 mkfs.ext4 命令来为 /dev/sde1 分区创建文件系统。


4.挂载分区

分区格式化完成后,我们就可以挂在分区到指定目录来使用分区了。
挂在命令:以上面的分区路径 /dev/sde1 为例将分区挂在到 /mnt/disk1目录, 命令为 mount /dev/sde1 /mnt/disk1

5.自动挂载

如果需要在系统重启后分区能够自动被挂载需要修改配置文件 /etc/fstab。具体操作可参考 这盘文章

参考资料:
Linux磁盘操作:分区、格式化、挂载 – 知乎 (zhihu.com)
Ubuntu Manpage: fdisk – manipulate disk partition table
Ubuntu Manpage: mkfs – build a Linux filesystem
Ubuntu Manpage: mount – mount a filesystem

linux 查看磁盘信息常用命令

请将命令中的 /dev/sdx 替换为你指定的硬盘。

命令说明
df -h显示文件系统的磁盘空间使用情况
du -sh *查看当前目录下文件与文件夹的大小
sudo hdparm -I /dev/sdx查看硬盘参数
sudo hdparm -C /dev/sdx查看磁盘运行状态
sudo smartctl -a /dev/sdx查看硬盘 smart 信息
sudo smartctl -H /dev/sdx硬盘健康检查
lsblk显示系统中块设备
sudo blkid /dev/sdx查看块设备的PTUUID 和 PTTYPE
lshw显示系统中所有硬件设备的详细信息

linux 笔记 / 2.文件系统

上一篇介绍了分区格式,相比于主流的分区格式 MBR 和 GPT,文件系统的格式要多很多。

在完成磁盘分区后,每个空白的分区就是给操作系统保存文件的仓库,操作系统为了管理文件需要以特定的格式保存文件,这个格式需要支持文件的读写,检索,权限,日志记录等功能,也就是为操作系统提供管理磁盘空间以及其中的文件的机制。

下表列举了常用操作系统使用的文件系统。

文件系统 开发者发布年份原操作系统
FAT32Microsoft1996Windows 95
exFATMicrosoft2006Windows CE 6.0 / XP SP3 / Vista SP1
NTFSMicrosoft1993Windows NT 3.1
ext4开源2006Linux
HFS+Apple1998Mac OS 8.1
常见的文件系统

常见文件系统的特性

分区格式最大单个文件最大支持分区
FAT324G2TB
exFAT127 PB64 ZB
NTFS16 EB16 EB
ext416 TB1 EB
HFS+8 EB8 EB
常见文件系统特性,在不同簇大小以及不同版本上上述参数可能会不一样,且部分数据仅为理论值


1ZB = 1024EB,1EB = 1024PB,1PB = 1024TB,1TB = 1024GB

FAT (File Allocation Table)

FAT文件系统系列包括 FAT、FAT16、FAT32 和 exFAT ,目前仍旧常见的是FAT32 和 exFAT,源于它良好的兼容性目前在U盘上用的比较多。其中exFAT 就是一种适用于闪存的文件系统。2019年8月,微软公开了exFAT 的技术文档,并支持将 exFAT 功能集成到 Linux内核中。Linux内核于版本5.4中提供初步支持。

NTFS (New Technology File System)

NTFS 包含多个版本,最早为 1993 年发布的 1.0 版本,以及最新的于 Window XP 发布的 3.1 版本,对应系统中 NTFS.sys 文件的版本号 5.1,需要注意区别。
在 linux 系统上,完整并安全的对 NTFS 的读写功能由 NTFS-3G 驱动程序提供。这是一个由 Tuxera 公司开发并维护的自由软件项目,采用GNU通用公共许可证发布,旨在为非微软Windows NT 系的操作系统提供安全快速、具备读写功能的NTFS文件系统驱动程序。

ext (extended filesystem)

ext 系列文件系统包括 ext、ext2、ext3 和 ext 4。其中的 ext或ext1 发表于1992年4月,它是第一个利用虚拟文件系统实现出的文件系统,在linux核心0.96c版中首次加入支持,最大可支持2GB的文件系统。后续版本特性如下表,

名称开发者发布时间最大文件最大分区
ext2Rémy Card19932TB32TB
ext3Stephen Tweedie19992TB32TB
ext4多人[1]200616 TB1 EB

其中 ext4 于 2008年12月25日在 Linux 2.6.29 版公开发布之后成为 Linux 官方建议的默认文件系统。

参考资料
文件系统的对比 – 维基百科,自由的百科全书 (wikipedia.org)
NTFS – 维基百科,自由的百科全书 (wikipedia.org)
exFAT – 维基百科,自由的百科全书 (wikipedia.org)
ext4 – 维基百科,自由的百科全书 (wikipedia.org)

linux 笔记 / 1.磁盘分区

本文的内容并不特定于 linux,只是作为后续学习的一个基础。

一块磁盘需要分区后才能被操作系统使用,那么分区具体是什么样的呢?
目前两种最主流的分区格式是 MBR(Master Boot Record) 和 GPT(GUID Partition Table)。下面这张表说明了两种分区格式的主要特点。

分区分区数量最大分区容量始于固件支持
MBR4个主分区+扩展分区2TiB1983BIOS
GPT128个主分区512B扇区磁盘8ZiB
4KB扇区磁盘64ZiB
20世纪90年代后期UEFI

在创建特定的分区后会在磁盘上写入分区表信息,其中 MBR 分区表的长度为512字节,从磁盘的0柱面,0磁头,1扇区开始写入。在这512字节的数据中,前446字节为引导程序代码,之后的64字节即为MBR的分区信息,最后还有两位结束标志(55AA)。具体可参考下面两张图,一张为MBR位于磁盘位置示意,另一张为MBR数据结构图。

磁盘数据结构示意
MBR数据结构

在介绍 GPT 格式之前先介绍 LBA 概念,磁盘的一个扇区为512字节,现在由于 4K 扇区磁盘的出现,所以引入逻辑区块地址(LBA, Logical Block Address)概念, LBA 在一般磁盘是 512字节,在 4K 磁盘上就是 4K。
GPT 使用34个LBA来记录信息,其中的第一部分 LAB0 为 Protectiv MBR, 这块区域是为了提供最基本的向后兼容 ,不至于在旧系统上让系统认为这块磁盘还未被分区,以减少意外删除。
之后的LAB1称为 Primary GPT Header,它保存了磁盘以及分区表的信息。之后的 LBA2~LAB34 都用于保存分区表,每个LBA 可保存四个分区信息,总共可保存128个分区的信息。

GPT 分区信息格式
Primary GPT Header 数据结构

对于GPT分区信息相对于 MBR 有一点比较特殊,GPT 分区会在磁盘的尾部,即 LBA-1 至 LBA-34 备份一份 GPT 分区信息以提高分区信息的完整性和健壮性。

GPT 分区信息的 bootloader code 并不是保存在分区信息中的,对于作为启动盘的 GPT 磁盘会有一个专门的 EFI 分区来保存启动程序。

除了 MBR 和 GPT,还有一些历史上的或者并不常见的分区格式,有兴趣的可参考下图再深入研究。

参考资料:
MBR VS GPT | What’s the Difference and Which Is Better – EaseUS
GUID Partition Table – Wikipedia
Where is the bootloader located in GPT-based drives? – Quora