我正在为一个非常简单的任务而苦恼。我有一个 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=0
)dd
:
我更喜欢用“就地”进行操作truncate
,因为cat
会将稀疏文件转换为零(尽管这可能是您想要的),这会浪费时间、空间和过多的写入。
以下示例“就地”执行此操作(参见命令中和+
之间的前缀):-s
3G
truncate
如你看到的,您需要调整分区大小(例如fdisk
)以及。因此您需要使用losetup -P
而不是仅通过指定偏移量来附加分区。这是您自链接/引用解决方案以来所错过的仅适用于文件系统映像。
删除原始分区条目后重新创建分区条目时,请确保它从与原始分区相同的 LBA 开始(在示例中为206848
),否则文件系统将丢失。
答案2
从未测试过所述方法,但如果您使用 SD 卡,则以下方法对我有用。
dd
图像不变地写入 SD 卡dd if=my.img of=/dev/mmcblk0 bs=1M
sync
在那之后- 使用
fdisk
选择d
第二2
个分区。然后创建一个n
新分区并接受所有默认设置。然后w
写入分区表。 sync
再次- 使用以下命令检查文件系统
e2fsck -f /dev/mmcblk0p2
- 使用以下方法调整 fs 的大小
resize2fs /dev/mmcblk0p2
sync
再次