虚拟机磁盘空间出现告急时,盲目扩容主分区可能直接导致系统出现崩溃,可以采取添加新虚拟硬盘。不管是扩容根目录还是挂载专用数据盘,都要精准操作,今天我们一起分享关于覆盖VMware、VirtualBox双平台,包含分区、LVM管理、自动挂载及7类高频故障解决方案。
一、虚拟机层面:添加虚拟硬盘的正确姿势
VMware Workstation 操作流程:先关闭虚拟机在右键“设置”点击“添加”按钮,再选择“硬盘”选择创建新虚拟磁盘。关键参数设置:磁盘类型默认SCSI(Linux兼容性好),容量按需分配(如50GB),勿勾选“立即分配空间”(节省主机磁盘),存储为单个文件(性能更优)。启动虚拟机,执行 lsblk 查看新磁盘(通常为 /dev/sdb 或 /dev/sdc)
VirtualBox 操作流程:关闭虚拟机 → 设置 → “存储”标签 → 控制器SATA下方“添加硬盘”图标。创建VDI格式动态分配磁盘,注意:口类型选SATA(避免旧版IDE导致识别失败);若需直连物理分区,选“固定大小”+“原始磁盘”(高危操作需备份)。启动后终端输入 sudo fdisk l 检查新磁盘(名称通常为 /dev/sdX)
避坑提示:添加后磁盘在Linux中不会自动分区格式化,需手动操作。若未识别,尝试扫描SCSI总线:
echo ' ' | sudo tee /sys/class/scsi_host/host/scan # VMware
sudo rmmod ahci && sudo modprobe ahci # VirtualBox SATA控制器重置
二、Linux系统层:分区、格式化到挂载全流程
步骤1:分区规划决策
场景1:单分区直挂(简单应用) → 用 fdisk/gdisk 创建单个分区
场景2:LVM弹性扩容(推荐) → 创建物理卷加入卷组,可动态调整
场景3:多分区独立使用 → 按需求划分多个主分区或扩展分区
步骤2:分区实操(以 /dev/sdb 为例)
sudo fdisk /dev/sdb # 进入交互命令行
# 指令序列:
n # 新建分区
p # 主分区
1 # 分区号1
回车 # 起始扇区默认
+30G # 分配30GB空间
t # 更改分区类型
8e # 选Linux LVM(若做普通分区跳过此步)
w # 写入分区表并退出
执行 partprobe /dev/sdb 刷新内核分区表
步骤3:文件系统格式化
# 常用格式选择:
sudo mkfs.ext4 /dev/sdb1 # 通用日志文件系统
sudo mkfs.xfs /dev/sdb1 # 高性能大文件场景
sudo mkfs.btrfs /dev/sdb1 # 支持快照和压缩
# 为LVM准备的物理卷无需格式化:
sudo pvcreate /dev/sdb1 # 标记为物理卷
步骤4:挂载与开机自动加载
# 临时挂载测试
sudo mkdir /data # 创建挂载点
sudo mount /dev/sdb1 /data # 挂载
df hT /data # 验证是否成功
# 永久自动挂载(编辑/etc/fstab)
sudo nano /etc/fstab
# 添加一行:
/dev/sdb1 /data ext4 defaults,noatime 0 2
# 测试配置是否正确
sudo mount a
三、高阶技巧:LVM动态存储管理实战
扩容原有逻辑卷(如根目录空间不足)。添加新硬盘并创建物理卷:
sudo pvcreate /dev/sdb1
扩展卷组到新物理卷:
sudo vgextend ubuntuvg /dev/sdb1 # "ubuntuvg"为卷组名(通过vgdisplay查看)
扩容逻辑卷(如根目录对应的/dev/mapper/ubuntuvgroot):
sudo lvextend l +100%FREE /dev/mapper/ubuntuvgroot
调整文件系统大小:
sudo resize2fs /dev/mapper/ubuntuvgroot # ext4文件系统
# 若为xfs:sudo xfs_growfs /
创建独立逻辑卷
sudo lvcreate L 20G n datalv ubuntuvg # 从卷组划分20G创建逻辑卷
sudo mkfs.xfs /dev/ubuntuvg/datalv # 格式化
sudo mount /dev/ubuntuvg/datalv /mnt/data # 挂载
四、故障排查:7类高频问题解决方案
如出现磁盘识别失败fdisk l 无新设备的情况,是虚拟机控制器驱动未加载。需要执行:
sudo modprobe virtio_scsi # KVM虚拟机
sudo modprobe vmw_pvscsi # VMware
ls /sys/class/scsi_host/ # 查看主机编号
echo " " /sys/class/scsi_host/host0/scan # 强制扫描
如果出现挂载失败:
mount: wrong fs type
这是因为文件系统工具未安装:
sudo apt install xfsprogs # XFS支持
sudo apt install btrfsprogs # Btrfs支持
出现重启后挂载失效是fstab配置错误。 典型错误有使用/dev/sdb1等易变设备名(重启后可能变成/dev/sdc1)、缺少defaults或文件系统类型拼写错误。根治方案是改用UUID挂载:
sudo blkid /dev/sdb1 # 查看磁盘UUID
# /etc/fstab中替换为:
UUID=1234abcd5678 /data ext4 defaults 0 2
如果是权限拒绝:Permission denied。比如普通用户无法读写挂载点。需要挂载时添加权限选项:
# 在/etc/fstab中添加:
UUID=xxxx /data ext4 defaults,uid=1000,gid=1000 0 2
# uid/gid通过id u 用户名获取
LVM扩容后文件系统未生效lvextend成功但df h显示容量未变,关键在于未执行文件系统扩容命令:
# ext2/3/4执行:
sudo resize2fs /dev/mapper/vgname/lvname
# xfs执行(必须在挂载状态):
sudo xfs_growfs /mountpoint
还有出现实际使用中误删分区表恢复。需要立即卸载磁盘:
sudo umount /dev/sdb
安装:
testdisk:sudo apt install testdisk
扫描分区:
sudo testdisk /dev/sdb → 选择"Analyse"
按提示恢复分区表。
如果是需要硬盘性能优化参数,在/etc/fstab中添加:
noatime,nodiratime # 减少元数据写入
data=writeback # ext4放宽日志策略(风险自担)
discard # 启用TRIM(SSD必须)
替代方案:直通物理分区(高危慎用)
当需要虚拟机直接读写主机物理分区时:
# VirtualBox命令:
VBoxManage internalcommands createrawvmdk filename ~/physical.vmdk rawdisk /dev/sda partitions 1,5
# 然后挂载生成的vmdk文件
警告:此操作可能导致主机分区损坏,务必先备份!
扩容不是终点,稳定与效率兼得
添加硬盘的本质是平衡存储需求与系统可靠性。遵循三个原则,测试先行临时挂载验证后再写入fstab;标识固化始终用UUID替代/dev/sdX;监控预警设置df h定时任务,空间不足80%即触发告警。当新硬盘平稳运行后,下一步应考虑冗余备份(如LVM快照或rsync同步)。存储扩容只是起点,数据安全才是终极目标。