我有以下情况:
我目前的 Ubuntu (12.04) 安装是从外部硬盘 (250 GB) 运行的,因为我懒得买新的内置硬盘。现在我有了一个新的内置硬盘 (120GB),我想把所有东西都移到内置硬盘上。安装新的 Ubuntu 不在讨论范围内,因为它太个性化了。
幸运的是(我希望如此)根分区是使用 LVM 分区的,所以我希望我可以将分区移动到较小的内部硬盘上。
这可能吗?我在哪里可以找到帮助?
编辑:这个问题已经很老了,可能已经过时了。我添加了当时使用的 Ubuntu 版本。
答案1
正如您所猜测的,使用 LVM 可以非常优雅地完成此操作。
缩小现有安装以适合较小的磁盘。
物理安装新硬盘,格式化pvcreate
它,并将vgextend
其添加到与根分区相同的 vg
用于pvmove
透明地将所有数据从旧分区移出
用于vgreduce
从 vg 中移除外部硬盘。拔下旧磁盘 /dev/sdOLD。
在下面的例子中:
/dev/sdOLD
代表要替换的旧分区/dev/sdNEW
代表新的分区将取代它。vgX
代表卷组
例如:当然,您必须 100% 确定您使用的设备是正确的。此外,拥有完整且最新的备份(已从系统中删除)也是必不可少的。
pvcreate /dev/sdNEW
vgextend vgX /dev/sdNEW
pvmove /dev/sdOLD
vgreduce vgX /dev/sdOLD
使用update-grub
和grub-install
使新的根磁盘可启动
完毕。
答案2
首先,如果您将整个 250GB 磁盘用于当前安装,则需要将其缩小以适合 120GB 磁盘。您只能在卸载 ext4 文件系统时对其进行缩小,因此您需要从 Ubuntu 实时系统(CD 或 USB)或专门的维护实时系统启动,例如GParted 直播。 您可以使用resize2fs
或 GParted 来调整现有文件系统的大小。
一旦您缩小了现有安装的文件系统以适应新磁盘,您就可以在挂载文件系统的情况下完成其余的移动(如果您愿意)。如果现有文件系统适合新磁盘,您可以进行传输而无需卸载任何内容或重新启动。
在下面的描述中,我将展示如何从物理卷移动/dev/sdb1
到物理卷/dev/sda1
,其中有一个名为的现有卷组oldvg
。请务必调整磁盘字母和分区号以匹配您的系统。
要进行实时传输:
- 使用您选择的分区工具对新磁盘进行分区(
cfdisk
、fdisk
、parted
、...)。例如,请参见如何添加额外的硬盘? - 在新磁盘上创建物理卷:
pvcreate /dev/sda1
- 将此物理卷添加到包含要移动的逻辑卷的现有卷组中:
vgextend oldvg /dev/sda1
- 将逻辑卷从一个物理卷移动到另一个物理卷:
pvmove /dev/sdb1 /dev/sda1
- 将现有卷组一分为二:
vgsplit oldvg newvg /dev/sda1
另一种方法是使用 将现有逻辑卷设为镜像卷lvconvert --mirror
,在新磁盘上设置镜像,然后使用 分割镜像lvconvert --splitmirrors
。这样,您将得到两份数据副本,分割后每份副本都有自己的生命力。
完成复制后,您需要使新磁盘可启动。为此挂载文件系统。假设它安装在 上/mnt
,请以 root 身份运行以下命令:
chroot /mnt
# if the name of the volume group has changed, edit /etc/fstab
update-grub
grub-install /dev/sda
或者,你也可以使用克隆兹拉。这是一个强大的磁盘操作和克隆工具,我认为它可以解决你的情况,但我没有使用过它。