接下来我们想要进行磁盘分区啰!要注意的是:“MBR 分区表请使用 fdisk 分区, GPT 分区表请使用 gdisk 分区!” 这个不要搞错~否则会分区失败的!另外,这两个工具软件的操作很类似,执行了该软件后,可以通过该软件内部的说明数据来操作, 因此不需要硬背!只要知道方法即可。刚刚从上面parted的输出结果,我们也知道鸟哥这个测试机使用的是 GPT 分区, 因此下面通通得要使用 gdisk 来分区才行!
- gdisk
[root@study ~]# gdisk 设备名称
范例:由前一小节的 lsblk 输出,我们知道系统有个 /dev/vda,请观察该磁盘的分区与相关数据
[root@study ~]# gdisk /dev/vda
&
lt;==仔细看,不要加上数字喔!
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
&
lt;==找到了 GPT 的分区表!
Command (? for help):
&
lt;==这里可以让你输入指令动作,可以按问号 (?) 来查看可用指令
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition # 删除一个分区
i show detailed information on a partition
l list known partition types
n add a new partition # 增加一个分区
o create a new empty GUID partition table (GPT)
p print the partition table # 印出分区表 (常用)
q quit without saving changes # 不储存分区就直接离开 gdisk
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit # 储存分区操作后离开 gdisk
x extra functionality (experts only)
? print this menu
Command (? for help):
你应该要通过 lsblk 或 blkid 先找到磁盘,再用 parted /dev/xxx print 来找出内部的分区表类型,之后才用 gdisk 或 fdisk 来操作系统。 上表中可以发现 gdisk 会扫描 MBR 与 GPT 分区表,不过这个软件还是单纯使用在 GPT 分区表比较好啦!
老实说,使用 gdisk 这支程序是完全不需要背指令的!如同上面的表格中,你只要按下 ? 就能够看到所有的动作! 比较重要的动作在上面已经用底线画出来了,你可以参考看看。其中比较不一样的是“q 与 w”这两个玩意儿! 不管你进行了什么动作,只要离开 gdisk 时按下“q”,那么所有的动作“都不会生效!”相反的, 按下“w”就是动作生效的意思。所以,你可以随便玩 gdisk ,只要离开时按下的是“q”即可。 ^_^! 好了,先来看看分区表信息吧!
Command (? for help): p
&
lt;== 这里可以输出目前磁盘的状态
Disk /dev/vda: 83886080 sectors, 40.0 GiB # 磁盘文件名/扇区数与总容量
Logical sector size: 512 Bytes # 单一扇区大小为 512 Bytes
Disk identifier (GUID): A4C3C813-62AF-4BFE-BAC9-112EBD87A483 # 磁盘的 GPT 识别码
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 18862013 sectors (9.0 GiB)
Number Start (sector) End (sector) Size Code Name # 下面为完整的分区信息了!
1 2048 6143 2.0 MiB EF02 # 第一个分区数据
2 6144 2103295 1024.0 MiB 0700
3 2103296 65026047 30.0 GiB 8E00
# 分区编号 开始扇区号码 结束扇区号码 容量大小
Command (? for help): q
# 想要不储存离开吗?按下 q 就对了!不要随便按 w 啊!
使用“ p ”可以列出目前这颗磁盘的分区表信息,这个信息的上半部在显示整体磁盘的状态。 以鸟哥这颗磁盘为例,这个磁盘共有 40GB 左右的容量,共有 83886080 个扇区,每个扇区的容量为 512Bytes。 要注意的是,现在的分区主要是以扇区为最小的单位喔!
下半部的分区表信息主要在列出每个分区的个别信息项目。每个项目的意义为:
- Number:分区编号,1 号指的是 /dev/vda1 这样计算。
- Start (sector):每一个分区的开始扇区号码位置
- End (sector):每一个分区的结束扇区号码位置,与 start 之间可以算出分区的总容量
- Size:就是分区的容量了
- Code:在分区内的可能的文件系统类型。Linux 为 8300,swap 为 8200。不过这个项目只是一个提示而已,不见得真的代表此分区内的文件系统喔!
- Name:文件系统的名称等等。
从上表我们可以发现几件事情:
- 整部磁盘还可以进行额外的分区,因为最大扇区为 83886080,但只使用到 65026047 号而已;
- 分区的设计中,新分区通常选用上一个分区的结束扇区号码数加 1 作为起始扇区号码!
这个 gdisk 只有 root 才能执行,此外,请注意,使用的“设备文件名”请不要加上数字,因为 partition 是针对“整个磁盘设备”而不是某个 partition 呢!所以执行“ gdisk /dev/vda1 ” 就会发生错误啦!要使用 gdisk /dev/vda 才对!
Tips再次强调,你可以使用 gdisk 在您的磁盘上面胡搞瞎搞的进行实际操作,都不打紧,但是请“千万记住,不要按下 w 即可!”离开的时候按下 q 就万事无妨啰! 此外,不要在 MBR 分区上面使用 gdisk,因为如果指令按错,恐怕你的分区纪录会全部死光光!也不要在 GPT 上面使用 fdisk 啦!切记切记!
- 用 gdisk 新增分区
如果你是按照鸟哥建议的方式去安装你的 CentOS 7,那么你的磁盘应该会预留一块容量来做练习的。如果没有的话, 那么你可能需要找另外一颗磁盘来让你练习才行呦!而经过上面的观察,我们也确认系统还有剩下的容量可以来操作练习分区! 假设我需要有如下的分区需求:
- 1GB 的 xfs 文件系统 (Linux)
- 1GB 的 vfat 文件系统 (Windows)
- 0.5GB 的 swap (Linux swap)(这个分区等一下会被删除喔!)
那就来处理处理!
[root@study ~]# gdisk /dev/vda
Command (? for help): p
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
2 6144 2103295 1024.0 MiB 0700
3 2103296 65026047 30.0 GiB 8E00
# 找出最后一个 sector 的号码是很重要的!
Command (? for help): ? # 查一下增加分区的指令为何
Command (? for help): n # 就是这个!所以开始新增的行为!
Partition number (4-128, default 4): 4 # 默认就是 4 号,所以也能 enter 即可!
First sector (34-83886046, default = 65026048) or {+-}size{KMGTP}: 65026048 # 也能 enter
Last sector (65026048-83886046, default = 83886046) or {+-}size{KMGTP}: +1G # 决不要 enter
# 这个地方可有趣了!我们不需要自己去计算扇区号码,通过 +容量 的这个方式,
# 就可以让 gdisk 主动去帮你算出最接近你需要的容量的扇区号码喔!
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): # 使用默认值即可~直接 enter 下去!
# 这里在让你选择未来这个分区预计使用的文件系统!默认都是 Linux 文件系统的 8300 啰!
Command (? for help): p
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
2 6144 2103295 1024.0 MiB 0700
3 2103296 65026047 30.0 GiB 8E00
4 65026048 67123199 1024.0 MiB 8300 Linux filesystem
重点在“ Last sector ”那一行,那行绝对不要使用默认值!因为默认值会将所有的容量用光!因此它默认选择最大的扇区号码! 因为我们仅要 1GB 而已,所以你得要加上 +1G 这样即可!不需要计算 sector 的数量,gdisk 会根据你填写的数值, 直接计算出最接近该容量的扇区数!每次新增完毕后,请立即“ p ”查看一下结果喔!请继续处理后续的两个分区! 最终出现的画面会有点像下面这样才对!
Command (? for help): p
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
2 6144 2103295 1024.0 MiB 0700
3 2103296 65026047 30.0 GiB 8E00
4 65026048 67123199 1024.0 MiB 8300 Linux filesystem
5 67123200 69220351 1024.0 MiB 0700 Microsoft basic data
6 69220352 70244351 500.0 MiB 8200 Linux swap
基本上,几乎都用默认值,然后通过 +1G, +500M 来创建所需要的另外两个分区!比较有趣的是文件系统的 ID 啦!一般来说, Linux 大概都是 8200/8300/8e00 等三种格式, Windows 几乎都用 0700 这样,如果忘记这些数字,可以在 gdisk 内按下:“ L ”来显示喔! 如果一切的分区状态都正常的话,那么就直接写入磁盘分区表吧!
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/vda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
# gdisk 会先警告你可能的问题,我们确定分区是对的,这时才按下 y !不过怎么还有警告?
# 这是因为这颗磁盘目前正在使用当中,因此系统无法立即载入新的分区表~
[root@study ~]# cat /proc/partitions
major minor #blocks name
252 0 41943040 vda
252 1 2048 vda1
252 2 1048576 vda2
252 3 31461376 vda3
253 0 10485760 dm-0
253 1 1048576 dm-1
253 2 5242880 dm-2
# 你可以发现,并没有 vda4, vda5, vda6 喔!因为核心还没有更新!
因为 Linux 此时还在使用这颗磁盘,为了担心系统出问题,所以分区表并没有被更新喔!这个时候我们有两个方式可以来处理! 其中一个是重新开机,不过很讨厌!另外一个则是通过 partprobe 这个指令来处理即可!
partprobe 更新 Linux 核心的分区表信息
[root@study ~]# partprobe [-s] # 你可以不要加 -s !那么屏幕不会出现讯息! [root@study ~]# partprobe -s # 不过还是建议加上 -s 比较清晰! /dev/vda: gpt partitions 1 2 3 4 5 6
[root@study ~]# lsblk /dev/vda # 实际的磁盘分区状态 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 40G 0 disk
&
124;-vda1 252:1 0 2M 0 part
&
124;-vda2 252:2 0 1G 0 part /boot
&
124;-vda3 252:3 0 30G 0 part
&
124;
&
124;-centos-root 253:0 0 10G 0 lvm /
&
124;
&
124;-centos-swap 253:1 0 1G 0 lvm [SWAP]
&
124; `-centos-home 253:2 0 5G 0 lvm /home
&
124;-vda4 252:4 0 1G 0 part
&
124;-vda5 252:5 0 1G 0 part
`-vda6 252:6 0 500M 0 part
[root@study ~]# cat /proc/partitions # 核心的分区纪录 major minor #blocks name
252 0 41943040 vda 252 1 2048 vda1 252 2 1048576 vda2 252 3 31461376 vda3 252 4 1048576 vda4 252 5 1048576 vda5 252 6 512000 vda6
现在核心也正确的抓到了分区参数了!
- 用 gdisk 删除一个分区
已经学会了新增分区,那么删除分区呢?好!现在让我们将刚刚创建的 /dev/vda6 删除!你该如何进行呢?鸟哥下面很快的处理一遍, 大家赶紧来瞧一瞧先!
[root@study ~]# gdisk /dev/vda
Command (? for help): p
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
2 6144 2103295 1024.0 MiB 0700
3 2103296 65026047 30.0 GiB 8E00
4 65026048 67123199 1024.0 MiB 8300 Linux filesystem
5 67123200 69220351 1024.0 MiB 0700 Microsoft basic data
6 69220352 70244351 500.0 MiB 8200 Linux swap
Command (? for help): d
Partition number (1-6): 6
Command (? for help): p
# 你会发现 /dev/vda6 不见了!非常棒!没问题就写入吧!
Command (? for help): w
# 同样会有一堆讯息!鸟哥就不重复输出了!自己选择 y 来处理吧!
[root@study ~]# lsblk
# 你会发现!怪了!怎么还是有 /dev/vda6 呢?没办法!还没有更新核心的分区表啊!所以当然有错!
[root@study ~]# partprobe -s
[root@study ~]# lsblk
# 这个时候,那个 /dev/vda6 才真的消失不见了!了解吧!
Tips万分注意!不要去处理一个正在使用中的分区!例如,我们的系统现在已经使用了 /dev/vda2 ,那如果你要删除 /dev/vda2 的话, 必须要先将 /dev/vda2 卸载,否则直接删除该分区的话,虽然磁盘还是慧写入正确的分区信息,但是核心会无法更新分区表的信息的! 另外,文件系统与 Linux 系统的稳定性,恐怕也会变得怪怪的!反正!千万不要处理正在使用中的文件系统就对了!
- fdisk
虽然 MBR 分区表在未来应该会慢慢的被淘汰,毕竟现在磁盘容量随便都大于 2T 以上了。而对于在 CentOS 7.x 中还无法完整支持 GPT 的 fdisk 来说, 这家伙真的英雄无用武之地了啦!不过依旧有些旧的系统,以及虚拟机的使用上面,还是有小磁盘存在的空间!这时处理 MBR 分区表, 就得要使用 fdisk 啰!
因为 fdisk 跟 gdisk 使用的方式几乎一样!只是一个使用 ? 作为指令提示数据,一个使用 m 作为提示这样而已。 此外,fdisk 有时会使用柱面 (cylinder) 作为分区的最小单位,与 gdisk 默认使用 sector 不太一样!大致上只是这点差别! 另外, MBR 分区是有限制的 (Primary, Extended, Logical...)!不要忘记了!鸟哥这里不使用范例了,毕竟示范机上面也没有 MBR 分区表... 这里仅列出相关的指令给大家对照参考啰!
[root@study ~]# fdisk /dev/sda
Command (m for help): m
&
lt;== 输入 m 后,就会看到下面这些指令介绍
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
&
lt;==删除一个partition
l list known partition types
m print this menu
n add a new partition
&
lt;==新增一个partition
o create a new empty DOS partition table
p print the partition table
&
lt;==在屏幕上显示分区表
q quit without saving changes
&
lt;==不储存离开fdisk程序
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
&
lt;==将刚刚的动作写入分区表
x extra functionality (experts only)