Linux磁盘及文件系统管理

磁盘(Hard Disk Drive,简称HDD)是一种存储介质,传统的机械硬盘由一个或多个铝制或玻璃制的碟片组成,碟片外覆盖有铁磁性材料。

磁盘的物理结构一般由磁头与碟片、电动机、主控芯片与排线等部件组成;当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正 面还是反面的碟面,磁头悬浮在碟面上画出一个与碟片同心的圆形轨道(磁轨或称柱面),这时由磁头的磁感线圈感应碟面上的磁性与使用硬盘厂商指定的读取时间 或数据间隔定位扇区,从而得到该扇区的数据内容;

磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面画出一个圆形轨迹,这些圆形轨迹就叫做磁道或磁轨(Track)。

柱面:在有多个盘片构成的盘组中,有不同盘片的面,但处于同一半径圆的多个磁道组成一个圆柱面(Cylinder)。

扇区:磁盘上的每个磁道被分为若干个弧段,这些弧段便是磁盘的扇区(Sector),通常每个扇区大小为512Bytes。

磁道(Track)柱面(Cylinder)扇区(Sector)磁头(Heads)盘片(Platters)每个碟片都有两面,因此也会相对应每碟片有2个磁头。

A:磁道 B:扇面 C:扇区 D:簇(扇区组)在硬盘上定位某一数据记录位置—C扇区,使用了三维定位。

磁盘分区格式:类型有"bsd", "dvh", "gpt","loop", "mac", "msdos(mbr)", "pc98", or "sun",这里简要说明其中两种常用格式。

MBR:主 引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)= (0,0,1)。大小为512Bytes,其中446Bytes用于装载引导程序(bootloader),如grub和 ntloader;64Bytes保存分区表,16Bytes标记一个主分区,所以最多只能支持4个主分区;2Bytes用于标记MBR有效性标记,固定 格式 5A。在MBR分区表中,一个分区最大的容量为2T,且每个分区的起始柱面必须在这个disk的前2T内

GPT:全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准。在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。为了保护分区表,GPT的分区信息在每个分区的头部和尾部各保存了一份。GPT磁盘分区样式支持最大卷为18 EB(Exabytes)并且每磁盘的分区数没有上限,只受到操作系统限制。

文件系统:主要类型有,"ext(2,3,4)", "xfs", "ffs", "ufs", "reiserfs", "jfs", "vfat(fat32)", "ntfs"

计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其存取和查找变得容易,文件系统使用文件和树形目录的 抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上, 只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系 统自动完成,用户只需要记住数据被写入到了哪个文件中。

文件系统通常使用硬盘和光盘这样的存储设备,并维护文件在设备中的物理位置。但是,实际上文件系统也可能仅仅是一种存取資料的界面而已,实际的数据是通过网络协议(如NFS、SMB、9P等)提供的或者内存上,甚至可能根本沒有对应的文件(如 proc文件系统)。

严格地说, 文件系统是一套实现了数据的存储、分级组织、存取和获取等操作的抽象数据类型(Abstract data type)。

磁盘分区:

以Centos发行版为例,可以通过fdisk或parted命令来管理磁盘分区,值得注意的是,fdisk不支持管理gpt格式,而parted则没有这个限制。

#fdisk命令用法,交互式界面,有许多子命令命令格式:fdisk [options] <disk> p: 显示磁盘分区表 n: new,新建分区 d: delete,删除分区 t: 修改分区的系统ID l: 列表出所有已经的系统ID w: 保存并退出 q: 不保存退出

示例:在磁盘上创建并删除一个分区

[root@qin ~]# fdisk -cu /dev/sdb #为方便显示,关闭dos兼容模式并以扇区为显示单位,默认为柱面Command (m for help): n #新建一个分区Command action e extended p primary partition (1-4)p #指定为主分区Partition number (1-4): 1 #分区编号First sector (2048-10485759, default 2048): #选择起始扇区Using default value 2048Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +2G #指定分区大小Command (m for help): t #修改分区系统IDSelected partition 1Hex code (type L to list codes): 83 #指定ID为83Command (m for help): w #保存退出The partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks. [root@qin ~]# fdisk -l /dev/sdb #查看分区Disk /dev/sdb: 5368 MB, 5368709120 bytes54 heads, 48 sectors/track, 4045 cylindersUnits = cylinders of 2592 * 512 = 1327104 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000c5da6 Device Boot Start End Blocks Id System/dev/sdb1 1 1619 2097152 83 Linux[root@qin ~]# fdisk -cu /dev/sdbCommand (m for help): d #删除一个分区Partition number (1-4): 1 #指定需要删除的分区Command (m for help): w #保存退出The partition table has been altered!

注意:对于已经有分区处于使用状态的磁盘来讲,新建分区后需要让内核重读其分区表

[root@qin ~]# partx -a /dev/sdb[root@qin ~]# kpartx -af /dev/sdb

用parted命令管理磁盘,交互操作或非交互都可以

#命令格式:parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...] align-check TYPE N #check partition N for TYPE(min|opt) alignment check NUMBER #对文件系统做一个简单检测 cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER #将文件系统复制到另一分区 help [COMMAND] #显示命令帮助信息 mklabel,mktable LABEL-TYPE #创建一个新的磁盘标签 mkfs NUMBER FS-TYPE #在分区上创建文件系统 mkpart PART-TYPE [FS-TYPE] START END #创建一个分区 mkpartfs PART-TYPE FS-TYPE START END #创建一个带有文件系统的分区 move NUMBER START END #移动分区到当前磁盘的另一位置 name NUMBER NAME #设置分区名称 print [devices|free|list,all|NUMBER] #显示分区表,可用设备,可用空间 quit #退出命令 rescue START END #恢复指定磁盘区间内丢失的分区 resize NUMBER START END #resize partition NUMBER and its file system rm NUMBER #删除分区 select DEVICE #选择需要编辑的设备 set NUMBER FLAG STATE #标记一个分区 toggle [NUMBER [FLAG]] #toggle the state of FLAG on partition NUMBER unit UNIT #set the default unit to UNIT version #display the version number and copyright information of GNU Parted

示例:创建一个GPT格式的分区,大小为2G,起始点为1G,终止点为3G;然后更改此分区的位置区间;最后删除此分区并试图恢复。

[root@qin ~]# parted /dev/sdb mklabel gpt #标记磁盘格式为gpt[root@qin ~]# parted /dev/sdb mkpart primary ext2 1G 3G #创建一个2G大小,文件系统为ext2的主分区;似乎只支持ext2[root@qin ~]# parted /dev/sdb print #显示分区Model: VMware Virtual disk (scsi)Disk /dev/sdb: 5369MBSector size (logical/physical): 512B/512BPartition Table: gptNumber Start End Size File system Name Flags 1 1000MB 3000MB 2000MB ext2 primary[root@qin ~]# parted /dev/sdb move 1 3G 5G #移动编号为1的分区的位置区间,即从原来1G-3G移动到3G-5G[root@qin ~]# parted /dev/sdb rm 1 #删除编号为1的分区[root@qin ~]# parted /dev/sdb rescue 3G 5G #搜索此位置区间的分区,以便恢复

创建文件系统:可通过命令mkfs和mke2fs来创建,其中mke2fs是创建ext系列文件系统的专有命令。

ext系列文件系统如图所示:

1、启动扇区(Boot Sector):每个文件系统都会创建一个启动扇区,可用与多系统导。

2、块组(Block Group):每个块组大小一样

3、超级块(Super Block):记录整个文件系统相关信息。包括block和inode的总量、数量、大小(block为1,2,4K,inode为128 Bytes);mount、fsck的时间;文件系统状态;块组信息;日志信息;别名信息。安全起见,超级块会备份在若干个块组内,大小一般为1K

4、文件系统描述(Filesystem Description):描述每个块组的开始和结束的block号码,以及说明每个区段(Super Block,Block Bitmap,Inode Bitmap,Data Block)分别介于哪个block号码之间。

5、块位图(Block Bitmap):记录block的状态,0为空闲可用,1为非空闲不可用。

6、Inode位图(Inode Bitmap):与块位图一样,记录Inode的状态,0为空闲,1为非空闲。

7、数据块(Data Block):实际储存文件内容数据的地方,ext文件系统支持的block大小有1K,2K,4K,创建文件系统时block大小和数量就固定了,每个block最多只能存一个文件,一个文件可占用多个block

管理文件系统的命令:

mke2fs:       #用于创建文件系统    -t {ext2|ext3|ext4}:指定文件系统 
    -b {1024|2048|4096}:指定块大小    -L LABEL: 卷标    -j: 等同于 -t ext3
    -i #: 每多少字节给创建一个inode,此字节数不应该小于块大小    -N #: 直接指定可用的inode数;    -m #: 指定预留空间占整个分区空间的百分比;默认为5;    -O:指定分区特性tune2fs:        #修改文件系统属性    -j:创建带日志功能的ext3文件系统    -L LABEL:修改卷标    -l DEVICE:查看超级块信息    -m #:修改预留管理空间百分比    -O [^]FEATURE:启用文件系统特性,特性前加^,表示关闭此种特性    -o [^]mount-options:开启或关闭指定的挂载选项dumpe2fs:      #查看文件系统信息    -b:列出保留为坏轨的部分    -h:仅列出superblock的数据    -x:以十六进制格式显示块组的详细信息e2label:       #查看或设置卷标    e2label DEVICE [LABEL]blkid:         #查看指定块设备的信息 e2fsck:        #专用于修复ext系列文件系统    -y:对问题自动回答为yes
    -f:强制进行检测

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-04-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏orientlu

FreeRTOS 任务通知

FreeRTOS 从版本 V8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照 FreeRTOS 官方的说法,使用消息通知比通过二进制信...

1842
来自专栏Java架构师历程

ssh工作原理

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

1363
来自专栏WindCoder

SSM笔记(一)框架整合

用了好久了,但都是当初大神配置完后直接粘贴复制过来的,一直没仔细看过相关配置,趁此机会对自己也算是一个复习与深入,也希望对初学者有所帮助。本系列均是基于IDEA...

1711
来自专栏程序猿

SQLmap命令的介绍

SQLmap这个工具的使用。(结尾有彩蛋) URL---> 判断注入的参数, 判断是使用的那种SQL注入 识别出那种数据库 根据用户的选择,读出数据 五种注入模...

3133
来自专栏技术博文

Linux环境下Swap配置方法

Linux环境下Swap配置方法 场景: 今天下午安装一个CentOS6.5操作系统,忘记配置swap分区。看看如何安装系统之后,增加和删除swap分区...

3666
来自专栏IT笔记

JavaWeb项目架构之Kafka分布式日志队列

架构、分布式、日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Kafka做消息队列罢了。

77710
来自专栏张戈的专栏

Linux系统crontab备份数据库执行不成功?可能是百分号%在作怪!

之前博客分享过一篇《Linux/vps 本地七天循环备份和七牛远程备份脚本》,我自己也一直在用。某天检查备份的时候,突然发现数据库的备份的压缩包是空的! 看了下...

3134
来自专栏SpringBoot 核心技术

第四十三章: 基于SpringBoot & RabbitMQ完成TopicExchange分布式消息消费

37215
来自专栏后端技术探索

PHP非阻塞模式

让PHP不再阻塞当PHP作为后端处理需要完成一些长时间处理,为了快速响应页面请求,不作结果返回判断的情况下,可以有如下措施:

1411
来自专栏互联网高可用架构

简单易用的消息队列框架的设计与实现

2412

扫码关注云+社区

领取腾讯云代金券