我有一个 Ubuntu 11.10 系统,有两个 500GB 磁盘。分区表如下所示:
/dev/sda1 primary 465.52GB
/dev/sda2 extended 243.17MB
-> /dev/sda5 logical 243.14MB
/dev/sdb1 primary 465.76GB
sda1 和 sdb1 位于单个 LVM 物理卷组中,该组包含单个逻辑卷,其中包含单个逻辑文件系统,该逻辑文件系统以 / 形式挂载。sda5 以 /boot 形式挂载。
当我想升级到 Ubuntu 12.04 时,问题就出现了,它要求 /boot 上至少有 247MB 的可用空间。因此,我需要减小 sda1 的大小,以便可以增加 sda2 和 sda5 的大小。我该怎么做呢?我可以找到如何缩小逻辑卷组的方法,但我完全不清楚如何清除 sda1 的末尾部分,以便可以缩小物理卷组。pvresize 会自动处理这个问题吗?还是这只是一厢情愿的想法?
我猜想替代方法是将所有内容备份到某个东西上并从头开始重新创建,或者查明 GRUB2 是否支持使用 LVM 进行 /boot。
答案1
缩小包含第一个物理卷的第一个分区后pvresize
,您需要扩大该/boot
分区。
为了扩展/boot
分区,您必须将其起始点移动到第一个磁盘上。您可以parted
使用move
命令来完成此操作。
然后您可以再次调整分区大小parted
并最终扩大文件系统。
答案2
在 12.04 中,在 GRUB 中启用 LVM 和 raid 模块将使其大于引导加载程序可用的传统 62 个扇区。据说现在大多数系统的分区都与 1MB 标记对齐,因此通常有足够的空间。您可以使用其中一个fdisk
s 或parted
检查sda1
分区的起始位置(我知道 Debian 的安装程序对于所有内容的去向含糊不清,不确定 Ubuntu 的安装程序是否不同)。在尝试之前一定要检查,似乎有很多报告说,如果空间不足,grub 会抱怨没有足够的空间来工作,但无论如何尝试并让系统无法启动。
作为如何使用 fdisk 来说明的示例,这是fdisk /dev/sda
我很久以前安装的 Debian 系统:(使用命令“u”显示扇区,然后使用“p”打印表格,“q”退出而不进行任何更改)
Device Boot Start End Blocks Id System /dev/sda1 63 1959929 979933+ 83 Linux
这表明,在我的情况下,它前面只有 62 个扇区。我无法直接从 LVM 启动。
答案3
我已经搞清楚了。在开始之前,我要说的是,下面的数字可能不合逻辑——我曾尝试完全重现我所做的一切,但我不得不回溯这些数字。我的建议是尽可能以千字节为单位进行所有操作,因为所有工具都同意它们的大小。使用 fdisk 时要非常小心,分区至少要与它包含的物理卷一样大,因为如果您尝试做一些愚蠢的事情,它不会警告您。
首先,我需要从闪存启动(因为根文件系统在 LV 中)。然后检查文件系统是否正常:
e2fsck -f /dev/mapper/root
然后调整文件系统的大小:
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/root 935093704 472743436 414857916 54% /
$ resize2fs /dev/mapper/root 934093704k
然后调整逻辑卷的大小:
$ lvresize -L 934093704K /dev/mapper/root
检查文件系统是否正常:
$ e2fsck -f /dev/mapper/root
现在看一下物理卷 - /dev/sdb1 最后应该有一些可用空间:
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda1 toad lvm2 a- 465.76g 4.00m
/dev/sdb1 toad lvm2 a- 465.76g 1.28g
我们需要将这个可用空间移动到 /dev/sdb1 的末尾。首先查看每个驱动器上有多少个区:
$ pvs --segments
PV VG Fmt Attr PSize PFree Start SSize
/dev/sda1 toad lvm2 a- 465.76g 4.00m 0 119173
/dev/sdb1 toad lvm2 a- 465.76g 1.28g 0 119141
然后将一些内容从一个移动到另一个:$ pvmove /dev/sda1:118923:119173 /dev/sdb1
$ pvs --segments
PV VG Fmt Attr PSize PFree Start SSize
/dev/sda1 toad lvm2 a- 464.55g 1.00g 0 119141
/dev/sdb1 toad lvm2 a- 465.76g 284.0m 0 119141
/dev/sdb1 toad lvm2 a- 465.76g 284.0m 119141 119173
现在您可以使用 pvresize 调整物理卷的大小:
$ pvresize --setphysicalvolumesize 487112704k /dev/sda1
现在,您可以使用 fdisk 调整分区大小。这里有一个警告:我的分区设置为 /dev/sda1 从扇区 63 开始。我假设这是默认设置,所以实际上没有记下来。然后 fdisk 只允许我从扇区 2048 开始重新创建分区,我不知道这是错的 - 现在我的系统无法使用!幸运的是,您可以重新删除并重新创建分区而不会产生任何不良影响,但我不得不猜测分区应该从哪里开始。所以在删除分区之前,请记下分区的起始位置!
$ fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000730a3
Device Boot Start End Blocks Id System
/dev/sda1 63 974227455 488113696+ 8e Linux LVM
/dev/sda2 974229504 976771071 1270784 5 Extended
/dev/sda5 974231552 976771071 1269760 83 Linux
Command (m for help): d
Partition number (1-5): 1
Command (m for help): n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-976773167, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-974229503, default 974229503): +487113696K
Command (m for help): x
Expert command (m for help): b
Partition number (1-5): 1
New beginning of data (1-974229439, default 2048): 63
我使用 GParted 移动并调整了 /dev/sda2 和 /dev/sda5 的大小,这让我不那么紧张了。最后:
$ mkdir disk
$ mount /dev/sda5 disk
$ grub-install --boot-directory=./disk /dev/sda
在新位置重新安装引导加载程序。
请注意,我首先创建了从 2048 开始的分区,然后将开始移动到 63。
此处的 LVM 命令会告诉您是否要执行某些愚蠢的操作,例如使物理卷小于其包含的分配范围,但有些命令不会,尤其是 fdisk - 很容易最终调整分区大小,从而切断物理卷的末尾。这是一件坏事。确保分区至少与物理卷一样大!