硬盘分区类型
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命名为NAME
- print [devices|free|list,all|NUMBER]:显示分区表、可用设备、空闲空间、所有找到的分区或特定分区的信息
- quit:退出
- rescue START END:在 START 和 END 附近恢复一个丢失的分区
- rm NUMBER:删除分区 NUMBER
- select 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
