linux基本功系列之fdisk命令实战

时间:2023-02-18 16:00:33

前言

大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第49篇文章。

????个人简介:大家好,我是沐风晓月,双一流院校计算机专业???????? ???? 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步???????????? ????欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信????

一. fdisk命令介绍

fdisk命令来自于英文词组“Partition table manipulator for Linux”的缩写,在系统中主要用来管理磁盘的分区信息。

我们在安装操作系统的时候,已经对磁盘进行分区,实际运行过程中,难免会有再加硬盘的情况,这时候就需要用到fdisk 了

fdisk有一定的局限性,只适合2T以下的磁盘分区,在大点的磁盘就要考虑gdisk之类的工具了。

二. 语法格式及常用选项

依据惯例,我们还是先查看帮助,使用fdisk 查看帮助信息,fdisk 不支持--help参数

[root@mufenggrow ~]# fdisk
用法:
 fdisk [选项] <磁盘>    更改分区表
 fdisk [选项] -l <磁盘> 列出分区表
 fdisk -s <分区>        给出分区大小(块数)

选项:
 -b <大小>             扇区大小(512、1024、2048或4096)
 -c[=<模式>]           兼容模式:“dos”或“nondos”(默认)
 -h                    打印此帮助文本
 -u[=<单位>]           显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
 -v                    打印程序版本
 -C <数字>             指定柱面数
 -H <数字>             指定磁头数
 -S <数字>             指定每个磁道的扇区数

为了更直观一些,我们把常用的参数用表格来展示:

参数 描述
-b 指定每个分区的大小
-l 列出指定的外围设备的分区表状况
-s 将指定的分区大小输出到标准输出上,单位为区块
-u 搭配”-l”参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址
-v 显示版本信息
-m 查看全部可用参数
-n 添加新的分区
-d 删除某个分区信息
-t 改变某个分区的类型
-p 查看分区表信息
-w 保存并退出
-q 不保存直接退出

有了具体的参数之后,我们再来看实战案例:

三. 参考案例

3.1 列出每个分区的大小

此时我们使用-l 列出指定的外围设备的分区表状况:

[root@mufenggrow ~]# fdisk -l

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

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM

磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


从上面代码中可以看到几个信息:

  • 快设备名称是: /dev/sda
  • 设备大小是:21.5G (但这个数值不是特别准确,想看准确的可以使用 lsblk
  • 字节数为: 21474836480 字节
  • 扇区数为: 41943040 个扇区

磁盘 /dev/mapper/centos-root: 是root分区

我们可以用lsblk查看准确的信息:

[root@mufenggrow ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  4.3G  0 rom  /mnt

3.2 分区操作

分区的语法:

fdisk + 分区名称

案例一: 将sdb盘分区为sdb1 的大为2个G

我们目前的磁盘中没有sdb盘,需要先增加一块盘, 我们的具体步骤如下:

  1. 新增加一块磁盘 sdb
  2. 使用fdisk对sdb盘进行分区,分区大小为2G
  3. 对新分区进行格式化
  4. 创建一个目录/sdb1,将新分区挂载到/sdb1上
  5. 查看是否成功。

3.2.1 添加硬盘

  • 选中硬盘,点击添加 linux基本功系列之fdisk命令实战

  • 在硬盘添加向导中点击下一步

linux基本功系列之fdisk命令实战

  • 硬盘类型,选择默认 linux基本功系列之fdisk命令实战

  • 选择使用哪个磁盘,选创新新的虚拟磁盘 linux基本功系列之fdisk命令实战

  • 设置磁盘容量 linux基本功系列之fdisk命令实战

  • 磁盘文件默认就行 linux基本功系列之fdisk命令实战

  • 完成后截图: linux基本功系列之fdisk命令实战

3.2.2 开启虚拟机并分区

  • 查看分区情况
[root@mufenggrow ~]# ll /dev/sd*
brw-rw----. 1 root disk 8,  0 2月  18 13:44 /dev/sda
brw-rw----. 1 root disk 8,  1 2月  18 13:44 /dev/sda1
brw-rw----. 1 root disk 8,  2 2月  18 13:44 /dev/sda2
brw-rw----. 1 root disk 8, 16 2月  18 13:44 /dev/sdb
[root@mufenggrow ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sr0              11:0    1  4.3G  0 rom  /run/media/root/CentOS 7 x86_64
[root@mufenggrow ~]# 

能看到sdb说明已经创建硬盘成功

  • 开始分区

使用fdisk /dev/sdb 然后根据命令提示进行分区

[root@mufenggrow ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

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

Device does not contain a recognized partition table
使用磁盘标识符 0xf08d8184 创建新的 DOS 磁盘标签。
## 这里输入m 获取帮助
命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   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
   x   extra functionality (experts only)

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB

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

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@mufenggrow ~]# 

代码执行中的操作如下图: linux基本功系列之fdisk命令实战

分区中常用的参数有:

参数 注释
-b 指定每个分区的大小
-l 列出指定的外围设备的分区表状况
-s 将指定的分区大小输出到标准输出上,单位为区块
-u 搭配”-l”参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址
-v 显示版本信息
-m 查看全部可用参数
-n 添加新的分区
-d 删除某个分区信息
-t
-p 查看分区表信息
-w 保存并退出
-q 不保存直接退出

3.3.3 分区完成后进行格式化挂载

先来看看是否分区成功:

[root@mufenggrow ~]# ll /dev/sdb*
brw-rw----. 1 root disk 8, 16 2月  18 13:47 /dev/sdb
brw-rw----. 1 root disk 8, 17 2月  18 13:47 /dev/sdb1
[root@mufenggrow ~]# 

可以看到已经分区成功了,接下来我们进行格式化的操作:

[root@mufenggrow ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              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@mufenggrow ~]# 

可以看到,格式化已经成功了,接下来我们创建目录并挂载

[root@mufenggrow ~]# mkdir /sdb1
[root@mufenggrow ~]# mount /dev/sdb1 /sdb1
[root@mufenggrow ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   17G  4.4G   13G   26% /
devtmpfs                 894M     0  894M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M   11M  900M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    182M  4.0K  182M    1% /run/user/42
tmpfs                    182M   24K  182M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1                2.0G   33M  2.0G    2% /sdb1
[root@mufenggrow ~]# 

可以看到已经挂载成功了。

四 . 设置分区自动挂载

在配置文件添加相关的挂载信息即可实现分区挂载

在 vim /etc/fstab #在文件最后写入:

/dev/sdb1 /sdb1 xfs defaults 0 0

linux基本功系列之fdisk命令实战

设置完成后,重启系统,或者用mount -a 进行挂载

除了这种方法之外也可以使用UUID进行挂载,使用命令获取分区的UUID

[root@mufenggrow ~]# blkid  /dev/sdb1
/dev/sdb1: UUID="37744f4c-2e85-4f17-9f24-52e6ac198576" TYPE="xfs" 

然后在配置文件中写入:

UUID="37744f4c-2e85-4f17-9f24-52e6ac198576"  /sdb1 xfs defaults 0 0

相当于只是把分区信息,改成了UUID的信息。