更新

更新

假设 sd_card.img 为 512000000 字节(即 488MB):

$file sd_card.img

sd_card.img:DOS/MBR引导扇区;分区 1:ID=0xc,起始 CHS (0x0,1,1),结束 CHS (0xdf,15,54),起始扇区 63,999873 扇区,扩展分区表(最后)

fdisk显示:

Selected partition 1
         Device: sd_card.img1
          Start: 63
            End: 999935
        Sectors: 999873
      Cylinders: 1158
           Size: 488.2M
             Id: c
           Type: W95 FAT32 (LBA)
    Start-C/H/S: 0/1/1
      End-C/H/S: 223/15/54

我尝试使用以下命令调整它的大小。

$cp sd_card.img test.img

$dd if=/dev/zero of=test_zeros bs=1 count=1 seek=2G

$cat test_zeros >> test.img

$sudo parted test.img resizepart 1 2.5GB

$file test.img

test.img:DOS/MBR引导扇区;分区 1:ID=0xc,起始 CHS (0x0,1,1),结束 CHS (0x12f,239,61),起始扇区 63,4882750 个扇区

fdisk显示:

Selected partition 1
         Device: test.img1
          Start: 63
            End: 4882812
        Sectors: 4882750
      Cylinders: 334
           Size: 2.3G
             Id: c
           Type: W95 FAT32 (LBA)
    Start-C/H/S: 0/1/1
      End-C/H/S: 303/239/61

然后我将图像写入32GB SD卡:

dd if=test.img of=/dev/mmcblk0 conv=fsync status=progress

当SD卡安装后...

# lsblk

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk0     179:0    0 29.7G  0 disk
`-mmcblk0p1 179:1    0  2.3G  0 part /run/media/mmcblk0p1

这看起来很有希望,但实际df -h情况却并非如此。这是将原始 sd_card.img 写入 SD 卡和修改后显示的内容:

Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1  485M  159M  326M  33% /run/media/mmcblk0p1

由于lsblk显示块设备大小并df显示文件系统大小,因此表明分区出现问题。

不幸的是,更简单的方法不适用于 FAT32 分区,我仅限于此。安装必要的库后,我尝试了sudo gparted sd_card.img但没有成功,各种操作反而显示sd_卡.img1并指出该文件不存在。

关于我的程序中可能存在的问题或如何正确执行此操作有什么建议吗?

注:GNU Parted 3.4

更新

按照@eyoung100的建议,我将原来的sd_card.img写入SD卡,然后使用parted随GParted一起安装的命令行工具,试图扩大可用空间。

sudo parted

select /dev/mmcblk0

print free

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  512MB   512MB   primary  fat32        lba
        512MB   31.9GB  31.4GB           Free Space

resizepart 1 100%

print free

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  31.9GB  31.9GB  primary  fat32        lba

quit

因为 GParted 在被告知应用更改之前不会执行任何操作,所以我想知道是否要在不保存任何内容的情况下退出,但是当我从 SD 卡启动时,会显示更改,所以我认为这parted更像是您真正需要的“脱手”版本知道你在做什么。

# df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1  485M  172M  313M  36% /run/media/mmcblk0p1

# lsblk

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk0     179:0    0 29.7G  0 disk
`-mmcblk0p1 179:1    0 29.7G  0 part /run/media/mmcblk0p1

正如前面提到的,我所做的更改parted已实现,但在可用空间或 的输出中找不到它们df -h。 FAT32 分区的实际大小仍然约为 488MB。

# fdisk -x /dev/mmcblk0

Disk /dev/mmcblk0: 29.72 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe847ab93

Device         Boot Start      End  Sectors Id Type            Start-C/H/S   End-C/H/S Attrs
/dev/mmcblk0p1         63 62333951 62333889  c W95 FAT32 (LBA)       0/1/1 1023/254/63

当此 sd_card.img 插入另一个设备以启动时,它会被该设备安装。我还不知道怎么做,但我看到了这个>

# cat /run/systemd/transient/run-media-mmcblk0p1.mount

# This is a transient unit file, created programmatically via the systemd API. Do not edit.
[Unit]
After=dev-mmcblk0p1.device
BindsTo=dev-mmcblk0p1.device

[Mount]
What=/dev/mmcblk0p1
Options=umask=007,gid=6

[Unit]
[email protected]
[email protected]

答案1

为了让我们双方都不再困惑,我现在写下这篇文章作为答案。

困惑

完成后,您可能仍然安装了原始图像,或者未正确调整原始图像的大小。

全新开始

  1. 卸载所有 SD 卡。
  2. 按照这个命令行教程,或使用这个工具/蚀刻机从该教程链接,将 500 MB 的小图像文件写入更大的 32GB SD 卡或其他设备。

笔记:尽管上面的教程是针对基于 Pi 的操作系统编写的,但这些说明适用于所有 SD 卡。另请注意,我没有重写其中包含的命令,因此可以最大程度地减少混乱。

  1. 您现在应该已将提取的 488MB 映像文件写入 32GB 卡,剩下大约 31.5 GB

如果我理解正确的话,您(OP)想要扩展分区,以便它填满整个 32 GB

扩展分区

  1. 我们不再需要担心创建第二个图像,因为我们在上面的步骤 2 中将原始小图像写入了更大的 SD 卡。
  2. 启动 GParted。
  3. 取出并重新插入 32GB SD 卡,以便 GParted 重新扫描设备节点并刷新。
  4. 您应该会看到 SD 卡上有一个 500GB 的小分区,其周围是栏左侧的青色框,右侧是一大堆灰色,上面写着Free Space
  5. 将青色框末端的箭头一直拖到可用空间的末端(尽可能向右)。
  6. 按工具栏中的复选标记以应用/保存更改。

让我知道这是否是您想要实现的目标。如果没有,您需要在问题中提供更多的清晰度或细节。

相关内容