如何更改 Ubuntu 虚拟机上的分区?

如何更改 Ubuntu 虚拟机上的分区?

原始问题:如何在没有 Live CD 的情况下调整根分区的大小?

我有一个虚拟机需要放大。我把虚拟机映像放大了,现在我需要调整分区大小,以便使用额外的空间。

这是我当前的分区表,目标是合并/dev/vda1/dev/vda2
vda1我当前的根分区是包含(交换)
vda2的扩展分区vda5

Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    18874367     9436160   83  Linux
/dev/vda2        18876414    20969471     1046529    5  Extended
/dev/vda5        18876416    20969471     1046528   82  Linux swap / Solaris

使用 Gparted 和 Live CD 会很简单,但我只能通过 ssh 连接到服务器,或者在 virt-manager 中打开它,但它仍然只是命令行。我怎么才能调整根分区的大小?

VM 是 Ubuntu 服务器 12.04。

答案1

您需要将虚拟机与实时 CD 的 iso 连接起来 - 您可以下载该文件。我假设您没有使用 GUI 工具(例如虚拟管理器安装 virt-manager),因此您必须从命令行执行此操作。

您可以使用virsh它来获取 VM 配置的 XML 文件(我称之为我的 VM qemu1

virsh dumpxml qemu1 > qemu1-config.xml

现在编辑该文件,查找类似

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <target dev='hdc' bus='ide' tray='open'/>
  <readonly/>
  <alias name='ide0-1-0'/>
  <address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>

并将其替换为

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/media/data/isos/gparted-live-0.13.0-1.iso'/>
  <target dev='hdc' bus='ide'/>
  <readonly/>
  <address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>

重点是

  • 调整路径和文件名
  • 该行<source file=.../>包含 iso 文件
  • 该行<target .../>不应该包含tray open现在

现在你可以使用以下命令使新设置生效

virsh define qemu1-config.xml

虚拟机需要重新启动。

答案2

最终的效果如下:

为虚拟机放大 img(虚拟磁盘映像)文件:

  1. 创建原始光盘文件

    sudo qemu-img create -f raw addon.raw 10G
    
  2. 备份当前图片

    sudo mv domain.img domain.old.img
    
  3. 合并原始文件和额外文件以创建新的更大尺寸的 img 文件。

    sudo cat domain.old.img addon.raw >> domain.img
    

现在我们有了更大的图像,但是虚拟机仍然有旧的分区表。

现在到了棘手的部分。

下一步是在关闭虚拟机的情况下在主机上完成的

下载 gparted 的 iso 文件:

wget -c http://sourceforge.net/projects/gparted/files/gparted-live-stable/0.6.4-1/gparted-live-0.6.4-1.iso

使用虚拟映像作为虚拟系统中的硬盘来启动 iso

kvm -m 512 -hda domain.img -cdrom gparted-live-0.6.4-1.iso -boot d

我们基本上启动了一个kvm从 cdrom 启动的虚拟系统-boot d,并且 gparted 位于 cdrom 中-cdrom gparted-live-0.6.4-1.iso,并且在这个虚拟系统中将 domain.img 视为硬盘-hda domain.img并为这个虚拟系统分配 512mb 内存-m 512

现在 gparted 弹出一个不错的 GUI(可能还有一个命令行选项),准备重新分区您的虚拟磁盘。

现在您可以像在真实机器上使用 liveCD 一样操作分区表。

大部分信息取自这篇博文作者:克里斯·沃尔登(Chris Walden)。

感谢 guntbert为我指明正确的方向(即可以从 liveCD 启动 VM)。

答案3

您可以使用 gParted 和resizefrom 命令行。输入...

sudo -i
parted

它将显示

GNU Parted 1.7.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

list将显示很多命令...

(分开)列表
  check NUMBER 对文件系统进行简单检查
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER 将文件系统复制到另一个分区
  help [COMMAND] 打印常规帮助,或有关 COMMAND 的帮助
  mklabel LABEL-TYPE 创建一个新的磁盘标签(分区表)
  mkfs NUMBER FS-TYPE 在分区 NUMBER 上创建 FS-TYPE 文件系统
  mkpart PART-TYPE [FS-TYPE] START END 创建分区
  mkpartfs PART-TYPE FS-TYPE START END 创建具有文件系统的分区
  移动 NUMBER START END 移动分区 NUMBER
  名称 NUMBER NAME 名称分区 NUMBER 作为 NAME
  print [free|NUMBER|all] 显示分区表,分区或所有设备
  退出 退出程序
  救援 START END 救援靠近 START 和 END 的丢失分区
  调整分区 NUMBER 的大小 START END 调整分区 NUMBER 及其文件系统的大小
  rm NUMBER 删除分区 NUMBER
  选择设备 选择要编辑的设备
  设置 NUMBER FLAG STATE 更改分区 NUMBER 上的 FLAG
  切换 [NUMBER [FLAG]] 切换分区 NUMBER 上的 FLAG 状态
  unit UNIT 将默认单位设置为 UNIT
  version 显示 GNU Parted 的当前版本和版权信息

  • print将显示光盘布局并向光盘添加编号;
  • resize {number}将允许您调整光盘大小。
  • 这只对未挂载的分区有效;)

我自己从来没有这样使用过,所以发出命令时要小心。

答案4

您可以使用parted命令行工具来实现此目的。

首先,您需要删除扩展分区。

使用以下方式列出分区parted

parted /dev/vda

记下您的扩展分区号并将starting and ending blocks其删除。

(parted) rm 2  

2您的扩展分区号在哪里

不使用即可检查

(parted) print

您的扩展分区将被删除。

现在在剩余空间中创建主分区。

(parted) mkpart primary <starting block no.>   <ending block no.>

先前已注明起始和结束块号。

再次检查

(parted) print

重新启动系统以查看效果。

调整根分区的大小:

resize2fs /dev/vda

您只需检查磁盘空间即可。

df -lh

您将获得根分区的扩展。

相关内容