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;
Start(sector): 每一个分区的开始扇区号码位置;
End(sector): 每一个分区的结束扇区号码位置,与start之间可以算出分区的总容量;
Size: 分区的容量;
Code: 分区内的可能的文件系统类型。Linux为8300,swap为8200。不过这个项目只是一个提示而已,不见得真的代表此分区内的文件系统! Name: 文件系统的名称等。
整部磁盘还可以进行额外的分区,因为最大扇区为 83886080,但只使用到 65026047 号而已;
一般新分区通常选用上一个分区的结束扇区号码数加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内核的分区表信息

回到顶部
              # 你可以不要加 -s !那么屏幕不会出现讯息!
              [root@initroot ~]# partprobe [-s]
              # 不过还是建议加上 -s 比较清晰!
              [root@initroot ~]# partprobe -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
              # 现在核心也正确的抓到了分区参数了!
              

删除分区

回到顶部

已经学会了新增分区,那么删除分区呢?好!现在让我们将刚刚建立的 /dev/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次阅读