云服务器磁盘扩容案例和相关知识汇总

2025-06-21 15:22:00
丁国栋
原创 10
摘要:本文记录云服务器磁盘扩容案例和相关知识汇总。

云服务器磁盘扩容案例和相关知识汇总

云服务器的根文件系统对应的磁盘在云服务商控制台进行了扩容,从100GB扩容到了500GB。通过 lsblk 命令执行结果发现硬盘大小已经从原来的100GB变为500GB。

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1   17M  0 rom
vda    254:0    0  500G  0 disk
└─vda1 254:1    0  100G  0 part /
# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs          tmpfs     770M  1.7M  769M   1% /run
/dev/vda1      ext4      493G  102G  371G  22% /
tmpfs          tmpfs     3.8G   24K  3.8G   1% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     770M     0  770M   0% /run/user/0
#

由上文可见硬盘设备名是vda,对应分区名是vda1。/dev/vda1 是ext4文件系统, 现在需要把vda1的空间大小扩容从100GB到vda的最大容量即500GB。


1. 检查当前磁盘和分区情况

lsblk
fdisk -l /dev/vda
df -hT
  • 确认 /dev/vda 已扩容到 500GB,但 /dev/vda1 仍为 100GB。
  • 确认文件系统类型为 ext4

2. 安装 growpart(如果未安装)

# CentOS/RHEL:
yum install -y cloud-utils-growpart
# Ubuntu/Debian:
apt-get install -y cloud-guest-utils

growpart 用于调整分区大小。


3. 扩展分区 /dev/vda1 到最大可用空间

growpart /dev/vda 1
  • 此命令会将 /dev/vda1 扩展到 /dev/vda 的最大可用空间(500GB)。
  • 如果报错 "no tools available to resize disk",可能需要先卸载分区(不建议在线操作,建议先做快照)。

4. 重新加载分区表

这个命令可能并没有,如果没有可以忽略(因为lsblk已经识别到硬盘大小是500GB了)。

partprobe /dev/vda

这个命令是让内核识别新的分区表,避免重启。


5. 扩展 ext4 文件系统

resize2fs /dev/vda1
  • 此命令会将 ext4 文件系统扩展到 /dev/vda1 的完整大小。

6. 验证扩容是否成功

df -h
lsblk
  • 检查 /dev/vda1 是否已显示为 500GB(或接近 500GB,因为文件系统会有少量开销)。

Linux 中 /etc/fstab 文件详解

/etc/fstab (文件系统表) 是 Linux 系统中一个重要的配置文件,用于定义系统启动时自动挂载的文件系统信息。它包含了磁盘分区、挂载点、文件系统类型以及挂载选项等信息。

文件格式概述

/etc/fstab 文件由若干行组成,每行定义一个文件系统的挂载信息。每行通常包含6个字段,字段之间用空格或制表符分隔:

<设备> <挂载点> <文件系统类型> <挂载选项> <dump备份标志> <fsck检查顺序>

各字段详细解释

1. 设备 (Device)

指定要挂载的存储设备或分区,可以是以下形式之一:

  • 设备文件名:如 /dev/sda1/dev/nvme0n1p2
  • UUID:如 UUID=123e4567-e89b-12d3-a456-426614174000 (推荐使用,更稳定)
  • LABEL:如 LABEL=ROOT
  • 网络设备:如 server:/share (NFS) 或 //server/share (CIFS)

示例:

/dev/sda1       # 使用设备路径
UUID=123...456  # 使用UUID
LABEL=DATA      # 使用卷标

2. 挂载点 (Mount Point)

指定文件系统的挂载目录,必须是已存在的目录路径。

示例:

/               # 根分区
/home           # 家目录分区
/mnt/data       # 数据分区

3. 文件系统类型 (Filesystem Type)

指定分区或设备的文件系统类型,常见的有:

  • ext4ext3ext2 - Linux 常用文件系统
  • xfs - 高性能文件系统
  • btrfs - 高级功能文件系统
  • vfatfat32 - Windows FAT 文件系统
  • ntfs - Windows NTFS 文件系统
  • swap - 交换分区
  • nfs - 网络文件系统
  • cifs - SMB/CIFS (Windows 共享)
  • auto - 自动检测文件系统类型

示例:

ext4    # 标准Linux文件系统
ntfs    # Windows NTFS分区
nfs     # 网络文件系统

4. 挂载选项 (Mount Options)

定义挂载时的各种选项,多个选项用逗号分隔。常见选项包括:

常用选项

  • defaults - 相当于 rw,suid,dev,exec,auto,nouser,async
  • rw / ro - 读写或只读挂载
  • noexec - 禁止执行该分区上的程序
  • exec - 允许执行程序
  • nosuid - 忽略 setuid 和 setgid 位
  • nodev - 不解释设备文件
  • sync / async - 同步/异步 I/O
  • atime / noatime - 是否更新文件访问时间
  • relatime - 优化访问时间更新
  • discard - 启用 TRIM (SSD优化)
  • nofail - 设备不存在时不报错

文件系统特定选项

  • uid= / gid= - 指定挂载的所有者 (用于FAT/NTFS)
  • umask= / fmask= / dmask= - 权限掩码
  • credentials= - SMB/CIFS 认证文件

示例:

defaults,noatime    # 默认选项+不更新访问时间
rw,nosuid,nodev,noexec  # 安全限制较多的挂载
user,noauto         # 允许用户挂载,但不自动挂载

5. dump 备份标志

控制 dump 工具是否备份该文件系统:

  • 0 - 禁用备份 (大多数文件系统应设为0)
  • 1 - 启用备份 (通常只对根文件系统设为1)

在 Linux 的 /etc/fstab 中,dump 是一个历史悠久的备份工具,用于文件系统的增量备份。虽然现代系统较少直接使用 dump,但它的配置选项仍保留在 /etc/fstab 中。

6. fsck 检查顺序

控制启动时 fsck 检查文件系统的顺序:

  • 0 - 不检查
  • 1 - 优先检查 (通常设为根文件系统)
  • 2+ - 次要检查 (其他文件系统)

示例 fstab 条目

# 设备/分区           挂载点      类型    选项                  dump fsck
UUID=123...456      /           ext4    defaults,noatime     0    1
UUID=abc...def      /home       ext4    defaults,relatime    0    2
UUID=987...654      none        swap    sw                   0    0
/dev/sdb1           /mnt/data   ntfs    rw,user,uid=1000     0    0
server:/share       /mnt/nfs    nfs     defaults,_netdev     0    0
//server/share      /mnt/smb    cifs    credentials=/etc/smbpass.txt 0 0

真实例子1

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-MWwFTaBxyft4dnO9bt1pKvMoKDslt6OFim1WDYU0SI439mdmpbSHTM3zLLFsNaBJ / ext4 defaults 0 1
# /boot was on /dev/nvme0n1p2 during curtin installation
/dev/disk/by-uuid/541ac6c9-38c5-4c8f-b7bc-5c936139b9cc /boot ext4 defaults 0 1
# /boot/efi was on /dev/nvme0n1p1 during curtin installation
/dev/disk/by-uuid/0946-8CB4 /boot/efi vfat defaults 0 1
/swap.img       none    swap    sw      0       0

真实例子2

# CLOUD_IMG: This file was created/modified by the Cloud Image build process
UUID=a50a23a3-d964-4dfb-96e3-2536bdc8898e       /        ext4   discard,errors=remount-ro       0 1
UUID=cf077612-a959-4240-9014-ec9faae34ee8       /data    ext4   defaults        0 2
UUID=F3C9-4183  /boot/efi       vfat    umask=0077      0 1

完整行解析:

UUID=a50a23a3-d964-4dfb-96e3-2536bdc8898e / ext4 discard,errors=remount-ro 0 1
部分 说明
UUID=a50a23a3-d964-4dfb-96e3-2536bdc8898e 指定要挂载的设备(通过唯一UUID标识)
/ 挂载目标路径(根目录)
ext4 文件系统类型(ext4)
discard,errors=remount-ro 挂载选项(多个选项用逗号分隔)
0 是否用 dump 备份(0表示不备份)
1 是否用 fsck 检查磁盘顺序(1表示优先检查)

关键部分详解:

1. UUID=...(设备标识)

  • 作用:通过唯一的UUID(而非设备名如 /dev/vda1)标识磁盘分区,避免设备名变化(如从 vda1 变成 vdb1)导致系统无法启动。
  • 查看UUID

    blkid /dev/vda1

    ls -l /dev/disk/by-uuid/

2. discard(挂载选项)

  • 作用:启用TRIM功能,适用于SSD磁盘,可提升性能并延长寿命。
  • 注意:如果是传统HDD,无需此选项。

3. errors=remount-ro(挂载选项)

  • 作用:如果文件系统出现错误,自动以只读(read-only)模式重新挂载,防止数据损坏。
  • 替代方案
    • errors=panic:直接触发内核崩溃(极端情况使用)。
    • errors=continue:忽略错误(不推荐)。

4. 0 1(fsck和dump设置)

  • 第一个数字 0
    • 表示是否用 dump 工具备份(0=不备份,1=备份)。
  • 第二个数字 1
    • 表示 fsck 在启动时的检查优先级(1=根分区优先检查,2=其他分区,0=不检查)。

特殊注意事项

  1. 网络文件系统:应添加 _netdev 选项,确保网络就绪后再挂载
  2. 交换分区:挂载点为 none,类型为 swap,选项为 sw
  3. 用户挂载:添加 user 选项允许非root用户挂载
  4. 自动挂载noauto 选项可防止启动时自动挂载
  5. 安全考虑:对于不可信的文件系统,考虑使用 nosuid,nodev,noexec

应用更改

修改 /etc/fstab 后,可以执行以下命令测试并应用更改:

# 测试fstab是否有语法错误
sudo mount -a
# 重新挂载所有文件系统
sudo mount -o remount /

最佳实践

  1. 尽可能使用 UUID 而非设备路径 (/dev/sdX),因为设备名可能变化
  2. 对 SSD 考虑添加 discard 选项启用 TRIM
  3. 对频繁读取的文件系统考虑 noatimerelatime
  4. 对不需要执行程序的分区使用 noexec
  5. 备份原始的 fstab 文件后再修改

通过正确配置 /etc/fstab,可以优化系统性能、增强安全性并确保文件系统在启动时正确挂载。

发表评论
博客分类