• 常见硬件对应于 Linux 下的文件(/dev目录下)

    装置 装置在Linux内的档名
    SCSI/SATA/U盘硬盘机 /dev/sd[a-p]
    U盘 /dev/sd[a-p](与SATA相同)
    VirtI/O界面 /dev/vd[a-p](用于虚拟机内)
    软盘机 /dev/fd[0-1]
    打印机 25针: /dev/lp[0-2]; USB: /dev/usb/lp[0-15]
    鼠标 PS2: /dev/psaux; USB: /dev/usb/mouse[0-15]
    CDROM/DVDROM /dev/scd[0-1](通用); /dev/sr[0-1](通用,CentOS较常见)
    当前CDROM/DVDROM /dev/cdrom
    当前的鼠标 /dev/mouse
    磁带机 IDE: /dev/ht0; SATA/SCSI: /dev/st0
    IDE硬盘机 /dev/hd[a-d](近乎被淘汰)

由于现在的IDE设备已经很少见了,所以一般的硬盘设备都会是以“/dev/sd”开头的。而一台主机上可以有多块硬盘,因此系统采用a~p来代表16块不同的硬盘(默认从a开始分配),而且硬盘的分区编号也很有讲究:

主分区或扩展分区的编号从1开始,到4结束;

逻辑分区从编号5开始。

知识点1: /dev目录中sda设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为/dev/sda。在使用iSCSI网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到/dev/sdb这个设备就是这个道理。

知识点2: 分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。因此sda3只能表示是编号为3的分区,而不能判断sda设备上已经存在了3个分区。

分析下图:

image-20201004012732589

首先,/dev/目录中保存的应当是硬件设备文件;其次,sd表示是存储设备;然后,a表示系统中同类接口中第一个被识别到的设备,最后,5表示这个设备是一个逻辑分区。一言以蔽之,“/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件”。

硬盘分区

MBR分区方式

分区作用:
①主分区:主要是用来启动操作系统的,它主要放的是操作系统的启动或引导程序,/boot分区最好放在主分区上;
②扩展分区是不能使用的,它只是做为逻辑分区的容器存在的,先创建一个扩展分区,在扩展分区之上创建逻辑分区;
③我们真正存放数据的是主分区和逻辑分区,大量数据都放在逻辑分区中。

硬盘设备是由大量的扇区组成的,每个扇区的容量为512字节。其中第一个扇区最重要,它里面保存着**主引导记录(Master Boot Record, MBR)占用446字节,与分区表(partition table)**信息,占用64字节,结束符占用2字节;其中分区表中每记录一个分区信息就需要16字节,这样一来最多只有4个分区信息可以写到第一个扇区中,这4个分区就是4个主分区。第一个扇区中的数据信息如图6-3所示。

第一个扇区的数据信息

现在,问题来了—第一个扇区最多只能创建出4个分区?于是为了解决分区个数不够的问题,可以将第一个扇区的分区表中16字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像是一个占用16字节分区表空间的指针—一个指向另外一个分区的指针。这样一来,用户一般会选择使用3个主分区加1个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于4个)的需求。主分区、扩展分区、逻辑分区可以像下图那样来规划。

所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。

硬盘分区的规划

小总结:

  • 主要分割与扩展分配最多可以有四笔(硬盘的限制)
  • 扩展分配最多只能有一个(操作系统的限制)
  • 逻辑分割是由扩展分配持续切割出来的分割槽;
  • 能够被格式化后,作为数据存取的分割槽为主要分割与逻辑分割。扩展分配无法格式化;
  • 逻辑分割的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分割(5号到63号), SATA硬盘则有11个逻辑分割(5号到15号)。

缺点:

  • 操作系统无法识别大于 2.2T 以上的磁盘容量;
  • MBR 仅有一个区块,若被破坏后,无法或很难恢复;
  • 存放 boot loader 的区块仅有 446 bytes,无法容纳较多的代码。

GUID partition table, GPT 分区方式

留坑…

分区表链的查找

分区表链实际上相当于一个单向链表结构。第一个分区表,也即主分区表,可以有一项 描述扩展分区。而这一项就相当于指针,指向扩展的分区。然后我们根据该指针来到扩展分 区起始柱面的0头1扇区,找到第二个分区表。对于该分区表,通常情况下:第一项描述了扩展分区中第一个分区的信息,第二项描述下一个分区,而这第二项就相当于指向第二个分 区的指针,第三项,第四项一般均为0。我们可以根据该指针来到扩展分区中第二个分区起 始柱面的0头1扇区,找到第三个分区表。以此类推,直到最后一个分区表。而最后一个分 区表只有第一项有信息,余下三项均为0.相当于其指针为空.所以只要找到了一个分区表就可 以推导找出其后面所有分区表。不过该分区表前面的分区表就不好推导出来了。但令人高兴 的是这个链表的头节点,也即主分区表的位置是固定的位于(0柱面,0磁头,1扇区)处, 我们可以很轻易的找到它,然后把剩下的所有分区表一一找到。

分区链表查找例子

Linux分区

Linux 创建主分区演示:

工作环境中为English环境,方便阅读在国语环境下演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#第一步:添加磁盘创建主分区

╭─root@localhost.localdomain ~
╰─➤ ls /dev/sd* #查看磁盘
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
╭─root@localhost.localdomain ~
╰─➤ fdisk /dev/sdb #管理分区
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x9fccbf7c 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n #新建分区
Partition type: #分区类型
p primary (0 primary, 0 extended, 4 free) #p--->主分区
e extended #e ---> 扩展分区
Select (default p): p #选择主分区
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048): #分区磁盘的起始位,默认值,回车就好!
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G #磁盘大小选择,加号不能省略,回车即可
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):P #查询分区是否创建成功

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x9fccbf7c

设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux #sdb1

命令(输入 m 获取帮助):w #保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

#第二步:查看磁盘

╭─root@localhost.localdomain ~
╰─➤ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdc /dev/sdd /dev/sde

#第三步:格式化成xfs文件系统

╭─root@localhost.localdomain ~
╰─➤ mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

#第四步:挂载至本地目录

╭─root@localhost.localdomain ~
╰─➤ mkdir /xfs_du #创建本地目录
╭─root@localhost.localdomain ~
╰─➤ mount /dev/sdb1 /xfs_du #使用mount挂载 mount 磁盘 目录

#第五步:查看挂载信息

╭─root@localhost.localdomain ~
╰─➤ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17G 4.7G 13G 28% /
devtmpfs 473M 0 473M 0% /dev
tmpfs 489M 88K 489M 1% /dev/shm
tmpfs 489M 7.1M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 173M 842M 18% /boot
tmpfs 98M 8.0K 98M 1% /run/user/0
/dev/sr0 4.1G 4.1G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1 5.0G 33M 5.0G 1% /xfs_du

#第六步:开机自动挂载

╭─root@localhost.localdomain ~
╰─➤ echo "/dev/sdb1/xfs_du xfs defaults 0 0" >> /etc/fstab

#开机自动挂载方法2:

echo “mount /dev/sdb1 /xfs_du” >> /etc/rc.local
chmod +x /etc/rc.d/rc.local #给个执行权限


# /etc/rc.local
是使用者自订开机启动程序的文件,把需要开机自动运行的程序写在这个脚本里

fdisk分区演示–创建逻辑分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# 第一步:fdisk添加扩展分区

╭─root@du ~
╰─➤ fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n #添加新分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e #选择扩展分区
Partition number (2-4, default 2):
First sector (10487808-41943039, default 10487808):
Using default value 10487808
Last sector, +sectors or +size{K,M,G} (10487808-41943039, default 41943039): +5G #5G大小
Partition 2 of type Extended and of size 5 GiB is set

Command (m for help): P #查看分区

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0xe140b235

Device Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 20973567 5242880 5 Extended

Command (m for help): w #保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#第二步:创建逻辑分区

╭─root@du ~
╰─➤ fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l #创建逻辑分区
Adding logical partition 5
First sector (10489856-20973567, default 10489856):
Using default value 10489856
Last sector, +sectors or +size{K,M,G} (10489856-20973567, default 20973567): +10G #逻辑分区大小不能超过扩展分区大小
Value out of range.
Last sector, +sectors or +size{K,M,G} (10489856-20973567, default 20973567): +2g
Unsupported suffix: ‘g’.
Supported: 10^N: KB (KiloByte), MB (MegaByte), GB (GigaByte)
2^N: K (KibiByte), M (MebiByte), G (GibiByte)
Last sector, +sectors or +size{K,M,G} (10489856-20973567, default 20973567): +2G
Partition 5 of type Linux and of size 2 GiB is set

Command (m for help): P

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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: 0xe140b235

Device Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 20973567 5242880 5 Extended
/dev/sdb5 10489856 14684159 2097152 83 Linux

Command (m for help): W
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#第三步:创建文件系统

╭─root@du ~
╰─➤ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb5
╭─root@du ~
╰─➤ mkfs.xfs /dev/sdb5
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

#第四步:开机自动挂载

╭─root@du ~
╰─➤ echo “mount /dev/sdb5 /xfs_du” >> /etc/rc.local

本地目录创建交换分区

第一步:创建目录

1
mkdir /swap

第二步:创建空文件

1
dd if=/dev/zero of=/swap/swap bs=2M count=2014

第三步:格式化为swap格式

1
mkswap /swap/swap

第四步:写入文件/etc/fstab 开机自动挂载

1
echo "/swap/swap swap swap defaults 0 0" >> /etc/fstab

第五步:修改权限,挂载

1
2
3
chmod 0600 /swap/swap

mount -a

第六步:开启swap

1
2
3
4
5
swapon -a
[root@node1 ~]# free -h
total used free shared buff/cache available
Mem: 976M 321M 60M 9.5M 594M 466M
Swap: 5.9G 221M 5.7G

最后:关闭swap

1
swapoff -a

https://baike.baidu.com/item/硬盘分区表

https://www.cnblogs.com/hiwangzi/p/7640995.html

https://www.linuxprobe.com/chapter-06.html

https://www.cnblogs.com/du-z/p/10870162.html