; Linux磁盘及文件系统管理 | Linux运维部落

Linux磁盘及文件系统管理

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

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

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

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

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

HDD.jpg1.png2.png

磁道(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 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +2G       #指定分区大小

Command (m for help): t        #修改分区系统ID
Selected partition 1
Hex code (type L to list codes): 83     #指定ID为83

Command (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 bytes
54 heads, 48 sectors/track, 4045 cylinders
Units = cylinders of 2592 * 512 = 1327104 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c5da6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1619     2097152   83  Linux
[root@qin ~]# fdisk -cu /dev/sdb

Command (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: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  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:强制进行检测

原创文章,作者:秦,如若转载,请注明出处:/3298

评论列表(1条)

  • stanley
    stanley 2015-04-20 22:02

    从底层到实战均有介绍提及,不过有图无法正常显示,请查检

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达娱乐直属  万达娱乐开户  万达直属  华宇招商  万达娱乐主管  万达娱乐主管QQ  guoqibee.com  万达娱乐  万达娱乐直属  万达娱乐注册