硬盘分区类型
MBR分区方案
MBR也被称为主引导记录,它存在0柱面0磁道0扇区内,在磁盘的第一个扇区内,大小为512字节
- 512字节包含:446字节初始化程序加载器、64字节分区表、2字节校验码
- 由于每个分区为16字节,所以MBR只能支持4个主分区,每个分区的最大硬盘空间支持2T
分区方案
- 分区表:64字节
- 1个分区=16字节
- 4 x 16 = 64字节,所以只能分4个分区
- 主分区最多4个,分别占用编号 1-4
- 主分区:可以格式化使用
- 分区不够用:将1个也只能将1个主分区设置为扩展分区
- 扩展分区:不能使用
- 将扩展分区划分为多个逻辑分区
- 逻辑分区:可以格式化使用,逻辑分区的编号一定是从5开始
GPT分区方案
GPT分区方案是一种较新的硬盘分区类型,与MBR分区方案相比,GPT具有较高的灵活性
- 分区支持:支持最多128个分区
- 会将分区表备份在磁盘的末尾
- GPT采用64位地址,支持最大容量为18EB
磁盘分区
查看所有分区信息
fdisk -l
MBR分区方案
5G的磁盘,划分5个1G分区
3个主分区,1个扩展分区(2个逻辑分区)
- 分区
- 格式化
- 挂载
- 使用
fdisk
fdisk交互式命令列表
DOS (MBR) | DOS(MBR)相关的命令a toggle a bootable flag | 切换启动分区标记(通常用户设置哪些分区是活动的或可引导的)b edit nested BSD disklabel | 编辑BSD磁盘标签(通用用于BSD Unix系统)c toggle the dos compatibility flag | 切换DOS兼容性标准Generic | 通用命令d delete a partition | 删除一个分区F list free unpartitioned space | 列出未分区的空闲空间l list known partition types | 列出已知的分区类型(如FAT32、NTFS、Linux等)n add a new partition | 添加一个新分区p print the partition table | 打印分区表t change a partition type | 更改分区类型(类似Windows的磁盘标识,给磁盘设置一个名称)v verify the partition table | 验证分区表i print information about a partition | 打印有关分区的信息Misc 2 | 其他命令m print this menu | 列出所有命令(帮助)u change display/entry units | 更改显示/输入单位x extra functionality (experts only) | 额外的功能Script | 脚本相关的命令I load disk layout from sfdisk script file | 从`sfdisk`脚本文件中加载磁盘布局O dump disk layout to sfdisk script file | 将磁盘布局转储到`sfdisk`脚本文件Save & Exit | 保存和退出w write table to disk and exit | 将分区表写入磁盘并退出q quit without saving changes | 不保存更改退出Create a new label | 创建新分区表g create a new empty GPT partition table | 创建GUID分区表(GPT)G create a new empty SGI (IRIX) partition table | 创建新的SGI分区表(适用于SGI IRIX操作系统)o create a new empty DOS partition table | 创建一个新的DOS分区表(MBR)s create a new empty Sun partition table | 创建一个新的Sun分区表(适用于Sun系操作系统)
分区
fdisk /dev/vdbCommand (m for help): n # 添加1个新分区
Partition type # 磁盘类型p primary (0 primary, 0 extended, 4 free) # 主分区e extended (container for logical partitions) # 扩展分区
Select (default p): p # 添加1个主分区(直接回车会默认添加1个主分区)
Partition number (1-4, default 1): 1 # 分区编号,默认为1
First sector (2048-10485759, default 2048): # 起始扇区,默认从2048开始,前面做保留给GPT分区表使用
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-10485759, default 10485759): +1G # 结束扇区,也就是分区的大小。。。
重复上述操作,划分3个主分区
。。。Command (m for help): n # 添加1个新分区
Partition typep primary (3 primary, 0 extended, 1 free)e extended (container for logical partitions)
Select (default e): e # 添加1个扩展分区(直接回车会默认添加扩展分区,因为主分区已经使用完)Selected partition 4 # 分区编号为4
First sector (6293504-10485759, default 6293504):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (6293504-10485759, default 10485759): # 使用所有空间Created a new partition 4 of type 'Extended' and of size 2 GiB.
Command (m for help): n # 添加1个新分区
All primary partitions are in use. # 提示所有主分区都已使用
Adding logical partition 5 # 分区编号为5
First sector (6295552-10485759, default 6295552):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (6295552-10485759, default 10485759): +1GCreated a new partition 5 of type 'Linux' and of size 1 GiB.Command (m for help): n # 添加1个新分区
All primary partitions are in use.
Adding logical partition 6 # 分区编号为6
First sector (8394752-10485759, default 8394752):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (8394752-10485759, default 10485759): Created a new partition 6 of type 'Linux' and of size 1021 MiB.
Command (m for help): w # 将分区表写入磁盘并退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
修改某个分区的分区类型
Command (m for help): t # 更改分区类型
Partition number (1-6, default 6): 1 # 选择分区,当前选择第一个分区
Hex code or alias (type L to list all): l # 列出所有类型
Hex code or alias (type L to list all): 82 # 更改为82,也就是`Linux swap / Solaris`Changed type of partition 'Linux' to 'Linux swap / Solaris'.
Command (m for help): w # 写入退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
parted
parted是一款强大的磁盘分区和分区大小调整工具,与fdisk区别
- 能够调整分区的大小
- 可以处理常见的分区格式:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区
- 还提供非交互的分区方式
parted交互式命令列表
align-check TYPE N
:检查分区是否符合Type的要求help [COMMAND]
:输出帮助信息mklabel,mktable LABEL-TYPE
:创建一个新的磁盘标签(分区表)LABEL-TYPE
:可以是msdos(MBR)、gpt(GUID)
mkpart PART-TYPE [FS-TYPE] START END
:创建一个新的分区PART-TYPE
:分区类型,如primary‘extended、logical等FS-TYPE
:文件系统类型START
:分区起始位置END
:分区结束位置
name NUMBER NAME
:将分区NUMBER命名为NAMEprint [devices|free|list,all|NUMBER]
:显示分区表、可用设备、空闲空间、所有找到的分区或特定分区的信息quit
:退出rescue START END
:在 START 和 END 附近恢复一个丢失的分区rm NUMBER
:删除分区 NUMBERselect DEVICE
:选择设置disk_set FLAG STATE
:更改选定设备的 FLAG 状态disk_toggle [FLAG]
:切换选定设备上的 FLAG 状态set NUMBER FLAG STATE
:更改分区 NUMBER 上 FLAG的状态toggle [NUMBER [FLAG]]
:切换分区 NUMBER 上 FLAG 的状态。如果未指定 FLAG 则切换所有标志unit UNIT
:设置默认单位为 UNIT(如 MB、GB等)version
:显示 GNU parted 的版本号和版权信息
分区
parted /dev/vdc # 指定设备
(parted) mklabel # 定义分区方案
New disk label type? msdos # 选择MBR分区方案
(parted) mkpart # 分区
Partition type? primary/extended? primary # 分区类型,这里选择主分区
File system type? [ext2]? ext2 # 文件系统类型,不管设置什么都无效,所以保持默认即可
Start? 2048s # 分区起始位置
End? 1000MB # 分区结束位置,1000MB、1G,或者是百分比(10G硬盘,划分1G也就是10%)
(parted) q # 保存退出
Information: You may need to update /etc/fstab.
udevadm settle # 刷新内核信息
非交互式分区方式
# 如果要使用非交互式分区,需要先定义分区方案
parted /dev/vdc # 指定设备
(parted) mklabel # 定义分区方案
New disk label type? msdos # 选择MBR分区方案# 才可以使用非交互式命令
parted /dev/vdc mkpart primary ext2 1000MB 2000MB
GPT分区方案
5G的磁盘,划分5个1G分区
- 分区
- 格式化
- 挂载
- 使用
parted /dev/vdc
(parted) mklabel # 定义分区方案
New disk label type? gpt # 选择GPT
Warning: The existing disk label on /dev/vdc will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes # 因为我们之前使用的分区方案是MBR,现在修改了分区方案,所以提示:数据将会别清空
(parted) mkpart # 分区
Partition name? []? first # 给分区定义一个名字
File system type? [ext2]? # 文件系统类型,不管设置什么都无效,所以保持默认即可
Start? 0% # 分区的起始位置
End? 1000M # 分区的结束位置
(parted) q # 保存退出
Information: You may need to update /etc/fstab.
非交互式
parted /dev/vdc mkpart second ext2 1000M 2000M
parted /dev/vdc mkpart third ext2 2000M 3000M
删除分区third
parted /dev/vdc rm 3
parted /dev/vcd print
格式化
常见的文件系统类型
- Windows:fat32、NTFS、exfat
- Linux:exfat、ext2、ext3、ext4、xfs、vfat
- MacOS:exfat
lsblk常见参数
查看系统的磁盘使用情况
参数 | 作用 |
---|---|
-a | 显示所有设备信息 |
-f | 显示文件系统信息 |
-m | 显示磁盘归属以及权限信息 |
-S | 显示有SCSI类型的磁盘信息 |
blkid常见参数
可以查看Linux系统中的全部块设备(硬盘或光盘)信息
参数 | 作用 |
---|---|
blkid -s UUID | 显示指定设备的UUID |
blkid -s TYPE | 显示指定设备的文件系统 |
blkid | 显示当前系统的中全部块设备的信息 |
mkfs常见参数
用于格式化设备
参数 | 作用 |
---|---|
-c | 检查指定设备是否损坏 |
-t | 设置文件系统类型 |
查看磁盘的当前分区
lsblk
显示文件系统信息,没有显示文件系统则代表还未格式化
lsblk -f /dev/vdb
格式化分区
mkfs -t ext4 /dev/vdb1 # 将vdb硬盘的第一个分区格式化为ext4
mkfs.ext4 /dev/vdb1 # 可以忽略-t选项,直接使用.代替
临时挂载与永久挂载
df常见参数
参数 | 作用 |
---|---|
-a | 显示所有文件系统 |
-h | 显示当前系统的全部硬盘使用情况 |
-t | 显示指定文件系统的硬盘使用情况 |
-T | 显示文件系统的类型 |
mount常见参数
参数 | 作用 |
---|---|
mount | 查看当前系统已有文件系统信息 |
-r | 将文件系统设置为只读模式 |
-w | 将文件系统设置为读写模式 |
-o | 设置权限 |
-a | 加载/etc/fstab文件中记录的所有挂载 |
mount临时挂载
临时挂载,重启后失效
mkdir /mnt/vdb1 # 创建挂载点
mount /dev/vdb1 /mnt/vdb1
为挂载设置只读权限
mkfs.ext4 /dev/vdb2 # 格式化
mkfs.ext4 /dev/vdb3 # 格式化
mkdir /mnt/vdb2 # 创建挂载点目录
mkdir /mnt/vdb3 # 创建挂载点目录
mount -o ro /dev/vdb2 /mnt/vdb2 # 方法1:以只读方式挂载
mount -r /dev/vdb3 /mnt/vdb3 # 方法2:以只读方式挂载
echo hhhh > /mnt/vdb2/h.txt # 测试只读权限
echo hhhh > /mnt/vdb3/h.txt # 测试只读权限
不卸载的基础上重新挂载
mount -o remount,rw /dev/vdb2 # 重新以读写方式挂载
卸载文件系统,取消挂载
umount /dev/vdb3
fstab永久挂载
查看当前挂载信息
lsblk -f /dev/vdb
/etc/fstab配置文件解析
UUID=5e75a2b9-1367-4cc8-bb38-4d6abc3964b8 /boot xfs defaults 0 0
UUID
:设备名称或设备ID/boot
:挂载点/挂载目录xfs
:文件系统类型defaults
:选项(权限、认证设定、其它)0
:内核日志检测机制(0:不检测,1:检测,2:检测,1比2优先级高)0
:硬盘检测机制(0:不检测)
修改配置文件,实现开机自动挂载
vim /etc/fstab# 追加一行
/dev/vdb2 /mnt/vdb2 ext4 defaults 0 0
加载配置文件系统
mount -a # 重新加载配置/etc/fstab文件中的挂载
重启系统,以验证自动挂载
reboot
验证修改挂载点后是否影响内容
新建两个挂载点
mkdir /mnt/vdc11
mkdir /mnt/vdc12
mount /dev/vdc1 /mnt/vdc11 # 先挂载到vdc11文件夹中
dd if=/dev/zero of=/mnt/vdc11/file bs=1M count=1000 # 在vdc11中创建1个1G的文件
取消挂载后重新挂载,可以看到内容仍然存在,其实挂载点只是分区的一个入口,不影响内容
umount /dev/vdc1
mount /dev/vdc1 /mnt/vdc12
验证重复挂载在同一目录是否影响原有数据
创建挂载点
mkdir /mnt/vdb56
格式化vdb5、vdb6
mkfs.xfs /dev/vdb5
mkfs.xfs /dev/vdb6
挂载vdb5到vdb56并写入文件
mount /dev/vdb5 /mnt/vdb56
dd if=/dev/zero of=/mnt/vdb56/file bs=1M count=1000
将vdb6挂载到vdb56并写入文件
mount /dev/vdb6 /mnt/vdb56
dd if=/dev/zero of=/mnt/vdb56/file1 bs=1M count=1000
我们重复挂载,可以看到不影响内容
mount /dev/vdb5 /mnt/vdb56
ll /mnt/vdb56
mount /dev/vdb6 /mnt/vdb56
ll /mnt/vdb56
如何根据磁盘使用情况判断分区的类型
我们首先查看当前系统的vdb的磁盘使用情况
lsblk /dev/vdb
根据显示我们可以得出这是一个使用MBR分区方案的磁盘
- 主分区的编号一定是从1-4的,可以看到vdb1、vdb2、vdb3均为主分区
- vdb4为什么不是主分区呢,以为主分区不可能是1K,这很明显是1个扩展分区,扩展分区的大小通常为1K
- 因为vdb4是扩展分区,所以vdb5是逻辑分区
接着我们查看当前系统的vdc的磁盘使用情况
lsblk /dev/vdc
根据显示情况,我们可以判断这是一个使用GPT分区方案的磁盘
- 首先主分区的编号一定是从1-4的,根据磁盘容量我们可以得出vdc1、vdc2、vdc3、vdc4均为主分区
- 根据vdc5的磁盘容量,我们也同样可以得出它为主分区
- 能出现超过4个主分区的分区方案只有GPT
管理交换分区
free常见参数
参数 | 作用 |
---|---|
-b | 设置显示单位为B |
-m | 设置显示单位为MB |
-k | 设置显示单位为KB |
-h | 自动调整合适的显示单位 |
swapon常见参数
用于激活交换分区,让SWAP交换分区内存可以立即被使用
参数 | 作用 |
---|---|
-s | 显示交换分区的使用情况 |
-a | 激活所有/etc/fstab文件中的交换分区 |
swapoff常见参数
用于关闭SWAP交换分区
参数 | 作用 |
---|---|
-a | 关闭/etc/fstab文件中的全部swap设备 |
管理交换分区
查看当前交换分区的大小
free -m
找一块空的分区
lsblk -f
建立交换分区
mkswap /dev/vdc2
激活交换分区,SWAP交换分区内存可以立即被使用
swapon /dev/vdc2
永久挂载
vim /etc/fstab# 追加下列内容
/dev/vdc2 swap swap defaults 0 0
# 或
/dev/vdc2 none swap defaults 0 0
激活所有/etc/fstab文件中的交换分区,相当于重载fstab文件
swapon -a
关闭交换分区
swapoff /dev/vdc2
使用本地存储创建交换分区
首先创建一个文件
dd if=/dev/zero of=/swapfile bs=100M count=1 # 在根目录创建一个100M的文件
格式化刚刚创建的文件
mkswap /swapfile
设置权限保证安全
chmod 0600 /swapfile
激活交换分区
swapon /swapfile
查看交换分区
swapon -s