如何在AWS为EC2实例挂载新EBS卷且不丢失原有数据?
嘿,我来帮你搞定EC2磁盘空间不足的问题,全程不会丢失原有数据,放心跟着步骤操作就行:
挂载新EBS卷并保留数据的详细步骤
首先先确认你已经把创建好的EBS卷成功附加到目标EC2实例了(如果还没做,去AWS控制台的EC2页面找到对应实例,点「存储」标签,选「附加卷」挑你创建的EBS卷就行,附加后会分配一个设备名,比如/dev/xvdb或者/dev/nvme1n1,具体取决于实例类型)。
接下来登录你的EC2实例,按以下步骤操作:
1. 识别新附加的EBS卷
先执行命令查看所有磁盘设备,找到你的新卷:
lsblk
你会看到类似这样的输出(其中xvda是你的根卷,没有挂载点的那个就是新卷,比如下面的xvdb):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdb 202:16 0 50G 0 disk
2. 格式化新EBS卷(首次使用必做)
重要提醒:如果是全新的空EBS卷,必须格式化;如果是从快照恢复的已有数据的卷,直接跳过这一步!
这里以常用的ext4文件系统为例,执行格式化命令:
sudo mkfs -t ext4 /dev/xvdb
记得把/dev/xvdb换成你实际的新卷设备名。
3. 创建挂载点目录
选一个你想挂载新卷的目录,比如新建一个专门存数据的/data目录:
sudo mkdir /data
如果你想把现有大目录(比如/home)移到新卷,也可以直接用这个现有目录作为挂载点,后续再迁移数据。
4. 临时挂载新卷测试
先临时挂载,验证是否能正常识别:
sudo mount /dev/xvdb /data
然后用df -h检查,就能看到新卷已经成功挂载了:
df -h
5. 设置开机自动挂载(避免重启后失效)
编辑fstab配置文件,让系统开机自动挂载新卷:
sudo nano /etc/fstab
在文件末尾添加一行内容:
/dev/xvdb /data ext4 defaults,nofail 0 2
nofail参数很重要:确保即使挂载失败,实例也能正常启动- 替换
/dev/xvdb和/data为你的实际设备名和挂载点 - 如果用的是xfs文件系统,把
ext4改成xfs
保存退出后,执行以下命令测试配置是否正确(没报错就说明没问题):
sudo mount -a
可选方案:直接扩容根卷(替代挂载新卷)
如果你不想额外挂载一个卷,而是直接给现有根卷扩容,也是可行的:
- 去AWS控制台找到根卷,选择「修改卷」,调整到你需要的大小(比如20G)
- 回到实例,执行
lsblk确认卷大小已经更新(根卷的SIZE会显示新数值,但分区大小还是原来的) - 扩展分区和文件系统:
- 针对ext4文件系统:
sudo growpart /dev/xvda 1 sudo resize2fs /dev/xvda1 - 针对xfs文件系统:
sudo xfs_growfs /
- 针对ext4文件系统:
- 用
df -h确认根卷空间已经扩容成功
额外注意事项
- 操作前建议给根卷创建一个快照,以防万一(虽然步骤都是安全的,但快照是万全之策)
- 如果要把现有数据(比如
/home的内容)移到新卷,先备份,再用rsync命令迁移:
之后修改sudo rsync -avx /home/ /data/fstab把新卷挂载到/home,重启后验证即可。
内容的提问来源于stack exchange,提问作者v v




