Linux 磁盘和文件系统

1.分区

MRB(Master Boot Recorder)MBR(MasterBoot Recorder)主引导分区仅提供最多4个分区,主分区(Primary,P)与扩展分区(Extended,E),如3P+1E,扩展分区最多只能有1个

基本MBR结构

偏移量(位置)(within sector)

长度(inbytes)

解释

十进制

十六进制

000 – 445

000 – 1BD

446

引导程序

446 – 509

1BE – 1FD

64

分区表

510 – 511

1FE – 1FF

2

引导记录

16-byte分区表结构

RelativeOffsets(within entry)

长度

(bytes)

内容

0

1

引导标记 (80h =active)

1 – 3

3

CHS 开始位置

4

1

分区类型描述

5 – 7

3

CHS 结束位置

8 – 11

4

启始扇区

12 – 15

4

分区大小 (扇区单位)

MBR 永远占用了第一个扇区,通常为512bytes大小。在这512bytes中被MBR本身的程序用去了446bytes。于是,真正描述分区信息的就只有 64 bytes。而根据4个主分区的设计,每一个分区能用到的只有 16bytes. 那么!这16bytes是如何工作的?在表2中,有2个“开始位置”,我们分开理解。

硬盘的历史过程中,第一个遇到的问题就是 8G 瓶颈。这就是因为在 CHS 描述方式中,描述起点和终点均为3个 byte。我们假设是 FF FFFF ,所以是16*16*16*16*16*16*512=8589934592这就是 8G 瓶颈的由来了。

但是今天 CHS 方式几乎已经不用了。后面还有 4 个 bytes 的“启始” 是给 LPA 方式用的。

他的极限就是 8589934592 * 256 =2199023255552 这就是 2T 的限制由来了。

在硬盘容量的历史中,有很多因素决定了它的限制。BIOS,ATA(IDE),文件系统。

GBT (Globally Uniqueidentifier Partition Table Format)

GPT头的基本结构

起始字节

长度

内容

0

8字节

签名(”EFI PART”, 45 46 49 20 50 41 52 54)

8

4字节

修订(比如,1.0,值是 00 00 01 00)

12

4字节

分区表头的大小(单位是字节,通常是92字节,即 5C 00 00 00)

16

4字节

分区表头前3项(第0-15字节)的CRC32校验,如果值正在计算,则是 0

20

4字节

保留,必须是 0

24

8字节

当前LBA(这个分区表头的位置)

32

8字节

备份LBA(备份分区表头的位置)

40

8字节

第一个可用于分区的LBA(主分区表的最后一个LBA + 1)

48

8字节

最后一个可用于分区的LBA(备份分区表的最后一个LBA ? 1)

56

16字节

硬盘GUID(在类UNIX系统中也叫UUID)

72

8字节

分区表项的起始LBA(对于主分区表来说,这个值是 LBA 2)

80

4字节

分区表的数量

84

4字节

一个分区表的大小(通常是128)

88

4字节

分区串行的CRC32校验

92

*

保留,剩余的字节必须是0(对于512字节LBA的硬盘即是420个字节)

GPT分区表项的格式 起始字节 长度 内容

016字节分区类型GUID1616字节分区GUID328字节起始LBA(小端序)408字节末尾LBA488字节60表示“只读”)5672字节分区名(可以包括36个UTF-16(小端序)字符)

GPT磁盘与MBR磁盘 GPT(Globally Unique Identifier Partition TableFormat)一种由基于 Itanium 计算机中的可扩展固件接口 (EFI) 使用的磁盘分区架构。与主启动记录 (MBR)分区方法相比,GPT具有更多的优点,因为它允许每个磁盘有多达128 个分区,支持高达18 千兆兆字节的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区ID (GUID)。 与支持最大卷为 2 TB (terabytes)并且每个磁盘最多有4 个主分区(或3 个主分区,1个扩展分区和无限制的逻辑驱动器)的主启动记录(MBR)磁盘分区的样式相比,GUID分区表(GPT)磁盘分区样式支持最大卷为18 EB (exabytes)并且每磁盘最多有128 个分区。与MBR 分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有多余的主要及备份分区表来提高分区数据结构的完整性。 在运行带有 Service Pack 1 (SP1) 的WindowsServer 2003 的基于 x86 的计算机和基于 x64 的计算机上,操作系统必须驻留在 MBR 磁盘上。其他的硬盘可以是 MBR 或 GPT。 在基于 Itanium 的计算机上,操作系统加载程序和启动分区必须驻留在 GPT 磁盘上。其他的硬盘可以是MBR 或GPT。 在单个动态磁盘组中既可以有 MBR,也可以有GPT 磁盘。也使用将基本GPT 和MBR 磁盘的混合,但它们不是磁盘组的一部分。可以同时使用MBR 和GPT 磁盘来创建镜像卷、带区卷、跨区卷和RAID-5 卷,但是MBR 的柱面对齐的限制可能会使得创建镜像卷有困难。通常可以将MBR 的磁盘镜像到GPT 磁盘上,从而避免柱面对齐的问题。可以将MBR 磁盘转换为GPT 磁盘,并且只有在磁盘为空的情况下,才可以将GPT 磁盘转换为MBR 磁盘。否则数据将发生丢失!!! 不能在可移动媒体,或者在与群集服务使用的共享 SCSI 或Fibre Channel 总线连接的群集磁盘上使用GPT 分区样式

基本磁盘与动态磁盘 磁盘的使用方式可以分为两类:一类是“基本磁盘”。基本磁盘非常常见,我们平时使用的磁盘类型基本上都是“基本磁盘”。“基本磁盘”受26个英文字母的限制,也就是说磁盘的盘符只能是26个英文字母中的一个。因为A、B已经被软驱占用,实际上磁盘可用的盘符只有C~Z24个。另外,在“基本磁盘”上只能建立四个主分区(注意是主分区,而不是扩展分区);另一种磁盘类型是“动态磁盘”。“动态磁盘”不受26个英文字母的限制,它是用“卷”来命名的。“动态磁盘”的最大优点是可以将磁盘容量扩展到非邻近的磁盘空间。 动态硬盘,是指在磁盘管理器中将本地硬盘升级得来的。动态磁盘与基本磁盘相比,最大的不同就是不再采用以前的分区方式,而是叫做卷集(Volume),卷集分为简单卷、跨区卷、带区卷、镜像卷、RAID-5卷。基本磁盘和动态磁盘相比,有以下区别: 1、卷集或分区数量。动态磁盘在一个硬盘上可创建的卷集个数没有限制。而基本磁盘在一个硬盘上只能分最多四个主分区。 2、磁盘空间管理。动态磁盘可以把不同磁盘的分区创建成一个卷集,并且这些分区可以是非邻接的,这样的大小就是几个磁盘分区的总大小。基本磁盘则不能跨硬盘分区并且要求分区必须是连续的空间,每个分区的容量最大只能是单个硬盘的最大容量,存取速度和单个硬盘相比也没有提升。 3、磁盘容量大小管理。动态磁盘允许我们在不重新启动机器的情况下调整动态磁盘大小,而且不会丢失和损坏已有的数据。而基本磁盘的分区一旦创建,就无法更改容量大小,除非借助于第三方磁盘工具软件,比如PQMagic。 4、磁盘配置信息管理和容错。动态磁盘将磁盘配置信息放在磁盘中,如果是RAID容错系统会被复制到其他动态磁盘上,这样可以利用RAID-1的容错功能,如果某个硬盘损坏,系统将自动调用另一个硬盘的数据,保持数据的完整性。而基本磁盘将配置信息存放在引导区,没有容错功能。 基本磁盘转换为动态磁盘可以直接进行,但是该过程是不可逆的。要想转回基本磁盘,只有把所有数据全部拷出,然后删除硬盘所有分区后才能转回去。

2. 文件系统

查看linux支持的文件系统:ls -l /lib/modules/’uname -r’/kernel/fs

[root@holandstonestone]# ls -l /lib/modules/2.6.32-220.el6.x86_64/kernel/fstotal 132drwxr-xr-x. 2 root root 4096 Feb 4 14:21 autofs4drwxr-xr-x. 2 root root 4096 Feb 4 14:21 btrfsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 cachefilesdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 cifsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 configfsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 cramfsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 dlmdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 ecryptfsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 exportfsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 ext2drwxr-xr-x. 2 root root 4096 Feb 4 14:21 ext3drwxr-xr-x. 2 root root 4096 Feb 4 14:21 ext4drwxr-xr-x. 2 root root 4096 Feb 4 14:21 fatdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 fscachedrwxr-xr-x. 2 root root 4096 Feb 4 14:21 fusedrwxr-xr-x. 2 root root 4096 Feb 4 14:21 gfs2drwxr-xr-x. 2 root root 4096 Feb 4 14:21 jbddrwxr-xr-x. 2 root root 4096 Feb 4 14:21 jbd2drwxr-xr-x. 2 root root 4096 Feb 4 14:21 jffs2drwxr-xr-x. 2 root root 4096 Feb 4 14:21 lockd-rwxr–r–. 1 root root 19920 Nov 9 21:53 mbcache.kodrwxr-xr-x. 2 root root 4096 Feb 4 14:21 nfsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 nfs_commondrwxr-xr-x. 2 root root 4096 Feb 4 14:21 nfsddrwxr-xr-x. 2 root root 4096 Feb 4 14:21 nlsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 squashfsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 ubifsdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 udfdrwxr-xr-x. 2 root root 4096 Feb 4 14:21 xfs

[root@holandstonestone]# ls -l /lib/modules/2.6.32-220.el6.x86_64/kernel/fs |wc

30 263 1441

查看linux系统当前已启用的文件系统:cat /proc/filesystems

[root@holandstonestone]#cat /proc/filesystems

nodev sysfsnodev rootfsnodev bdevnodev procnodev cgroupnodev cpusetnodev tmpfsnodev devtmpfsnodev binfmt_miscnodev debugfsnodev securityfsnodev sockfsnodev usbfsnodev pipefsnodev anon_inodefsnodev inotifyfsnodev devptsnodev ramfsnodev hugetlbfs iso9660nodev pstorenodev mqueuenodev selinuxfs ext4nodev rpc_pipefsnodev autofs

银盘最小的存储单位:扇区(1扇区=512byte)

逻辑块(Block):在分区进行文件系统格式化时所制定的“最小存储单位”

1个block最多只能容纳1个文件

在进行分区时,每个分区就是一个文件系统,每个文件系统开始位置的那个block称为superblock(超级块),访问数据时,首先经过的时superblock,所以若superblock坏了,磁盘也就不能工作了。

 3、 EXT2文件系统(inode)

  1)Ext2规划出inode表和block区域.

 Inode:存储文件属性,以及文件内容放在哪个block中(pointer),1个inode:128byte

  Block:存储文件内容

  2)inode表记录的信息有:

  文件的拥有者与用户组(owner/group)

  文件的访问模式(read/write/excute)

  文件类型(type)

  文件的建立或状态改变时间(ctime)、最近读取时间(atime)、最近修改时间(mtime)

  文件大小

  定义文件属性的标志(flag)

  文件正真内容的指针(pointer)

  **Ls命令的默认时间是mtime(ex:ls –la –time=atime PATH)

  3)Linux如何读取文件内容?

  (1)目录:在ext2建立一个目录时,ext2会分配给该目录一个inode和至少一个block

  Inode:记录该目录的属性和指向分配到的那个block

  Block:记录这个目录下文件或目录的关联性

  (2)文件:在ext2建立一个文件时,ext2会分配给至少一个inode和相对于该文件大小的block数量

  Inode:记录文件的相关属性,不记录文件名

  Block:记录文件名,文件的相关连接

  4)如何读取文件系统的信息

  Dumpe2fs/dev/hda1

  4、 载入点

  载入点是进入该文件系统的入口,一定是目录而不是文件

  5、 磁盘与目录的容量

  查看当前磁盘最大允许容量、已用容量、当前所在目录的已用容量:df和du

  /dev/hda 一个分区

  /dev/hda1、/dev/hda2、/dev/hda3为主分区,/dev/hda5+/dev/hda6+…=/dev/hda4为扩展分区

  Du类似于windows中的资源管理器

  6、 连接文件:ln(类似于windows中的快捷方式)

  多个link file可能指向同一个sourcefile,连接文件分为硬连接和符号连接

  1) 硬连接(实际连接):在某个目录下新增一个该文件的关联数据,不会用掉inode与磁盘空间

  2) 符号连接(快捷方式):建立一个独立的文件,让数据的读取指向它连接的文件内容。(使用的较多),source file被删除后,连接文件不能打开

  重建连接文件:ln

 7、 磁盘分区

  1) 分区:fdisk [-l] 设备名称 (主要用来查看和修改分区表)

  2) 删除分区:

  fdisk [-l] 设备名称 进入fdisk画面

  p 先看分区信息

  d 删除分区并要求您选择一个分区,选l

  w 保存到磁盘数据表中,并离开fdisk

  3) 新增分区

  fdisk [-l] 设备名称 进入fdisk画面

  n 新增分区

  4) 磁盘格式化

  Mke2fs [-bicLJ] 设备名称

  5) 磁盘检验

  Fsck [-AtCary] 设备名称 (检查硬盘有没有坏轨)

  目录lost+found,在fsck处理完后,会将错误文件放入此目录

  Badblocks [-svw] 设备名称 (类似于windows的磁盘扫描)

  Sync (直接将暂存在内存中的数据写入磁盘)

  6) 磁盘载入

  Mount [-tonL] 设备名称代号 载入点

  Mount/dev/cdrom (载入光盘)

  Mount –a (将整个系统中记录的文件系统与载入点对应的数据全部载入)

  7) 磁盘卸载

  Unmount 设备号或载入点

  8) 修改磁盘参数

  Mknod 设备名称 [bcp][Major] [Minor]

  E2label 设备名称 新的label名称

  Tune2fs [-jlL] 设备号

  Hdparm [-icdmXTt] 设备名称

  8、 设置启动载入

  1) 载入软盘

  Mount –text2 /dev/fd0 /media/floppy (ext2格式)

  Mount –t vfat /dev/fd0/media/floppy (windows格式)

  Umount/media/floppy (卸载后才可取出软盘)

  2) 载入windows磁盘

  Mkdir /mnt/win98

  Mount –t vfat /dev/hda1/mnt/win98

  Mount –t vfat –oiocharset=cp950 /dev/hda1 /mnt/win98 (加入中文编码)

  3) 载入U盘

  Mkdir /mnt/usb

  Mount –t vfat /dev/sda1/mnt/usb

  4) 启动载入/etc/fstab和/etc/mtab

  /etc/fstab是使用mount将设备载入到系统的某个载入点所需执行的命令内容

  载入点:就是目录

  9、 建立虚拟内存

  可以通过建立虚拟内存设备或建立虚拟内存文件来扩充虚拟内存

同生天地间,为何我不能。

Linux 磁盘和文件系统

相关文章:

你感兴趣的文章:

标签云: