云服务器磁盘扩容案例和相关知识汇总
- 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)
指定分区或设备的文件系统类型,常见的有:
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,async
rw
/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
,可以优化系统性能、增强安全性并确保文件系统在启动时正确挂载。
发表评论