我在硬盘驱动器的末尾有一个 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
)后,无法挂载分区(“缺少日志超级块”)。
所以目前我已经没有想法了。我可能会将所有重要的内容复制到另一个磁盘,再次删除所有分区并创建一个大分区。我想知道这是一个这样的问题 - 还是我忽略了显而易见的问题?
这有点耗时,但如果满足以下条件就可以完成:
假设 /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
完成的!