扩展Linux分区失败

扩展Linux分区失败

我正在为一个非常简单的任务而苦恼。我有一个 img 文件,其中包含一个具有 2 个分区的文件系统。正如在一些教程中发现的那样,我以这种方式扩展了可用空间:

dd if=/dev/zero of=./temp_image bs=1 count=1 seek=3G
cat temp_image >> orig_image.img
losetup --offset [offset of the second partition*512] /dev/loop0 orig_image.img
e2fsck -f /dev/loop0
resize2fs -f /dev/loop0
losetup -d /dev/loop0

但我担心分区表的大小调整不正确:

parted orig_image.img > print
Model:  (file)
Disk /home/user/orig_image.img: 7255MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  67,1MB  62,9MB  primary  fat16        lba
 2      67,1MB  4000MB  3933MB  primary  ext4

但是如果我 chroot 进入系统,它实际上会找到新的空间...我是否错过了一些步骤?

我尝试使用 gparted 调整分区大小但失败并抱怨 e2fsck 期间出现错误。

答案1

我建议truncate不要使用dd创建 3GiB 稀疏文件 + 1 字节零的古怪命令,truncate而要使用稀疏文件。这样-s 3G您就可以获得精确的 3GiB 稀疏文件图像,其中没有零(或者您也可以使用count=0dd

在此处输入图片描述

我更喜欢用“就地”进行操作truncate,因为cat会将稀疏文件转换为零(尽管这可能是您想要的),这会浪费时间、空间和过多的写入。

以下示例“就地”执行此操作(参见命令中和+之间的前缀):-s3Gtruncate

在此处输入图片描述

如你看到的,您需要调整分区大小(例如fdisk以及。因此您需要使用losetup -P而不是仅通过指定偏移量来附加分区。这是您自链接/引用解决方案以来所错过的仅适用于文件系统映像

删除原始分区条目后重新创建分区条目时,请确保它从与原始分区相同的 LBA 开始(在示例中为206848),否则文件系统将丢失。

答案2

从未测试过所述方法,但如果您使用 SD 卡,则以下方法对我有用。

  1. dd图像不变地写入 SD 卡dd if=my.img of=/dev/mmcblk0 bs=1M

  2. sync在那之后

  3. 使用fdisk选择d第二2个分区。然后创建一个n新分区并接受所有默认设置。然后w写入分区表。
  4. sync再次
  5. 使用以下命令检查文件系统e2fsck -f /dev/mmcblk0p2
  6. 使用以下方法调整 fs 的大小resize2fs /dev/mmcblk0p2
  7. sync再次

相关内容