原始问题:如何在没有 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 工具(例如虚拟管理器),因此您必须从命令行执行此操作。
您可以使用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(虚拟磁盘映像)文件:
创建原始光盘文件
sudo qemu-img create -f raw addon.raw 10G
备份当前图片
sudo mv domain.img domain.old.img
合并原始文件和额外文件以创建新的更大尺寸的 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 和resize
from 命令行。输入...
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
您将获得根分区的扩展。