云服务器磁盘扩容案例和相关知识汇总
- 2025-06-21 15:22:00
- 丁国栋
- 原创 192
云服务器磁盘扩容案例和相关知识汇总
案例1:根分区扩容
云服务器的根文件系统对应的磁盘在云服务商控制台进行了扩容,从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",可能需要先卸载分区(不建议在线操作,建议先做快照)。
其他方式
parted /dev/sda print # 查看变化 parted /dev/sda resizepart 1 100% # 调整分区 resize2fs /dev/sda1 # 调整文件系统
4. 重新加载分区表
这个命令可能并没有,如果没有可以忽略(因为lsblk已经识别到硬盘大小是500GB了)。
partprobe /dev/vda
这个命令是让内核识别新的分区表,避免重启。
5. 扩展 ext4 文件系统
resize2fs /dev/vda1
- 此命令会将 ext4 文件系统扩展到
/dev/vda1的完整大小。
6. 验证扩容是否成功
df -h
lsblk
- 检查
/dev/vda1是否已显示为 500GB(或接近 500GB,因为文件系统会有少量开销)。
案例2:数据盘扩容
一个云服务器的数据盘 /dev/vdc 原来是2TB,整块磁盘是lvm的一个pv,这个pv用于VG vg_data。vg_data对应创建了LV lv_data。现在LV lv_data空间不足,需要扩容。
一般有两种方案:
- 扩容原来的硬盘 /dev/vdc (推荐)
- 增购一个新的硬盘,加入到已有的lvm中
方案一:扩容原有硬盘 /dev/vdc
操作步骤
-
云控制台扩容硬盘
# 1. 在云控制台将/dev/vdc从2TB扩容到目标容量(如4TB) # 2. 重启服务器或重新扫描磁盘 -
扫描磁盘变更
# 查看当前磁盘大小(未刷新) fdisk -l /dev/vdc # 重新扫描SCSI总线 echo 1 > /sys/class/block/vdc/device/rescan # 或使用rescan-scsi-bus.sh(需安装scsi-target-utils) -
调整物理卷
# 扩展物理卷 pvresize /dev/vdc # 验证 pvdisplay /dev/vdc -
扩展逻辑卷
# 查看可用空间 vgdisplay vg_data # 扩展逻辑卷(扩展到全部空间或指定大小) lvextend -l +100%FREE /dev/vg_data/lv_data # 或指定具体容量 lvextend -L +1T /dev/vg_data/lv_data -
扩展文件系统
# 如果是ext4文件系统 resize2fs /dev/vg_data/lv_data # 如果是xfs文件系统 xfs_growfs /mount/point # 验证 df -h
优点
- 管理简单:单磁盘管理,无多盘复杂性
- 性能稳定:无需跨盘数据分布
- 成本可能更低:云厂商大容量单价通常更低
- 无数据迁移:原有数据布局不变
缺点
- 需要重启/扫描:可能需要重启或特殊操作才能识别新容量
- 有单点风险:单磁盘故障会导致整个VG不可用
- 扩展上限:受单盘最大容量限制
- 业务中断:可能需要卸载文件系统操作
方案二:新增硬盘加入LVM
操作步骤
-
云控制台添加新盘
# 1. 购买新数据盘(如2TB) # 2. 挂载到服务器,识别为/dev/vdd -
创建物理卷
# 创建PV pvcreate /dev/vdd # 验证 pvdisplay /dev/vdd -
扩展卷组
# 将新PV加入现有VG vgextend vg_data /dev/vdd # 验证 vgdisplay vg_data -
扩展逻辑卷
# 查看可用空间 vgdisplay vg_data # 扩展LV lvextend -l +100%FREE /dev/vg_data/lv_data -
扩展文件系统
# 同方案一,根据文件系统类型选择命令 resize2fs /dev/vg_data/lv_data # 或 xfs_growfs /mount/point
优点
- 无需扩容原盘:避免原盘扩容风险
- 扩展灵活:可多盘扩展,突破单盘限制
- 在线扩展:通常无需重启
- 性能提升:多盘可配置条带化提升性能
- 风险分散:多盘降低单点故障影响
缺点
- 管理复杂:多盘管理更复杂
- 成本可能更高:多小盘总价可能高于单大盘
- 性能不均衡:新增盘性能可能不同
- 依赖LVM:LVM故障影响所有盘
- 盘符限制:可能受设备名数量限制
对比建议
| 维度 | 方案一(扩容原盘) | 方案二(新增盘) |
|---|---|---|
| 复杂度 | 低 | 中 |
| 风险 | 中 | 低 |
| 成本 | 可能较低 | 可能较高 |
| 性能 | 稳定 | 可提升 |
| 扩展性 | 有限 | 好 |
| 业务影响 | 可能需重启 | 小 |
推荐方案
短期解决:使用方案二,新增一个同规格硬盘,风险最小,操作最快。
长期规划:
- 如果数据增长可预测,使用方案一扩容到足够容量
- 如果对性能有要求,使用方案二并配置条带化
- 如果对可用性要求高,使用方案二并保持多盘
重要注意事项
-
备份优先:
# 操作前必须备份 rsync -av /data/ /backup/ # 或创建LVM快照 lvcreate -L 10G -s -n lv_data_snap /dev/vg_data/lv_data -
文件系统检查:
# 扩展前先检查 e2fsck -f /dev/vg_data/lv_data # 或 xfs_repair /dev/vg_data/lv_data -
操作后验证:
lsblk vgdisplay lvdisplay df -h -
更新fstab:确保fstab使用UUID而非设备名
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)
指定分区或设备的文件系统类型,常见的有:
ext4、ext3、ext2- Linux 常用文件系统xfs- 高性能文件系统btrfs- 高级功能文件系统vfat、fat32- 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,asyncrw/ro- 读写或只读挂载noexec- 禁止执行该分区上的程序exec- 允许执行程序nosuid- 忽略 setuid 和 setgid 位nodev- 不解释设备文件sync/async- 同步/异步 I/Oatime/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=不检查)。
- 表示
特殊注意事项
- 网络文件系统:应添加
_netdev选项,确保网络就绪后再挂载 - 交换分区:挂载点为
none,类型为swap,选项为sw - 用户挂载:添加
user选项允许非root用户挂载 - 自动挂载:
noauto选项可防止启动时自动挂载 - 安全考虑:对于不可信的文件系统,考虑使用
nosuid,nodev,noexec
应用更改
修改 /etc/fstab 后,可以执行以下命令测试并应用更改:
# 测试fstab是否有语法错误
sudo mount -a
# 重新挂载所有文件系统
sudo mount -o remount /
最佳实践
- 尽可能使用 UUID 而非设备路径 (/dev/sdX),因为设备名可能变化
- 对 SSD 考虑添加
discard选项启用 TRIM - 对频繁读取的文件系统考虑
noatime或relatime - 对不需要执行程序的分区使用
noexec - 备份原始的 fstab 文件后再修改
通过正确配置 /etc/fstab,可以优化系统性能、增强安全性并确保文件系统在启动时正确挂载。
如果磁盘是虚拟机磁盘,从虚拟机管理器中扩容磁盘后,虚拟机操作系统没有识别到,此时可以执行echo 1 > /sys/class/block/sda/device/rescan来触发内核重新扫描该设备的 SCSI 总线,检测存储设备的变化(如新增的磁盘空间、分区等)。/sys/class/block/sda/device/rescan 是 Linux 系统中一个特殊的虚拟文件,用于触发 SCSI 设备的重新扫描操作。
如果要扩容的磁盘没有分区,即是直接将磁盘格式化为文件系统(mkfs.ext4 /dev/sda),此时只需要执行 resize2fs /dev/sda 即可完成文件系统的扩容。