Linux - 分区命令fdisk与parted
磁盘分区形式
msdos分区
Linux系统为了兼容Windows的磁盘,使用支持windows的MBR的方式来处理开机管理程序与分区表,这些记录在第一个扇区,这个扇区通常为512bytes大小,所以第一个扇区会有两个数据:主要启动记录区(MBR):可以按照开机管理程序的地方,有446bytes;分区表(partition table):记录整个硬盘分区的状态,有64bytes。由于分区表所在区块仅有64bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的起始与结束的磁柱号码。
由于第一个扇区的大小只支持四个主分区,为了容纳更多的分区,就有了扩展分区,可以将四个主分区扩展成多个扩展分区,然后就可以分区更多的分区。
GPT分区
为了兼容与所有的磁盘,在扇区的定义上面,大多会使用所谓的逻辑区块地址(LBA)来处理,GPT将磁盘所有区块以LBA来规划,而第一个LBA称为LBA0,与MBR仅使有一个区块不同,GPT除了前面的34个LBA之外,整个磁盘的最后33个LBA也拿来作为另一个备份。
LBA0(MBR相容区块)与MBR模式相似;
LBA1(GPT表头记录) 记录分区本身位置与大小,同时记录了备份用的GPT分区放置位置以及分区表的检验机制码(CRC32);
LBA2-33(实际记录分区信息);
从LBA2区块开时,每个LBA都可以记录4笔分区记录,所以默认情况下可以有4×32=128笔分区记录,因为每个LBA有512bytes,因此每个记录用到128bytes的空间,除了每个记录所需要的标识符和相关记录外,GPT在每个记录中分别提供64bits来记录开始/结束的扇区号码,因此,GPT分区表对于单一分区来说,他的最大容量限制就是8ZB。
分区工具:fdisk与parted
fdisk只支持msdos分区,如果磁盘容量大于2T,需要分区,fdisk就不支持了;如果是直接使用整块磁盘比如(/dev/sda)不需要分区的话是支持大于2T的。
parted支持msdos和gpt,可以支持大硬盘,也支持小硬盘。不区分主分区,扩展分区,逻辑分区,也没有4个分区数量的限制。
注:使用dd命令创建可以file文件进行模拟分区操作
dd if=/dev/zero of=file bs=5M count=500
fdisk:
fdisk file 欢迎使用 fdisk (util-linux 2.33.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助):p Disk file:2.5 GiB,2621440000 字节,5120000 个扇区 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x92459b64 命令(输入 m 获取帮助):n 分区类型 p 主分区 (0个主分区,0个扩展分区,4空闲) e 扩展分区 (逻辑分区容器) 选择 (默认 p):p 分区号 (1-4, 默认 1): 第一个扇区 (2048-5119999, 默认 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-5119999, 默认 5119999): 创建了一个新分区 1,类型为“Linux”,大小为 2.5 GiB。 命令(输入 m 获取帮助):print Disk file:2.5 GiB,2621440000 字节,5120000 个扇区 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x92459b64 设备 启动 起点 末尾 扇区 大小 Id 类型 file1 2048 5119999 5117952 2.5G 83 Linux 命令(输入 m 获取帮助):w 分区表已调整。 正在同步磁盘。
parted:
parted file WARNING: You are not superuser. Watch out for permissions. GNU Parted 3.2 使用 /tmp/file Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print 错误: /tmp/file: unrecognised disk label Model: (file) Disk /tmp/file: 2621MB Sector size (logical/physical): 512B/512B Partition Table: unknown Disk Flags: (parted) mklabel msdos #修改分区类型 (parted) print Model: (file) Disk /tmp/file: 2621MB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system 标志 (parted) mkpart #创建分区 分区类型? primary/主分区/extended/扩展分区? primary #指定为主分区 文件系统类型? [ext2]? ext4 #指定文件系统 起始点? 1 结束点? 1G (parted) print Model: (file) Disk /tmp/file: 2621MB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system 标志 1 1049kB 1000MB 999MB primary ext4 lba
注:如果需要格式化成gpt分区,只要执行maklabe gpt ,注意数据会没掉哦。
总结
目前磁盘容量都是比较大,因此一般都是使用parted命令进行分区。