Ubuntu 下添加新硬盘操作

最近在安装 ESXI 环境,记录一下在 ubuntu 添加新硬盘的步骤,从中可以窥见硬盘设备的管理逻辑。


概述

  • 下文操作环境是 ESXI 上的虚拟机,理论上对物理机同样适用
  • 文中内容包括
    • 对硬盘建分区
    • 格式化分区
    • 将硬盘挂载到一个已经存在的目录
    • 设置开机自动挂载

添加硬盘

在 esxi 的虚拟机管理页时,在第一行可以为虚拟机添加额外的硬盘,网卡等设备。

1

增加硬盘后开机,硬盘连接到了 ubunut 系统,但是并没有做任何初始化工作,此时需要:

  1. 新建分区
  2. 格式化分区
  3. 将硬盘挂载到一个已经存在的目录
  4. 设置开机自动挂载

之后才能够无感的使用。

步骤

查看硬盘信息

用这个命令:

1
sudo fdisk -l

截图如下:

2

实际输出:

Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3C1AD3FC-FCB4-42DE-8AEB-266F62F453C9

Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 2101247 2097152 1G Linux filesystem
/dev/sda3 2101248 62912511 60811264 29G Linux filesystem

Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

解读:

其中 sda 是已经在使用中的硬盘,包括三个分区: sda1, sda2, sda3

而 sdb 还没有分区存在。

新建分区

使用这个命令对硬盘进行分区:

1
sudo fdisk /dev/sdb

截图如下

3

实际输出

hardnuts@vlab7:/mnt/volume$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x4cf6e589.

Command (m for help): m

根据提示,依次执行以下命令:

  • n (新建分区)
  • p (打印详情)
  • w (写入磁盘)
  • q (退出)

截图:

4

输出如下:

Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-209715199, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-209715199, default 209715199):

Created a new partition 1 of type ‘Linux’ and of size 100 GiB.

Command (m for help): p
Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x287febb1

Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 209715199 209713152 100G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

再查看看硬盘信息:

1
sudo fdisk -l

可以看见已经存在分区了:

5

输出:

Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x287febb1

Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 209715199 209713152 100G 83 Linux

但是这个时候分区还不能够使用,需要格式化之后才能够正常使用。

格式化和挂载分区

格式化命令

1
sudo mkfs -t ext4 /dev/sdb1

挂载分区即可使用

1
sudo mount -t auto /dev/sdb1 /mnt/volume

挂载的分区重启之后会消失掉。需要在每次开机之后再手动执行挂载命令。
当然应该做成自动挂载。

开机自动挂载

这里使用硬盘分区的 uuid 来定位一个分区,

查看磁盘的 UUID

1
blkid /dev/sdb1

输出:

/dev/sdb1: UUID=”c41fa94b-7789-4f22-bb69-3a7f7c924147” TYPE=”ext4” PARTUUID=”287febb1-01”

我们需要记录下来 UUID 这部分:“c41fa94b-7789-4f22-bb69-3a7f7c924147”

另一种查看 uuid 的方式是这样:

1
2
cd /dev/disk/by-uuid
ls -l

可以看到有多个 uuid 以及其连接的分区,其中也可以找到 sdb1 这个分区的 UUID。

接下来编辑 fstab

1
sudo vim /etc/fstab

加入以下行:(其中用到了 sdb1 的 UUID)

1
/dev/disk/by-uuid/c41fa94b-7789-4f22-bb69-3a7f7c924147 /mnt/volume  ext4 defaults 0 0

其中:

  • /dev/disk/by-uuid/c41fa94b-7789-4f22-bb69-3a7f7c924147 是磁盘的定位符
  • /mnt/volume 挂载点
  • ext4 文件系统类型
  • defaults 挂载选项
  • 0 dump 选项:是否让备份程序 dump 备份文件系统,0 为忽略,1 为备份,如果上次用 dump 备份,将显示备份至今的天数。
  • 0 fsck 选项:fsck 程序以什么顺序检查文件系统,为 0 就表示不检查,(/)分区永远都是 1,其它的分区只能从 2 开始,当数字相同就同时检查(但不能有两 1)

之后重启系统就可以自动挂载分区了。