存储器技术和linux下的磁盘管理工具介绍

1引言

声明

部分资料参考至网络,如有侵权请联系笔者删除。

编写目的

本文档主要是介绍磁盘管理技术以及linux下的磁盘管理工具。

术语及名词解释

Acronyms & AbbreviationsDescription
MBRMaster Boot Record 主引导记录(一种磁盘分区结构)
GPT GUIDPartition Table 全局唯一分区表(一种磁盘分区结构)
FAT FileAllocate Table 文件分配表(一种广泛使用的文件系统、FAT32)
exFATExtended File Allocation Table File 拓展文件分配表(又称FAT64)
NTFSNew Technology File System 新技术文件系统
extLinux extended file system linux扩展文件系统,目前发展到ext4
fdiskLinux下一种用于磁盘分区的工具
partedLinux下一种用于磁盘分区的工具

参考资料

链接: parted工具.
链接: 分区结构.
链接: 文件系统介绍.
链接: linux下的文件系统.

2 简介

本文主要介绍了目前常用的“分区结构”、“文件系统”以及“linux下的磁盘管理”工具。
分区结构:
 MBR分区结构
 GPT分区结构
磁盘类文件系统:
 FAT32
 NTFS
 exFAT
 ext
Flash类文件系统:
 jffs
 yaffs
 logfs
 cramfs
 romfs
 ubifs
RAM类文件系统:
 ramdisk
 tmpfs
磁盘管理工具:
 df
 fdisk
 parted
 mkfs
 fsck
 mount/umount

分区结构

3.1 MBR分区结构

MBR分区结构
MBR分区结构中的0号扇区又被称作“MBR”扇区,扇区大小512字节。其中包含3块内容:
 引导代码:引导代码占MBR分区的前440字节,负责整个系统启动。如果引导代码被破坏,系统将无法启动。
 磁盘签名:4个字节签名+0x00,0x00
 MBR分区表:引导代码后的64个字节,是整个硬盘的分区表。有四张分区表
 MBR结束标志:占MBR扇区最后2个字节,一直为“55 AA”。

3.1.1 MBR分区表

MBR一共占用64个字节,其中每16个字节为一个分区表项。也就是在MBR扇区中只能记录4个分区信息,可以是4个主分区,或者是3个主分区1个扩展分区。

字节偏移(hex)字段长度字段名和定义
1BE1B引导标志(Boot Indcator);指明该分区是否是活动分区。
1BF1B开始磁头(Start Head)
1C06b起始扇区(Start Sector)6位,6~7位被“起始柱面”占用
1C110b起始柱面(Start Cylinder):10位
1C21B分区类型(Partition type indicator);详见下表
1C31B结束磁头(END Head)
1C46b结束扇区(END Sector)6位,6~7位被“结束柱面”占用
1C510b结束柱面(End Cylinder):10位
1C64B扇区偏移量(Sectors preceding partiton)
1CA4B分区扇区数(Sectors in partition)。

3.1.2 拓展分区

MBR分区由于仅仅支持4个分区,为了使用更多的分区,从而引入了“拓展分区”的概念。在“拓展分区”中存在一个类似“MBR”的一个“拓展引导记录”(EBR)。EBR中不包含“引导代码”,即在EBR中前446个字节是空的。EBR中包含2个有效的内容:
 EBR分区表:有两个表项,第一个表项描述“逻辑分区”,第二个表项则指向下一个逻辑分区的EBR。
 EBR结束标志“55 AA”
在这里插入图片描述

3.2 GPT分区结构

GPT分区结构解决了MBR只有4个主分区的缺点,理论上而言,GPT磁盘结构对分区数量上是没有限制的,但是某些操作系统对此会有限制。
在这里插入图片描述

3.2.1 保护MBR

保护MBR位于GPT磁盘的第一个扇区,即0号扇区,其中的结构同传统的MBR结构一致,但是内容上有所不同:
 引导代码:占440个字节,但是内容是空的。
 磁盘签名:4字节+0x00,0x00
 MBR分区表:引导代码后的64个字节,只有一张分区表。
 MBR结束标志:占MBR扇区最后2个字节,一直为“55 AA”。
保护MBR的内容对于GPT分区本身而言是没有用处的,它的存在只是为了兼容MBR分区结构,让系统认为这个磁盘是合法的。

3.2.2 GPT头

GPT头位于GPT磁盘的第二个磁盘,也就是1号扇区,该扇区是在创建GPT磁盘时生成,GPT头会定义分区表的起始位置,分区表的结束位置、每个分区表项的大小、分区表项的个数及分区表的校验和等信息。

3.2.3 分区表

每个分区表项中记录着分区的起始,结束地址,分区类型的GUID,分区的名字,分区属性和分区GUID

3.2.4 分区区域

GPT分区区域就是用户使用的分区,也是用户进行数据存储的区域。分区区域的起始地址和结束地址由GPT头定义。

3.2.5 GPT头备份

GPT头有一个备份,放在GPT磁盘的最后一个扇区。

3.2.6 分区表备份

分区区域结束后就是分区表备份,其地址在GPT头备份扇区中有描述。分区表备份是对分区表32个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也能够保证正常识别分区。

3.3 两种分区结构的对比

分区结构MBRGPT
最大容量2TB18EB
主分区数量4无限制

注意:1EB=1024PB,1PB=1024 TB

4 常见文件系统

4.1 基于磁盘的文件系统

文件系统FAT32NTFSexFAT
操作系统Win 95 OSR2之后Windows2000之后Windows CE 6/Vista SP1/Windows 8
最小扇区512Bytes512Bytes512Bytes
最大扇区64KB64KB32768KB
最大单一文件2Bytes-4GB受最大分割容量16EB(理论值
最大格式化容量2TB(但NT内核系统限制为32GB)2TB~256TB(受MBR影响,GPT分区格式可以更大)16EB(理论值)(目前支持到256TB)
档案数量4194304至少可以大于1000
文件系统最大文件名长度最大文件大小最大分区大小
ext2255 bytes2 TB16 TB
ext3255 bytes2 TB16 TB
ext4255 bytes16 TB1 EB
XFS255 bytes8 EB8 EB
Btrfs255 bytes16 EB16 EB

4.2 基于FLASH的文件系统

Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦 除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为 单位进行的。
闪存主要有NOR和NAND两种技术(简单比较见附录)。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因 此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。
在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的(参见上 面的Linux下的文件系统结构图)。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有 更好的支持、管理和基于扇区的擦除、读/写操作接口。顺便一提,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。

4.2.1 jffs2

JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系 统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。
Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)
主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。
目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。
jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另 外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。
JFFS2
https://www.ibm.com/developerworks/cn/linux/l-jffs2/

4.2.2 yaffs

yaffs/yaffs2(Yet Another Flash File System)是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数 据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。
yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。
yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。

4.2.3 Cramfs

Cramfs(Compressed ROM File System)是Linux的创始人 Linus Torvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。
在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。
Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并 不代表比Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目 前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时 解压缩到RAM中。
另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
由于以上特性,Cramfs在嵌入式系统中应用广泛。
但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。
Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback 设备可以把它安装别的文件系统里。

4.2.4 Romfs

传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以 XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。

4.2.5 UBIFS

UBIFS最早在2006年由IBM与Nokia的工程师Thomas Gleixner,Artem Bityutskiy所设计,专门为了解决MTD(Memory Technology Device)设备所遇到的瓶颈。由于Nand Flash容量的暴涨,YAFFS等皆无法再去控制Nand Flash的空间。UBIFS通过子系统UBI处理与MTD device之间的动作。与JFFS2一样,UBIFS 建构于MTDdevice 之上,因而与一般的block device不兼容。
UBIFS在设计与性能上均较YAFFS2、JFFS2更适合MLC NAND FLASH。[1]例如:UBIFS 支持 write-back, 其写入的数据会被cache, 直到有必要写入时才写到flash, 大大地降低分散小区块数量并提高I/O效率。UBIFS文件系统目录存储在flash上,UBIFS mount时不需要scan整个flash的数据来重新创建文件目录。支持on-the-flight压缩文件数据,而且可选择性压缩部份文件。另外UBIFS使用日志(journal),可减少对flash index的更新频率。
https://www.cnblogs.com/youngerchina/p/5624559.html

4.3 基于RAM的文件系统

4.3.1 Ramdisk

Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。

4.3.2 ramfs/tmpfs

Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)
Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。
Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。

5 Linux下的磁盘管理工具

磁盘管理,即查看磁盘的信息(如大小、使用量、挂载点等等)、对磁盘进行分区、对磁盘中的某个分区格式化、检查或者修复磁盘中的某个分区等等。

5.1 df

显示文件系统的信息。
常用用法:
df –hT

5.2 fdisk

fdisk是一种磁盘分区工具,它默认采用MBR分区结构。因此它适用于小分区。但是较新的fdisk工具也支持建立GPT分区结构等其它类型的分区结构。
fdisk -l 列出系统下的磁盘设备
fdisk /dev/vdc 对vdc进行分区操作
5.3 parted
parted也是一种磁盘分区工具,与fdisk不同的是它默认采用GPT分区结构。因此它一般用于规划大小超过2T的分区,也可以用于小分区的规划。使用方法和fdisk工具类似。
parted -l 列出系统下的磁盘设备
parted /dev/vdc 对vdc进行分区操作

5.4 mkfs

磁盘分区格式化,分区分割完毕后,利用本工具来对磁盘中的某个分区进行格式化操作。
可以使用“-t”选项来指定文件系统类型,也可以直接使用mkfs.[fs]的方式来指定文件系统类型。
例如,格式化为fat32文件系统
mkfs.fat /dev/sdb1

5.5 fsck

文件系统检验,用于检查或者修复文件系统。
可以使用“-t”选项来指定文件系统类型,也可以直接使用fsck.[fs]的方式来指定文件系统类型。
例如,检查/dev/sdb1分区
fsck.vfat -a /dev/sdb1

5.6 mount/umount

文件系统挂载/卸载

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值