我有一台虚拟机,其硬盘大小为 3GB,我想将其硬盘扩大到 7GB。
因此我在主机上执行此命令(当客户机关闭时):
VBoxManage modifyhd debian.vdi --resize 7168
然后我运行客户机 Debian 6,然后:
smith@debian6:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 2.8G 2.6G 60M 98% /
tmpfs 61M 0 61M 0% /lib/init/rw
udev 57M 160K 57M 1% /dev
tmpfs 61M 0 61M 0% /dev/shm
smith@debian6:~$ sudo parted /dev/sda print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 3221MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 3035MB 3034MB primary ext3 boot
2 3036MB 3220MB 185MB extended
5 3036MB 3220MB 185MB logical linux-swap(v1)
smith@debian6:~$ cat /proc/partitions
major minor #blocks name
8 0 3145728 sda
8 1 2962432 sda1
8 2 1 sda2
8 5 180224 sda5
因此,无法自动调整(检测)硬盘/分区的大小(而主机中的 VirtualBox 现在显示其大小为 7GB)。好的...
然后我这样做:
smith@debian6:~$ sudo resize2fs /dev/sda1
resize2fs 1.41.12 (17-May-2010)
The filesystem is already 740608 blocks long. Nothing to do!
smith@debian6:~$ sudo parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sda1
Using /dev/sda1
(parted) resize
WARNING: you are attempting to use parted to operate on (resize) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs. We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Partition number? 1
Start? 0
End? [3034MB]?
我在这里卡住了。上面parted
要求我将大小调整为 3GB。这没有意义,对吧……
我该怎么做才能扩大这个分区?
答案1
如果您尚未重新启动虚拟机,则操作系统可能不知道磁盘已扩展。因此,我将首先从此开始(或完全关闭虚拟机,然后启动)。您将遇到的第二个问题是,对正在使用的驱动器上的分区表所做的任何编辑都将在系统重新启动(或驱动器未使用)之前无法看到。因此,假设驱动器在重新启动后显示为 7GB,您将必须扩大分区,然后再次重新启动,最后发出 resize2fs 命令。顺便说一句,我个人通常不使用 parted,但看起来 re-size 命令会尝试重新调整分区和文件系统的大小——在这种情况下,您最好先重新调整分区的大小(通过 fdisk),然后在操作系统能够重新读取分区表(通过重新启动)后执行文件系统。哦,首先确保您有一个好的备份。
编辑:我在 VirtualBox 中设置了一个 3GB Debian VM,与您的一样,并记录了我将其扩展到 7GB 的步骤日志。摘要:关闭 VM,备份 VDI 文件,扩展 VDI,重新启动 VM,使用 fdisk - 将单位设置为扇区(u 命令)并显示分区表 (p),删除现有分区,重新创建根分区(注意使用与原始分区相同的起始扇区),重新创建扩展分区和交换,将主分区标记为可启动 (a),写入,重新启动,然后调整文件系统大小。
root@debian:~# cat /proc/partitions
major minor #块名称
8 0 3145728 sda
8 1 2962432 sda1
8 2 1 sda2
8 5 180224 sda5
root@debian:~# 退出
$ VBoxManage 列表 runningvms
“Debian”{b32e56f1-a6b9-4753-a67d-19f03503f884}
$ VBoxManage controlvm Debian acpipowerbutton
$ cp Debian.vdi Debian.vdi.backup
$ VBoxManage 修改 Debian.vdi 7168
$ VBoxManage startvm Debian
$ ssh[电子邮件保护]
root@debian:~#猫/ proc /分区
大调 小调 #blocks 名称
8 0 7340032 sda
8 1 2962432 sda1
8 2 1 sda2
8 5 180224 sda5
root@debian:~#swapoff /dev/sda5
root@debian:~#fdisk /dev/sda
命令(m 获取帮助):你
将显示/输入单位更改为扇区
命令(m 获取帮助):页
磁盘 /dev/sda:7516 MB,7516192768 字节
设备启动开始结束块 ID 系统
/dev/sda1 * 2048 5926911 2962432 83 Linux
分区 1 未在磁柱边界结束。
/dev/sda2 5928958 6289407 180225 5 扩展
分区 2 未在磁柱边界结束。
/dev/sda5 5928960 6289407 180224 82 Linux swap / Solaris
命令(m 获取帮助):d
分区号(1-5):5
命令(m 获取帮助):d
分区号(1-5):2
命令(m 获取帮助):d
选定分区 1
命令(m 获取帮助):n
命令操作
e扩展
p主分区(1-4)
页
分区号(1-4):1
第一个扇区(63-14680063,默认63):2048
最后一个扇区,+sectors 或 +size{K,M,G} (2048-14680063,默认 14680063):+6G
#重要!在这种情况下,Fdisk 默认起始扇区为 63,但原始操作系统安装从扇区 2048 开始。您必须(手动)指定与原始扇区相同的起始扇区。
命令(m 获取帮助):页
磁盘 /dev/sda:7516 MB,7516192768 字节
设备启动开始结束块 ID 系统
/dev/sda1 2048 12584960 6291456+ 83 Linux
命令(m 获取帮助):n
命令操作
e扩展
p主分区(1-4)
埃
分区号(1-4):2
第一个扇区(63-14680063,默认 63):12584961
最后一个扇区,+sectors 或 +size{K,M,G}(12584961-14680063,默认 14680063):
使用默认值 14680063
命令(m 获取帮助):n
命令操作
l 逻辑 (5 或以上)
p 主分区 (1-4)
升
第一个扇区(12585024-14680063,默认 12585024):
使用默认值 12585024
最后一个扇区,+扇区或 +size{K,M,G}(12585024-14680063,默认 14680063):
使用默认值 14680063
命令(m 获取帮助):页
设备启动开始结束块 ID 系统
/dev/sda1 2048 12584960 6291456+ 83 Linux
分区 1 未在磁柱边界结束。
/dev/sda2 12584961 14680063 1047551+ 5 扩展
分区 2 未在磁柱边界结束。
/dev/sda5 12585024 14680063 1047520 83 Linux
命令(m 获取帮助):A
分区号(1-5):1
命令(m 获取帮助):吨
分区号(1-5):5
十六进制代码(输入 L 列出代码):82
将分区 5 的系统类型更改为 82(Linux swap/Solaris)
命令(m 获取帮助):瓦
分区表已被改变!
调用ioctl()重新读取分区表。
警告:重新读取分区表失败,错误 16:设备或资源繁忙。
内核仍使用旧表。新表将在
下次重新启动时或运行 partprobe(8) 或 kpartx(8)
同步磁盘后使用。root
@debian:~#重启
$ ssh[电子邮件保护]
root@debian:~#猫/ proc /分区
大调 小调 #blocks 名称
8 0 7340032 sda
8 1 6291456 sda1
8 2 1 sda2
8 5 1047520 sda5
root@debian:~#自由度 /
文件系统 1K 块已使用可用使用率% 安装在
/dev/sda1 2915832 809244 1958468 30% /
root@debian:~#resize2fs /dev/sda1
resize2fs 1.41.12 (2010 年 5 月 17 日)
/dev/sda1 上的文件系统已安装在 / 上;需要在线调整大小
old desc_blocks = 1, new_desc_blocks = 1
正在对 /dev/sda1 执行在线调整大小至 1572864 (4k) 个块。/dev/sda1
上的文件系统现在长度为 1572864 个块。
root@debian:~#自由度 /
文件系统 1K 块已使用可用使用率% 安装在
/dev/sda1 6194240 810684 5071636 14% /
root@debian:~#mkswap /dev/sda5
答案2
在此特定实例中,您将无法增加 /dev/sda1 分区的大小,因为与其相邻的是扩展分区(最终是交换分区)。
只有当目标分区周围有连续空间时,您才可以扩展空间,在这种情况下没有。当然,如果您不想重新加载分区,情况确实如此。
在这种情况下,您需要做的是删除交换分区,删除扩展分区,扩展分区 1 并为交换分区留出空间,重新创建扩展分区,然后重新创建交换分区。然后,您可以在扩大的分区上执行 resize2fs。您可能还必须在修改后的交换分区上执行 mkswap 才能使其正常运行。