Skip to content

磁盘扩展

一、背景说明

服务器在创建linux系统的时候,磁盘的大小和分区都是一开始设置好的,但是由于系统的应用越来越多,或者本身系统应用就是用来存储的,比如数据库(mysql)、消息队列(kafka)、镜像仓库、代码仓库等等。 这时候硬盘空间可能不足以支撑现有的系统运行,需要扩展硬盘的空间大小。

常用的扩展方式有:

  1. 增加硬盘

  2. 数据迁移新硬盘

下面介绍这两种方式如何对系统的硬盘进行扩展。

以下是做一个设定,具体情况需要根据实际的硬盘分区和硬盘驱动选择:

  1. 原硬盘的分区磁盘为:/dev/sda

  2. 新硬盘的分区磁盘为:/dev/sdb

查看为分区的磁盘命令:

fdisk -l

二、增加硬盘

2.1 磁盘分区

进入磁盘

fdisk /dev/sdb
  1. 创建分区

    1. 输入n,进行分区操作

    2. 选择分区类型:p-主分区,e-扩展分区,一般选择主分区,直接回车或者输入p回车

    3. 选择分区号:1-4随便选择分区号,最好依次选择

    4. 输入起始扇区:如果是新硬盘,一般是2048,回车即可,如果需要手动选择扇区自行选择

    5. 输入结束扇区:如果是需要固定大小,比如10G,则可以输入+10G的方式,也可以自行输入扇区的大小,计算方式如下:10 * 1024 * 1024 * 1024 / 512开头的10为10G。

  2. 输入命令w,重写分区表

2.2 挂载磁盘

将分区好的磁盘挂载到目录/mount

  1. 格式化分区

    mkfs -t ext4 /dev/sdb1
    #创建目录
    mkdir /mount
    #挂载目录
    mount /dev/sdb1 /mount
  2. 永久挂载

设置fstab,永久挂载

vi /etc/fstab

添加以下信息然后保存退出

  1. 路径挂载(推荐)

    /dev/sdb1 /mount                ext4    defaults        0 1
  2. UUID:通过命令blkid获取UUID

    UUID=68c7b9fb-5096-49be-a205-c6f0677ff743 /mount                ext4    defaults        0 1

第五列是dump备份设置。

当其值设置为1时,将允许dump备份程序备份;设置为0时,忽略备份操作;

第六列是fsck磁盘检查设置

其值是一个顺序。当其值为0时,永远不检查;而 / 根目录分区永远都为1。其它分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。

三、迁移新硬盘

新数据的硬盘假设为256G

3.1 数据迁移

通过dd命令将硬盘数据进行拷贝

sudo dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync

如果想查看dd的进度,打开新的窗口输入以下命令:

watch -n 5 pkill -USR1 -x dd

3.2 磁盘分区

禁用所有交换空间

swapoff -a

创建主分区

删除所有分区,并且创建主分区(修改大小)

进入磁盘

fdisk /dev/sdb
  1. 输入d删除分区(直到删除所有分区)

  2. 输入n,进行分区操作

  3. 选择分区类型:直接回车

  4. 选择分区号:直接回车

  5. 输入起始扇区:直接回车

  6. 输入结束扇区:输入+254G(根据实际的硬盘大小设置),本身硬盘是不满的,加上预留2G做swap

  7. 如果提示Partition #1 contains a ext4 signature,输入y回车

  8. 输入 t,选择分区 1,设置类型。这一步可以不需要设置,默认即可。

debian为 83(Linux 文件系统)

ubuntu为20(Linux 文件系统)

  1. 输入命令w,重写分区表

3.2.3 创建交换分区

进入磁盘

fdisk /dev/sdb
  1. 输入n,进行分区操作

  2. 选择分区类型:直接回车

  3. 选择分区号:直接回车(看个人选择)

  4. 输入起始扇区:直接回车

  5. 输入结束扇区:输入+1G(根据个人选择设置)

  6. 输入 t,选择分区 2(这里要对应自己的swap分区),设置类型为 82(swap)。

  7. 输入命令w,重写分区表

更新UUID

更新UUID有个好处,不需要去修改/etc/fstab里的挂载配置,使用相同的UUID即可避免,将启动引导到新的硬盘上即可

通过blkid查看分区的UUID

image-20240422171846134

记录两个uuid,假设sda1的UUID为UUID1,sda2的UUID为UUID2,sba1为主分区,sba5为swap

通过以下命令设置UUID,具体的分区号以实际为准:

#修复主分区文件:一直回车即可
fsck /dev/sdb1
#设置主分区,输入y
tune2fs -U $514d108d-3f4e-40a4-8621-acb35dc9dd39 /dev/sdb1
#设置swap
mkswap -U ccd62226-15bf-499e-80b3-981c4441698e /dev/sdb2
swapon /dev/sdb2

3.3 更新配置

更新引导

grub-install /dev/sdb
update-grub

重新生成 initramfs

update-initramfs -u

扩展大小

resize2fs /dev/sdb1

如果是虚拟机需要修改启动引导,这里还有个问题,如果重启以后,硬盘的分区变化了,需要重新更新引导,比如我的sdb在重启以后变成了sda,这个时候我需要重新更新引导