好的。想象一下,您最终会遇到这样一种情况:多个从属虚拟机都是从同一个模板预先创建的,所有虚拟机都具有统一的磁盘大小。当您需要在其中一些虚拟机上运行更大的东西(例如数据库)时,创建另一个磁盘来保存数据库是很自然的,这样它就会与系统数据分开。这样更容易管理,更容易备份等。但是您将如何扩展这些磁盘呢?
默认情况下,用 MBR 标记所有磁盘并在其上创建一个大分区是正常的。但这样做实际上是在自找麻烦:您无法在线扩展此类分区。如果您首先选择使用 RAW 磁盘或创建带有一个大分区的 LVM,您可以在扩展底层卷后调整其大小,但如果使用 MBR,则不能。您需要停止服务,卸载分区,编辑 MBR……这会造成干扰,并且不受欢迎。
我已经/dev/sdb1
上线/mnt
,想停止服务。我该怎么办?
答案1
答案的关键是:您需要停止使用 MBR/GPT。挂载 MBR 分区时,内核会锁定分区表,无法更改。您需要卸载。因此第一次会中断。但经过小幅重新配置后,我们就可以开始了。
umount /mnt
sgdisk -p /dev/sdb
在打印的行中你需要写下几个数字。如果你想继续或回滚,这些数字是必需的。
Logical sector size:
512
bytes
<- 这是扇区大小,默认为 512,但请务必检查。
Number Start (sector) ...
1
2048
...
<- 分区的起始扇区,这也是默认设置,但请记得检查。
所以我们的分区起始偏移量(以字节为单位)是 1048576。现在我们可以删除 MBR 并直接挂载分区:
sgdisk -d 1 /dev/sdb1
mount -t ext4 -o offset=1048576 /dev/sdb /mnt
这样您就不是直接安装磁盘,而是创建一个loop
仅包含原始磁盘所需部分的设备。可以使用 来操作此类设备losetup
。
从现在起,磁盘将直接挂载,无需任何分区。磁盘调整大小的过程如下:
# resize partition in VMWare/VirtualBox/Xen/nameit
# remember to put real numbers in here
echo 1 > /sys/class/scsi_device/#\:#\:#\:#/device/rescan
losetup -c /dev/loop0
resize2fs /dev/loop0
如果您想恢复到原始 MBR,您也可以这样做。缩小分区(在磁盘末尾留出一些空间),卸载磁盘并重新创建指定正确起始扇区的分区。