磁盘和文件系统

一、磁盘简介

计算机的外部存储器中也采用了类似磁带的装置,比较常用的一种叫磁盘,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失。

1、硬盘的chs模式

是指chs(Cylinder/Head/Sector)模式,很久以前,硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘.也就是硬盘盘片的每一条磁道都具有相同扇区数. 由此产生了所谓的3D参数 (Disk Geometry). 既磁头数(Heads),柱面数(Cylinders), 扇区数(Sectors pertrack),以及相应的寻址方式

  1. sector 扇区:在硬盘上每个磁道上的扇区用6bit标识,每个磁道最多标识64个扇区,每个扇区512byte
  2. track 磁道:磁道数等于磁头数,理论上256个
  3. head 磁头 :在硬盘上磁头用8bit标识,最多标识256个磁头
  4. cylinder 柱面 :在硬盘柱面用10bit标识,最多标识1024个柱面

磁盘容量计算方式:扇区大小*64*256*1024=8589934592=8G

因此早期的硬盘无法突破8G容量

2、LBA(logical block addressing)模式

以上这种方式会浪费很多磁盘空间 (与软盘一样). 为了解决这一问题, 进一步提高硬盘容量, 人们改用等密度结构生产硬盘.也就是说,外圈磁道的扇区比内圈磁道多. 采用这种结构后, 硬盘不再具有实际的3D参数, 寻址方式也改为线性寻址,即以扇区为单位进行寻址。

为了与使用3D寻址的老软件兼容 (如使用BIOS Int13H接口的软件), 在硬盘控制器内部安装了一个地址翻译器, 由它负责将老式3D参数翻译成新的线性参数.这也是为什么现在硬盘的3D参数可以有多种选择的原因 (不同的工作模式, 对应不同的3D参数,如 LBA, LARGE, NORMAL). CHS模式只能识别大硬盘的前面8G.lba使用的线性寻址,突破了1024柱面的限制,能访问8G以外的空间了。

LBA采用48个bit位寻址,最大寻址空间128PB。

ZBR(Zoned Bit Recording)

二、硬盘分区

磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分,盘片一旦划分成数个分区,不同类的目录与文件可以存储进不同的分区。越多分区,也就有更多不同的地方,可以将文件的性质区分得更细,按照更为细分的性质,存储在不同的地方以管理文件;但太多分区就成了麻烦。空间管理、访问许可与目录搜索的方式,依属于安装在分区上的文件系统。当改变大小的能力依属于安装在分区上的文件系统时,需要谨慎地考虑分区的大小。

1、硬盘为什要分区

  1. 优化I/O性能
  2. 实现磁盘空间配额限
  3. 提高修复速度
  4. 隔离系统和程序
  5. 安装多个OS
  6. 采用不同文件系统

2、分区表类型(MBR和GPT)

MBR: Master Boot Record 主引导记录

又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。

mbr分区用4个字节存储分区的总扇区数,最大能表示2的32次方的扇区个数,按每扇区512字节计算(2^32*512byte=2199023255552byte=2T),所以mbr无法识别大于2T以后的空间

0磁道0扇区:512bytes

446bytes:boot loader

64bytes:分区表,16bytes标识一个分区,支持4个分区,或者3个主分区和一个扩展分区

2bytes:分区标示位 55AA

MBR分区结构:

GPT: Globals Unique Identifiers

是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。对于那些扇区为512字节的磁盘,MBR分区表不支持容量大于2.2TB(2.2×1012字节)[1]的分区,然而,一些硬盘制造商(诸如希捷和西部数据)注意到这个局限性,并且将他们的容量较大的磁盘升级到4KB的扇区,这意味着MBR的有效容量上限提升到16 TiB。 这个看似“正确的”解决方案,在临时地降低人们对改进磁盘分配表的需求的同时,也给市场带来关于在有较大的块(block)的设备上从BIOS启动时,如何最佳的划分磁盘分区的困惑。GPT分配64bits给逻辑块地址,因而使得最大分区大小在264-1个扇区成为可能。对于每个扇区大小为512字节的磁盘,那意味着可以有9.4ZB(9.4×1021字节)或8 ZiB个512字节(9,444,732,965,739,290,426,880字节或18,446,744,073,709,551,615(264-1)个扇区×512(29)字节每扇区)

GPT支持128个分区,使用64位表示扇区,如果每个扇区是512Byte,理论上则支持8Z的磁盘。

使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表
自动备份在头和尾两份,并有CRC校验位
UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

gpt分区结构:

 

3、LINUX中的分区管理

LINUX中硬盘及分区工具的标识

在早期系统中硬盘的标识区分接口,比如IED接口的硬盘在/dev/以hd[a-z]标识,新系统中都以sd[a-z]来标识,不区分接口了

分区由数字来标识,比如硬盘是sda,那此硬盘的第一个分区为sda1,第二个为sda2,依次类推

在LINUX中一切皆文件,设备是以文件的方式标识,设备有主设备号和次设备号,主设备号表示不同类型的设备,次设备号表示同类设备的不同设备

LINUX中管理分区的工具

fdisk /dev/DISK

  • -l:列出分区信息
  • -c:使用非柱面模式
  • 交互式:
  • p:打印当前分区表
  • m:帮助
  • n:添加新分区
  • d:删除分区
  • w:保存退出
  • l:列出分区类型
  • t:修改分区类型
  • q 不保存并退出
[root@rhel6 ~]# fdisk /dev/sdb

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.


WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb484790b

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): +1G

Command (m for help): p

Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb484790b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

gdisk:用来管理gpt分区,用法和fdisk相似

parted /dev/DISK

  • mklabel {gpt|msdos} 设置硬盘的分区表类型,也可以进入交互式模式
  • -l:列出分区信息
  • 交互式
    (parted) help                                                             
     
      cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
      help [COMMAND]                           print general help, or help on COMMAND
      mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
      mkpart PART-TYPE [FS-TYPE] START END     make a partition
      mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
      quit                                     exit program
      rescue START END                         rescue a lost partition near START and END
      resize NUMBER START END                  resize partition NUMBER and its file system
      rm NUMBER                                delete partition NUMBER
      select DEVICE                            choose the device to edit
      set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
      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
[root@rhel6 ~]# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpartfs                                                         
WARNING: you are attempting to use parted to operate on (mkpartfs) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Partition name?  []?                                                      
File system type?  [ext2]? ext4                                           
Start? 0                                                                  
End? 1G                                                                   
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore                                                     
No Implementation: Support for creating ext4 file systems is not implemented yet.
(parted) print                                                            
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

(parted) mkpart
Partition name?  []? 
File system type?  [ext2]? ext4                                           
Start? 0                                                                  
End? 1G                                                                   
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore                                                     
(parted)                                                                  
(parted) print                                                            
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1000MB  1000MB

partprobe 同步分区表,但在红帽系列6.x上有bug

partx

  • -a /dev/sda 同步分区表(6.x),在增加分区出现不同步时使用
  • -d --nr m-n /dev/sda 同步分区表(6.x),在删除分区出现不同步时使用

lsblk 查看内存现在生效的分区表

三、文件系统

文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

[root@rhel6 ~]# ls /lib/modules/2.6.32-642.el6.x86_64/kernel/fs/ 列出系统支持的文件系统
autofs4     cramfs    ext3     gfs2   mbcache.ko  squashfs
btrfs       dlm       ext4     jbd    nfs         ubifs
cachefiles  ecryptfs  fat      jbd2   nfs_common  udf
cifs        exportfs  fscache  jffs2  nfsd        xfs
configfs    ext2      fuse     lockd  nls

Linux文件系统:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
光盘:iso9660
Windows:FAT32, exFAT,NTFS
Unix: FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统

Linux的虚拟文件系统:VFS

由于底层文件系统类型太多,从而导致程序调用复制,从而有VFS来作为一个统一接口,充当中间人的角色

[root@rhel6 ~]# cat /proc/filesystems 查看支持的文件系统
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cpuset
nodev   tmpfs
nodev   devtmpfs
nodev   binfmt_misc
nodev   debugfs
nodev   securityfs
nodev   sockfs
nodev   usbfs
nodev   pipefs
nodev   anon_inodefs
nodev   inotifyfs
nodev   devpts
nodev   ramfs
nodev   hugetlbfs
        iso9660
nodev   pstore
nodev   mqueue
nodev   drm
        ext4
nodev   autofs

LINUX管理文件的工具

mkfs.{ext4|ext3|xfs|...} 格式化指定设备分区

  -t FSTYPE:格式化指定设备分区

  -L:设定卷标

mke2fs ext系列专用管理工具

四、RAID管理

五、LVM

猜你喜欢

转载自www.cnblogs.com/L-dongf/p/8903344.html