扩展linux分区失败


0

我对一个非常简单的任务感到困惑。我有一个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期间无法抱怨错误。


在/ dev / loop0上运行e2ksck失败,超级块幻数中出错
Mark

FWIW,最好不要使用 parted因为它默认使用SI单位而不是二进制单位,这可能会引起混淆。使用 fdisk -l 代替。
Tom Yan

此外,您需要在调整文件系统大小之前调整分区(分区表上的条目)的大小 resize2fs
Tom Yan

FIY这是我找到dd命令的链接(第二个答案): raspberrypi.stackexchange.com/questions/4943/...
Mark

没关系。我错了。该命令确实创建了一个具有3GiB稀疏文件+ 1字节零的图像。 truncate -s 3G image_for_append 尽管如此,仍然更好
Tom Yan

Answers:


0

我建议 truncate 而不是古怪 dd 创建3GiB稀疏文件+ 1字节零的命令。 truncate 也使用稀疏文件。同 -s 3G 你得到一个没有零的精确3GiB稀疏文件的图像(或者你可以使用 count=0 对于 dd 太):

enter image description here

我更喜欢用“就地”做到 truncate从那以后 cat 将稀疏文件转换为零(虽然这可能是你想要的),这会花费时间,空间和过多的写入。

以下示例“就地”执行此操作(请参阅 + 之间的前缀 -s3G 在里面 truncate 命令):

enter image description here

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

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


我在你的帮助下成功完成了我的需求。谢谢。
Mark

0

从未测试过所描述的方式,但如果您使用SD卡进行处理,以下内容适用于我。

  1. dd 图像与sdcard保持不变 dd if=my.img of=/dev/mmcblk0 bs=1M

  2. sync 之后

  3. 使用 fdiskd 精英 2 nd分区。然后创建一个 n ew分区并接受所有默认值。然后 w rite分区表。
  4. sync 再次
  5. 检查文件系统 e2fsck -f /dev/mmcblk0p2
  6. 调整fs的大小 resize2fs /dev/mmcblk0p2
  7. sync 再次

谢谢,但我需要在刻录SD卡之前管理分区。我需要用img文件做所有的事情。详细地说,我想扩展第二个分区(ext4),然后再创建另一个ext4分区。
Mark
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.