[原文连接:来自给点知识](过来,我告诉你个秘密:送给程序员男友最好的礼物,快教你对象学习磁盘分区啦!小点声哈,别让其他人学会了!)


再唱不出那样的歌曲
听到都会红着脸躲避
虽然会经常忘了我依然爱着你
----------------正文章分割线(前面都是乱七八糟)-------------------

1 整体流程
流程就是这样,我们这里使用virtualbox来进行测试




2 详细介绍-先有个磁盘
使用虚拟机创建一个磁盘,这里使用Virtualbox进行演示,这里可以看到增加了一个磁盘

 开机后,我们使用fdisk命令 查看下新的磁盘,可以看到磁盘/dev/sdb 也就是新的磁盘已经出现了。(下面图就是怕你不看字加的)

[root@model ~]# fdisk -l 磁盘 /dev/sda:8589 MB, 8589934592 字节,16777216 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000a64a6 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 16777215 7339008 8e Linux LVM
# 这里是新的磁盘2G 磁盘 /dev/sdb:2147 MB, 2147483648 字节,4194304 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 # 这个是逻辑分区,包含操作系统和系统文件 磁盘 /dev/mapper/centos-root:6652 MB, 6652166144 字节,12992512 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 # 这个是虚拟内存交换分区,用于内存不足时的填空 磁盘 /dev/mapper/centos-swap:859 MB, 859832320 字节,1679360 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节
![]()
4.3 分区磁盘
分区磁盘的命令 fdisk

1. 我们对磁盘进行分区,执行fdisk /dev/sdb
[root@model ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x20eb83d3 创建新的 DOS 磁盘标签。
2.让我们输入信息,我们输入n表示增加一个分区,会让我们选择什么类型的分区,我先选择主分区,再选择逻辑分区
命令(输入 m 获取帮助):n
Partition type:
  p   primary (0 primary, 0 extended, 4 free)
  e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-4194303,默认为 2048):
将使用默认值 2048
3.表示主分区给它1G
Last 扇区, +扇区 or +size{K,M,G} (2048-4194303,默认为 4194303):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
4.继续分区,选择扩展分区(无法直接使用),然后把扩展分区分为逻辑分区就可以挂载使用了
命令(输入 m 获取帮助):n
Partition type:
  p   primary (1 primary, 0 extended, 3 free)
  e   extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (2099200-4194303,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-4194303,默认为 4194303):
将使用默认值 4194303
分区 2 已设置为 Extended 类型,大小设为 1023 MiB
5.接下来分区为逻辑分区一个500M 一个521M
命令(输入 m 获取帮助):n
Partition type:
  p   primary (1 primary, 1 extended, 2 free)
  l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (2101248-4194303,默认为 2101248):
将使用默认值 2101248
Last 扇区, +扇区 or +size{K,M,G} (2101248-4194303,默认为 4194303):+500M
分区 5 已设置为 Linux 类型,大小设为 500 MiB
命令(输入 m 获取帮助):n
Partition type:
  p   primary (1 primary, 1 extended, 2 free)
  l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 6
起始 扇区 (3127296-4194303,默认为 3127296):
将使用默认值 3127296
Last 扇区, +扇区 or +size{K,M,G} (3127296-4194303,默认为 4194303):
将使用默认值 4194303
分区 6 已设置为 Linux 类型,大小设为 521 MiB
6.保存
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。 
 
![]()

这里出现了这个分区:sdb1、sdb2、sdb5、sdb6
[root@model ~]# lsblk
NAME           MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda               8:0    0   8G  0 disk
├─sda1            8:1    0   1G  0 part /boot
└─sda2            8:2    0   7G  0 part
├─centos-root 253:0    0  6.2G  0 lvm /
└─centos-swap 253:1    0 820M  0 lvm [SWAP]
# 这里输出的是磁盘的四大分区,有主分区和逻辑分区
sdb               8:16   0   2G  0 disk
├─sdb1            8:17   0   1G  0 part
├─sdb2            8:18   0   1K  0 part
├─sdb5            8:21   0 500M  0 part
└─sdb6            8:22   0 521M  0 part
sr0              11:0    1 1024M  0 rom 
 
![]()
4.3 格式化

执行格式化:使用mkfs.btrfs工具进行格式化成btrfs文件系统
1.可以看到这里挂载会出现提示
[root@model ~]# mount /dev/sdb6 /root/sdb6/
mount: /dev/sdb6 写保护,将以只读方式挂载
mount: 未知的文件系统类型“(null)” 
 
2.格式化系统,这里我们使用btrfs
[root@model ~]# mkfs.btrfs /dev/sdb6
btrfs-progs v4.9.1
See http://btrfs.wiki.kernel.org for more information.
Label:             (null)
UUID:               a00209ef-70b7-41da-a691-5c04aea8c247
Node size:          16384
Sector size:        4096
Filesystem size:    521.00MiB
Block group profiles:
Data:             single            8.00MiB
Metadata:         DUP              32.00MiB
System:           DUP               8.00MiB
SSD detected:       no
Incompat features: extref, skinny-metadata
Number of devices:  1
Devices:
  ID       SIZE PATH
   1   521.00MiB /dev/sdb6 
 
 
![]()
4.4 挂载与使用
1.挂载数据盘
[root@model ~]# mount /dev/sdb6 /root/sdb6/ 
 
2.可以看到这个文件的文件系统是btrfs,而且已经挂载到/root/sdb6上了
[root@model ~]# df -Th
文件系统               类型     容量 已用 可用 已用% 挂载点
devtmpfs               devtmpfs 908M     0 908M    0% /dev
/dev/sdb6               btrfs     521M   17M 440M    4% /root/sdb6 
3.创建文件并使用,使用dd创建命令
[root@model sdb6]# dd if=/dev/zero bs=4M count=100 of=cfile
dd: 写入<span data-raw-text-1692439234113="" "="" data-textnode-index-1692439234113="234" data-index-1692439234113="4331" data-index-len-1692439234113="4331" class="character" style="display: inline-block; text-indent: initial;">"cfile<span data-raw-text-1692439234113="" "="" data-textnode-index-1692439234113="234" data-index-1692439234113="4337" data-index-len-1692439234113="4337" class="character" style="display: inline-block; text-indent: initial;">" 出错: 设备上没有空间
记录了11+0 的读入
记录了10+0 的写出
41943040字节(42 MB)已复制,0.408459 秒,103 MB/秒 
 
4.查询创建的文件
[root@model sdb6]# ll
总用量 450560
-rw-r--r--. 1 root root 419430400 8月  18 22:33 afile
-rw-r--r--. 1 root root  41943040 8月  18 22:33 cfile 
5.可视化查看文件的大小,以M为单位展示
[root@model sdb6]# ls -alh
总用量 441M
drwxr-xr-x. 1 root root   20 8月  18 22:33 .
dr-xr-x---. 9 root root  245 8月  18 22:26 ..
-rw-r--r--. 1 root root 400M 8月  18 22:33 afile
-rw-r--r--. 1 root root 40M 8月  18 22:33 cfile 
6.查看分的大小
[root@model sdb6]# df -Th
文件系统               类型     容量 已用 可用 已用% 挂载点
devtmpfs               devtmpfs 908M     0 908M    0% /dev
tmpfs                   tmpfs     919M     0 919M    0% /dev/shm
tmpfs                   tmpfs     919M   17M 903M    2% /run
tmpfs                   tmpfs     919M     0 919M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       6.2G  1.5G  4.7G   25% /
/dev/sda1               xfs     1014M 150M 865M   15% /boot
tmpfs                   tmpfs     184M     0 184M    0% /run/user/0
/dev/sdb6               btrfs     521M 458M     0  100% /root/sdb6
[root@model sdb6]# cp -rp cfile d
cp: 写入<span data-raw-text-1692439234113="" "="" data-textnode-index-1692439234113="262" data-index-1692439234113="5406" data-index-len-1692439234113="5406" class="character" style="display: inline-block; text-indent: initial;">"d<span data-raw-text-1692439234113="" "="" data-textnode-index-1692439234113="262" data-index-1692439234113="5408" data-index-len-1692439234113="5408" class="character" style="display: inline-block; text-indent: initial;">" 出错: 设备上没有空间
cp: 扩展<span data-raw-text-1692439234113="" "="" data-textnode-index-1692439234113="263" data-index-1692439234113="5427" data-index-len-1692439234113="5427" class="character" style="display: inline-block; text-indent: initial;">"d<span data-raw-text-1692439234113="" "="" data-textnode-index-1692439234113="263" data-index-1692439234113="5429" data-index-len-1692439234113="5429" class="character" style="display: inline-block; text-indent: initial;">" 失败: 设备上没有空间 
 
![]()
5. 以上用到的命令
1. 查看磁盘信息以及分区
fdisk -l
2. 查看磁盘挂载情况以及磁盘的文件系统
df -Th
3. 格式化分区
mkfs.btrfs /dev/sdb1
4. 创建一个400M大的cfile文件
dd if=/dev/zero bs=4M count=100 of=cfile 
 
 
![]()

6. 小知识点
-  
为什么需要逻辑分区,不能多一点主分区么?
在传统的MBR(Master Boot Record)分区方案中,主分区的数量是有限的,最多只能有4个主分区。这是由于MBR分区表的限制,其中只有4个条目可用于主分区的定义。如果你只需要少量的分区,这可能足够了。
然而,当你需要更多的分区时,逻辑分区就变得非常有用。逻辑分区是在扩展分区内创建的,而扩展分区本身占用了一个主分区条目。扩展分区可以容纳多个逻辑分区,因此你可以在扩展分区内创建更多的逻辑分区,以满足你的分区需求。
逻辑分区的引入允许你在一个物理磁盘上创建更多的分区,这对于多系统安装、数据分区、多用户环境等情况非常有用。通过逻辑分区,你可以更好地组织和管理磁盘空间。
需要注意的是,如果你使用的是新一代的分区方案,如GPT(GUID Partition Table),则没有主分区和逻辑分区的概念限制,可以创建更多的分区(最多可达到128个)。因此,对于使用GPT分区方案的磁盘,你可以更自由地创建分区,而不受主分区和逻辑分区数量的限制。
总之,逻辑分区的存在是为了克服MBR分区表中主分区数量有限的限制,使你能够在一个物理磁盘上创建更多的分区。
逻辑分区的存在是为了解决主分区数量有限的问题。在传统的主引导记录(MBR)分区方案中,主分区的数量被限制为最多四个。这是由于MBR分区表的结构所决定的。因此,如果需要在一个磁盘上创建更多的分区,就需要使用扩展分区和逻辑分区的组合。
扩展分区是主分区中的一个特殊类型,它可以容纳多个逻辑分区。通过创建一个扩展分区,可以在其中划分多个逻辑分区,从而克服了主分区数量的限制。这样可以将磁盘划分为更多的逻辑部分,提供更多的灵活性和可扩展性。
使用逻辑分区和扩展分区的好处包括:
总而言之,逻辑分区和扩展分区的引入允许在主分区数量有限的情况下更好地管理磁盘空间,并提供更大的灵活性和可扩展性。
-  
突破主分区数量限制:通过使用扩展分区,可以在一个磁盘上创建更多的分区,以满足不同的需求。
 -  
灵活的分区管理:逻辑分区可以根据需要创建、删除和调整大小,使得对磁盘空间进行灵活管理成为可能。
 -  
多系统安装:逻辑分区可以用于安装多个操作系统,每个操作系统都可以独立地位于一个逻辑分区中。
 -  
数据组织和隔离:通过将数据放置在不同的逻辑分区中,可以更好地组织和隔离数据,提高系统的可维护性和安全性。
 
 -  
 -  
处理fdisk 可以分区外还有哪些工具?
-  
使用
parted -l命令查看系统中存在的磁盘和分区。 -  
选择要格式化的磁盘,例如
/dev/sdb。 -  
运行
parted /dev/sdb命令来对磁盘进行分区操作。 -  
使用
mklabel命令创建新的分区表(例如,使用mklabel gpt创建GPT分区表)。 -  
使用
mkpart命令创建新的分区。 -  
使用
print命令查看分区信息。 -  
运行
mkfs命令来格式化新分区,例如mkfs.ext4 /dev/sdb1。 
-  
使用parted命令:
 
 -  
 -  
为什么要格式化呢?
-  
创建文件系统:格式化是在磁盘或分区上创建文件系统的过程。文件系统是一种用于组织和管理数据的结构,它定义了数据的存储方式、元数据的管理以及访问权限等信息。通过格式化,可以为磁盘或分区创建适当的文件系统,以便操作系统和应用程序能够正确地读取和写入数据。
 -  
清除数据:格式化磁盘或分区会将其上的所有数据全部删除。这可以用作一种数据消除的方法,确保旧数据无法被恢复。当你要出售、捐赠或重新分配磁盘时,进行格式化可以保护你的隐私和数据安全。
 -  
解决文件系统问题:有时,文件系统可能会出现问题,例如文件系统损坏、文件访问错误或文件系统不一致等。通过格式化,可以清除现有的文件系统并重新构建一个新的文件系统,以解决这些问题。这可以修复文件系统的错误,提高稳定性和可靠性。
 -  
更改文件系统类型:有时,你可能需要更改磁盘或分区的文件系统类型,以满足特定的需求或兼容性要求。通过格式化,可以将磁盘或分区从一个文件系统类型转换为另一个文件系统类型。
 
 -  
 -  
Linux下有多种文件系统可供选择,以下是一些常见的文件系统及其对应的格式化命令:
请注意,在执行格式化操作之前,请确保你备份了重要的数据,因为格式化将删除磁盘上的所有数据。另外,确保选择适合你需求的文件系统,考虑到性能、兼容性和特定功能的需求。
-  
格式化命令:
mkfs.ntfs -  
示例:
mkfs.ntfs /dev/sdb1 -  
格式化命令:
mkfs.fat -F 32 -  
示例:
mkfs.fat -F 32 /dev/sdb1 -  
格式化命令:
mkfs.reiserfs -  
示例:
mkfs.reiserfs /dev/sdb1 -  
格式化命令:
mkfs.jfs -  
示例:
mkfs.jfs /dev/sdb1 -  
格式化命令:
mkfs.btrfs -  
示例:
mkfs.btrfs /dev/sdb1 -  
格式化命令:
mkfs.xfs -  
示例:
mkfs.xfs /dev/sdb1 -  
格式化命令:
mkfs.ext3 -  
示例:
mkfs.ext3 /dev/sdb1 -  
格式化命令:
mkfs.ext4 -  
示例:
mkfs.ext4 /dev/sdb1 
-  
ext4文件系统:
 -  
ext3文件系统:
 -  
XFS文件系统:
 -  
Btrfs文件系统:
 -  
JFS文件系统:
 -  
ReiserFS文件系统:
 -  
FAT32文件系统:
 -  
NTFS文件系统:
 
 -  
 

![linux学习(文件描述符)[13]](https://img-blog.csdnimg.cn/fe4a7f2569fe4ec0b160c19112c5bc69.png)


















