VirtualBox 中 Linux 磁盘管理实操指南
一、前置准备与总体思路
- 操作前务必关闭虚拟机,并优先完整备份重要数据(可用 rsync、dd、tar 等方式)。
- 扩容思路分两步:先在宿主机用 VBoxManage 扩大虚拟磁盘文件;再在虚拟机内让 分区表与文件系统识别并利用新增空间。
- 若当前磁盘为 VMDK,可先克隆为 VDI 再扩容:
VBoxManage clonehd “源.vmdk” “目标.vdi” --format VDI
然后对新 VDI 执行扩容命令。
二、扩展现有虚拟磁盘容量(宿主机操作)
- 查看磁盘信息(获取 UUID 或路径):
VBoxManage list hdds
- 调整 VDI 大小(单位:MB;示例将磁盘扩至 50GB=51200MB):
VBoxManage modifyhd “C:\VMs\vm\disk.vdi” --resize 51200
- 若是 VMDK,先克隆为 VDI 后按上条命令扩容,再在虚拟机设置里用“使用现有虚拟盘”指向新 VDI。
- 启动虚拟机,确认系统已识别更大容量(如 fdisk/lsblk 看到更大总容量)。
三、在 Linux 内扩展分区与文件系统
- 识别设备与空间:lsblk、sudo fdisk -l,确认新增的未分配空间位置与大小。
- 场景 A(非 LVM,直接在已有分区上扩容,示例为 ext4)
- 使用 parted 在线调整分区大小(保持起始扇区不变,仅扩展结束扇区):
sudo parted /dev/sda
(parted) resizepart 1 100%
(parted) quit
- 扩展文件系统:
sudo resize2fs /dev/sda1
- 场景 B(使用 LVM 扩容,常见于 CentOS/RHEL 等)
- 创建新分区并设为 LVM 类型(示例新增分区为 /dev/sda3):
sudo fdisk /dev/sda → n → p → 3 → 回车(起始扇区)→ 回车(占用全部未分配)→ t → 3 → 8e → w
如遇“设备或资源忙”,执行 partprobe 或重启后再继续。
- 初始化为物理卷并扩容卷组与逻辑卷:
sudo pvcreate /dev/sda3
sudo vgextend <VG名> /dev/sda3
sudo lvextend -l +100%FREE /dev/<VG名>/<LV名>
- 扩展文件系统:
- ext2/ext3/ext4:sudo resize2fs /dev/<VG名>/<LV名>
- xfs:sudo xfs_growfs /挂载点(如 / 或 /home)
- 场景 C(新增一块虚拟硬盘,而非扩容原盘)
- VirtualBox 设置 → 存储 → SATA 控制器 → 添加虚拟硬盘(优先使用 SATA,避免 IDE)。
- 在系统内分区(fdisk/parted)、格式化(mkfs.ext4/mkfs.xfs)、挂载(mount),并在 /etc/fstab 写入持久化挂载条目。
四、常用命令速查表
| 目标 |
命令示例 |
| 宿主机扩容 VDI |
VBoxManage modifyhd “disk.vdi” --resize 51200 |
| 克隆 VMDK 为 VDI |
VBoxManage clonehd “a.vmdk” “b.vdi” --format VDI |
| 查看磁盘与分区 |
lsblk、sudo fdisk -l |
| 调整分区大小 |
sudo parted /dev/sda resizepart 1 100% |
| 扩展 ext4 文件系统 |
sudo resize2fs /dev/sda1 |
| 扩展 XFS 文件系统 |
sudo xfs_growfs /mountpoint |
| LVM:创建 PV |
sudo pvcreate /dev/sda3 |
| LVM:扩容 VG |
sudo vgextend vg_name /dev/sda3 |
| LVM:扩容 LV |
sudo lvextend -l +100%FREE /dev/vg_name/lv_name |
| 持久化挂载 |
echo ‘/dev/sdb1 /data ext4 defaults 0 0’ |
以上命令需按实际设备名(如 /dev/sda、/dev/sdb)、卷组名(如 centos、vg_aimin)与文件系统类型调整。
五、常见问题与排错要点
- 虚拟机无法启动或分区表异常:检查分区起始扇区是否被改变;必要时用 LiveCD/救援模式修复或回滚。
- 文件系统损坏:先卸载后执行 fsck 检查修复。
- 扩展后 df 未变化:确认已对正确的 LV 执行了文件系统扩容(ext4 用 resize2fs,xfs 用 xfs_growfs 且对挂载点执行)。
- 空间未识别:执行 partprobe 或重启,使内核重新读取分区表。
- 扩容前务必完整备份,并在操作过程中保持电源与存储稳定。