移动 ext4 分区

移动 ext4 分区

我在硬盘驱动器的末端有一个 ext4 分区,想将其调整为完整磁盘大小(磁盘的其余部分是空的)。它不是根分区,只是数据分区,因此卸载分区没有问题。机器正在运行 Ubuntu 服务器,没有连接屏幕、键盘、鼠标或光盘驱动器,因此启动实时环境以使用这种方法会有点麻烦,我想避免这种情况。

有人知道一个简单的方法吗?对我来说,这被证明是一项比我预想的更困难的任务,但让我详细说明一下:

当然,在以下操作中,磁盘分区全部卸载。我首先尝试通过 parted:我删除了不再需要的第一个分区,然后想调整大小或移动 ext4 分区。但 parted 告诉我它无法这样做,因为 ext4 的某些文件系统功能(带有一个奇怪的错误消息:“错误:文件系统启用了不兼容的功能。兼容的功能是 has_journal、dir_index、filetype、sparse_super 和 large_file。使用 tune2fs 或 debugfs 删除功能。” - 那么不兼容的功能是什么?);我从中得到了什么,作为一个回答另一个问题的评论但是,parted 无法改变 ext4 分区的开头。

但是,为什么 gparted 似乎可以解决问题(参见第一个链接问题)而 parted 却不行?

好吧,由于驱动器开头有足够的空间(大于要移动的分区大小),我想尝试另一种方法:在前面创建第二个分区,将内容从后面的分区复制到这个分区,然后删除旧分区并将新分区调整为完整大小。然而,这也被证明是不可能的:创建分区并复制内容(通过dd if=/dev/sdb2 of=/dev/sdb1)后,无法安装分区(“缺少日志超级块”)。

所以目前我没什么主意了。我可能会把所有重要的东西复制到另一个磁盘,再次删除所有分区并创建一个大分区。我想知道这是否是个问题 - 或者我忽略了显而易见的问题?

答案1

这需要花费一些时间,但如果满足以下条件,就可以完成:

假设 /dev/sdb1,并且未分配空间大于数据量来自/dev/sdb1:

在我们开始之前,让我们创建一些挂载点目录/mnt/

mkdir /mnt/old && mkdir /mnt/new

磁盘现在如下所示:

[(.......未分配.........)(xxxx /dev/sdb1 xxxxxx)]
  • e2fsck -f -y -v /dev/sdb1#只是为了确保它没有错误。
  • fdisk /dev/sdb
  • 按:n p 2 wq
  • mkfs.ext4 /dev/sdb2
    现在磁盘如下所示:
[(xxxxxx /dev/sdb2 xxxxxxxxxx)(xxxx /dev/sdb1 xxxxxx)]
  • mount /dev/sdb2 /mnt/new && mount /dev/sdb1 /mnt/old
  • mv /mnt/old/* /mnt/new/(您将收到有关 lost+found 的错误,您可以忽略它)
  • cd / && umount /mnt/old && umount /mnt/new
  • cfdisk /dev/sdb
  • 删除sdb1
  • 选择写入
  • 删除sdb2
  • 选择写入
  • 创建新的,选择整个可用的尺寸。
  • 写完就退出。
  • e2fsck -f /dev/sdb1
  • resize2fs /dev/sdb1 现在磁盘如下所示:
[(xxxxxxxxxxxxxxxxxx /dev/sdb1 xxxxxxxxxxxxxxxxxx)]
  • mount /dev/sdb1 /your/mount/point

完成的!

答案2

这是我在仅具有 SSH 访问的无头机器上执行的操作:使用 VNC 并开始gparted执行此操作。用于openbox最小环境,如果仅一次则完成后将其全部删除。

sudo apt-get 安装 vnc4server openbox gparted
vnc4server #设置密码,创建初始配置
vnc4server-kill:1
sed -i -e 's/x-window-manager/openbox-session/g' ~/.vnc/xstartup
vnc4服务器

打开端口 5901 传入,并使用 VNC 客户端进行访问。右键单击以在 openbox 中启动终端,您将能够运行任何 GTK+ 应用程序,包括gparted。如果您愿意,完成后apt-get remove还可以运行。autoremove

答案3

我朝着 GUI 方向发展:

1)运行 Linux 实时 CD(我这里是 Mint)

2)连接到互联网

3)获取 gparted

sudo apt-get install gparted

4) 在简洁的 gparted GUI 中完成所有调整大小后,运行启动修复。

5)https://help.ubuntu.com/community/Boot-Repair 基本上归结为获取它并催款:

sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update

sudo apt-get install -y boot-repair && boot-repair

6)选择常用选项的修复,如果系统询问您驱动器是否可移动,请选择否(如果不是)。

解决了我的问题。

答案4

首先,备份你的数据,以防止数据丢失。

因为parted不支持 ext4,所以您应该使用resize2fs

cfdisk /dev/sdx
  • 删除分区。是的,删除它!(我知道,这听起来很奇怪,但相信我,数据会保留在那里,只是不要使用 mkfs.ext4
  • 然后以您想要的大小重新创建它。您需要从与原始位置完全相同的位置开始。终点可以移动。如果您错过这一点,您将丢失数据!
resize2fs /dev/sdxY

无需提供任何其他参数resize2fs,文件系统将扩展到分区的大小。


关于不兼容的功能:它是extentsext4 所使用的。

相关内容