关于磁盘的分区操作,是运维的必备技能,fdisk也应该是大家最常用的命令。因为fdisk命令可以解决大多数的磁盘分区问题,它可以将不大于2T的硬盘进行分区,而我们在生产中最常用的硬盘大小不超过2个T(视公司规模而定),当然有的时候,我们也会有对更大容量的需求,因此我们就会使用更大空间的硬盘,但是如果是用fdisk对2T以上的硬盘进行分区就会出现问题。下面介绍的就是Linux的磁盘分区,包含2T以上的磁盘的分区方法。
硬盘分区表是支持硬盘正常工作的架构。其意义在于操作系统会根据硬盘的分区表把硬盘划分为若干个分区,然后再在每个分区里面创建文件系统,使系统可以写入数据。不同的硬盘分区表就像是对一个房子的不同的装修方案。
到现在这篇文章为止,主要磁盘分区使用的分区表有MBR和GPT两种。
MBR分区表
主引导记录分区方案,是传统的分区方案;
只能记录4个分区的信息,硬盘主分区数目不能超过4个。(MBR扇区每个分区项使用16个字节存储,总共只有64个字节用于分区表);
无法支持超过2TB容量的磁盘,对超过2T的硬盘分区只能使用2T空间。
GPT分区表(又称GUID分区表)
全局唯一标识分区表,是较新的分区机制;
理论上每个磁盘的分区个数和大小几乎没有限制;
(Windows系统最多只允许划分128个分区,所以windows系统磁盘分区时使用此分区方案,最多128分区)
支持超过2T的磁盘;
可兼容MBR。
分区表自带备份。
(会在磁盘的首尾部分,分别保存了一份相同的分区表。其中一份被破坏后,可以通过另一份恢复)
注意:
由于使用虚拟机演示,磁盘显示为vd。
虚拟机的磁盘一般显示为似vda的类型,真实机磁盘显示为sda的类型
fdisk命令对应MBR分区表
parted命令对应GPT分区表
<1>查看硬盘信息
方法一:lsblk
方法二:fdisk -l
<2>创建新硬盘分区
右上方可知新磁盘为vdb,其空间为100G,不大于2T,所以使用fdisk对其分区
磁盘默认都在/dev下,可用Tab补全
{1}fdisk /dev/vdb
{2}输入m,列出菜单
a toggle a bootable flag 设置可启动标记
b edit bsd disklabel 设置一个bsd磁盘标记
c toggle the dos compatibility flag 设置dos兼容标记
d delete a partition 删除一个分区
l list known partition types 列出已知分区类型
m print this menu 列出菜单
n add a new partition 添加一个分区
o create a new empty DOS partition table 新建一个空的DOS分区表
p print the partition table 显示该磁盘当前分区信息
q quit without saving changes 不保存退出
s create a new empty Sun disklabel 创建一个空的SUN磁盘标签
t change a partition's system id 修改分区ID
u change display/entry units 修改显示单元
v verify the partition table 检验分区表
w write table to disk and exit 保存并退出
x extra functionality (experts only) 额外的功能(专家模式)
{3}输入n,创建一个分区
{4}输入p,创建逻辑分区
Select (default p): p 创建逻辑分区
Partition number (1-4, default 1): 1 划分逻辑分区1号
First sector (2048-209715199, default 2048): 回车默认从第一个柱面开始划分(一般都使用默认,直接回车)
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): 划分分区大小(格式:+800M);直接回车,会默认将剩余空间全部划分给此分区
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set
Command (m for help): p 显示该磁盘当前分区信息
Disk /dev/vdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/vdb1 2048 209715199 104856576 83 Linux
Command (m for help): w 保存并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
<3>创建后查看
lsblk
出现vdb1,即成功
<4>格式化分区
本次将其格式化为ext4的文件系统,可选其他文件系统
mkfs.ext4 /dev/vdb1
<5>挂载
可创建一个目录将其挂载,也可直接挂载到已有的目录
挂载方式有很多种,按需选择
本次,直接挂载到/mnt,使用永久挂载
挂载最好使用UUID,并进行永久挂载。可避免Linux系统重启后,磁盘设备名发生更导致的问题。
{1}写入文件
echo “/dev/vdb1 /mnt ext4 defaults 0 0” >>/etc/fstab
{2}刷新挂载并查看
mount -a
df -Th
其查看磁盘、分区格式化、挂载操作都与小于2T的磁盘的操作是相同的,就不演示了,可参考上方的小于2T的磁盘分区操作。
<1>创建新硬盘分区
本次使用的是4T的磁盘演示,由于大于2T使用GPT分区表,使用parted 命令分区
如使用fdisk分区,将只有2T空间可用
parted /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt 创建分区表,磁盘类型为gpt
Warning: The existing disk label on /dev/sdx will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes 选择yes,为清除磁盘原有信息
(parted) unit TB 设置单位为TB
(parted) mkpart primary 0 4 创建4T的分区(0 4分别意为起始点和结束点)
(parted) print 查看分区信息
(parted) quit 保存并退出
<2>分区及挂载后最终结果
lsblk
umount /mnt/
取消分区前该分区必先取消挂载
fdisk /dev//vdb
Command (m for help): d 删除分区(如果只有一个分区,就不会出现要删除的分区的选项)
Command (m for help): p 列出此磁盘当前分区信息
Command (m for help): w 退出并保存
取消分区前该分区必先取消挂载
parted /dev/sdb
(parted) rm 删除
Partition number? 1 删除第一个分区
parted) print 查看当前分区情况