移动ext4分区

cod*_*ing 6 partitioning ext4

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

有谁知道一个简单的方法来做到这一点?对我来说,这被证明是一项比我预期的要困难得多的任务,但让我详细说明一下:

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

但是,为什么 gparted 似乎可以解决问题(请参阅第一个链接问题)但没有分开?

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

所以目前我已经没有想法了。我可能会将所有重要的内容复制到另一个磁盘,再次删除所有分区并创建一个大分区。我想知道这是一个这样的问题 - 还是我忽略了显而易见的问题?

Fra*_*que 3

这有点耗时,但如果满足以下条件就可以完成:

假设 /dev/sdb1,且未分配空间大于/dev/sdb1 中的数据量:

在开始之前,让我们在以下位置创建一些安装点目录/mnt/

mkdir /mnt/旧 && mkdir /mnt/新

磁盘现在看起来像这样:

[(....未分配.........)(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 现在磁盘看起来像这样:
[(xxxxxxxxxxxxxxxxxxxxx /dev/sdb1 xxxxxxxxxxxxxxxxxx)]
  • mount /dev/sdb1 /your/mount/point

完成的!