linux磁盘分区工具gdisk命令
利用gdisk对磁盘进行分区
一般fdisk适用于MBR分区表,而gdisk适用于GPT分区表。这两个软件的操作基本类似,掌握了其中一个,就可以很快掌握另一个。
而且这两个工具自带帮助系统,所以即使是第一次使用,根据提示也能够顺利完成磁盘分区操作。
gdisk
gdisk命令常用格式如下:gdisk[root@initroot ~]# gdisk 设备文件名(绝对路径)gdisk只有root用户才能有权限执行。 注意,gdisk参数是磁盘设备文件名,而不是分区设备文件。应为分区是针对整个磁盘设备,而不是针对某个分区进行的。不要加上数字!
由前面的lsblk输出,我们知道系统有个磁盘设备为/dev/sda, 我们用gdisk查看该磁盘的分区与相关数据:
[root@initroot ~]# gdisk /dev/sda #注意,参数是磁盘设备文件,而不是分区设备文件。不要加上数字! GPT fdisk (gdisk) version 0.8.6 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present #找到了 GPT 的分区表! Found valid GPT with protective MBR; using GPT. Command (? for help): #这里可以让你输入指令动作,可以按问号 (?) 来查看可用指令 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):上表中可以发现gdisk会扫描MBR与GPT分区表,因为目前gdisk主要支持GPT分区表格式, 如果发现磁盘是MBR分区表格式,会提示用户是否要将MBR分区表转换为GPT分区表。 如同上面的输出所示,gdisk的使用完全不需要死记硬背,gdisk会非常体贴告诉你? for help。 只需要按下?就能够看到gdisk提供的功能指令了! 我们上面对经常用到的指令增加了说明注释。 注意q和w这两个指令,都是离开gdisk,但是q对所做的操作不会保存,也就是离开gdisk后所有的操作都不会生效。 而w会保存用户的操作,离开gdisk,用户所做的分区操作就会生效。 所以我们可以随便操作和练习使用gdisk,只需要用q指令离开gdisk就可以了。 再次强调,你可以使用 gdisk 在您的磁盘上面胡搞瞎搞的进行实际操作,都不打紧,但是请千万记住,不要按下 w 即可!离开的时候按下q 就万事无妨啰! 不要在 MBR 分区上面使用 gdisk, 因为如果指令按错,恐怕你的分区纪录会全部死光光!也不要在 GPT 上面使用 fdisk 啦!切记切记!
Command (? for help): p 打印当前的磁盘分区表 Disk /dev/sda: 188743680 sectors, 90.0 GiB # 磁盘文件名/扇区数与总容量 Model: VBOX HARDDISK Sector size (logical/physical): 512/512 bytes # 单一扇区大小为 512 bytes Disk identifier (GUID): 092539E5-931A-4AD1-AC21-6E4AFE36E27E # 磁盘的 GPT 标识符 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 188743646 Partitions will be aligned on 2048-sector boundaries Total free space is 4029 sectors (2.0 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 188741631 90.0 GiB 8300 Linux filesystem # 分区编号 开始扇区号码 结束扇区号码 容量大小 Command (? for help): q按下q离开gdisk!不要随便按w!
p指令可以列出目前这颗磁盘的分区表信息,上半部显示整体磁盘的状态。 这个磁盘共有90GB左右的容量,共有188743680个扇区,每个扇区的容量为512bytes。目前的分区主要是以扇区为最小的单位。
下半部的分区表信息主要列出每个分区的信息项目。
每个分区各字段的含义如下:
Number: 分区编号,1号就是/dev/vda1;整部磁盘还可以进行额外的分区,因为最大扇区为 83886080,但只使用到 65026047 号而已;
Start(sector): 每一个分区的开始扇区号码位置;
End(sector): 每一个分区的结束扇区号码位置,与start之间可以算出分区的总容量;
Size: 分区的容量;
Code: 分区内的可能的文件系统类型。Linux为8300,swap为8200。不过这个项目只是一个提示而已,不见得真的代表此分区内的文件系统! Name: 文件系统的名称等。
一般新分区通常选用上一个分区的结束扇区号码数加1作为起始扇区号码!
新增分区
回到顶部1GB 的 xfs 文件系统 (Linux)
1GB 的 vfat 文件系统 (Windows)
0.5GB 的 swap (Linux swap)(这个分区等一下会被删除!)
[root@initroot ~]# gdisk /dev/sda Command (? for help): p Number Start (sector) End (sector) 1 2048 6143 2 6144 2103295 3 2103296 65026047 Size Code 2.0 MiB EF02 1024.0 MiB 0700 30.0 GiB 8E00 Name # 找出最后一个 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 2.0 MiB EF02 1024.0 MiB 0700 1 2048 6143 2 6144 2103295 3 2103296 65026047 30.0 GiB 8E00 4 65026048 67123199 1024.0 MiB 8300 Name Linux filesystem重点在『 Last sector 』那一行,那行绝对不要使用默认值!因为默认值会将所有的容量用光!因此它默认选择最大的扇区号码! 因为我们仅要 1GB 而已,所以你得要加上 +1G 这样即可!不需要计算 sector 的数量,gdisk 会根据你填写的数值, 直接计算出最接近该容量的扇区数!每次新增完毕后,请立即『 p 』查看一下结果喔!请继续处理后续的两个分区槽! 最终出现的画面会有点像底下这样才对!
Command (? for help): p Number Start (sector) End (sector) Size Code 2.0 MiB EF02 1024.0 MiB 0700 Name 1 2048 6143 2 6144 2103295 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@initroot ~]# 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@initroot ~]# partprobe [-s] # 你可以不要加 -s !那么屏幕不会出现讯息! [root@initroot ~]# partprobe -s # 不过还是建议加上 -s 比较清晰! /dev/vda: gpt partitions 1 2 3 4 5 6 # 实际的磁盘分区状态 [root@initroot ~]# lsblk /dev/vda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 40G 0 disk |-vda1 252:1 0 2M 0 part |-vda2 252:2 0 1G 0 part /boot |-vda3 252:3 0 30G 0 part | |-centos-root 253:0 0 10G 0 lvm / | |-centos-swap 253:1 0 1G 0 lvm [SWAP] | `-centos-home 253:2 0 5G 0 lvm /home |-vda4 252:4 0 1G 0 part |-vda5 252:5 0 1G 0 part `-vda6 252:6 0 500M 0 part [root@initroot ~]# 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 # 现在核心也正确的抓到了分区参数了!
删除分区
回到顶部[root@initroot ~]# gdisk /dev/vda Command (? for help): p Number 1 Start (sector) 2048 End (sector) 6143 Size Code 2.0 MiB EF02 Name2 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@initroot ~]# lsblk # 你会发现!怪了!怎么还是有 /dev/vda6 呢?没办法!还没有更新核心的分区表啊!所以当然有错! [root@initroot ~]# partprobe -s [root@initroot ~]# lsblk # 这个时候,那个 /dev/vda6 才真的消失不见了!了解吧!对于已经挂载使用的分区就不要随便改动了。例如,我们的系统现在已经使用了 /dev/vda2 ,那如果你要删除 /dev/vda2 的话, 必须要先将 /dev/vda2 卸除,否则直接删除该分区的话,虽然磁盘 还是慧写入正确的分区信息,但是核心会无法更新分区表的信息的! 另外,文件系统与 Linux 系统的稳定度,恐 怕也会变得怪怪的!反正!千万不要处理正在活动文件系统就对了!
initroot编辑整理,转载请注明www.initroot.com
100次点赞
100次阅读