假设 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
为了让我们双方都不再困惑,我现在写下这篇文章作为答案。
困惑
完成后,您可能仍然安装了原始图像,或者未正确调整原始图像的大小。
全新开始
笔记:尽管上面的教程是针对基于 Pi 的操作系统编写的,但这些说明适用于所有 SD 卡。另请注意,我没有重写其中包含的命令,因此可以最大程度地减少混乱。
- 您现在应该已将提取的 488MB 映像文件写入 32GB 卡,剩下大约 31.5 GB
如果我理解正确的话,您(OP)想要扩展分区,以便它填满整个 32 GB
扩展分区
- 我们不再需要担心创建第二个图像,因为我们在上面的步骤 2 中将原始小图像写入了更大的 SD 卡。
- 启动 GParted。
- 取出并重新插入 32GB SD 卡,以便 GParted 重新扫描设备节点并刷新。
- 您应该会看到 SD 卡上有一个 500GB 的小分区,其周围是栏左侧的青色框,右侧是一大堆灰色,上面写着
Free Space
。 - 将青色框末端的箭头一直拖到可用空间的末端(尽可能向右)。
- 按工具栏中的复选标记以应用/保存更改。
让我知道这是否是您想要实现的目标。如果没有,您需要在问题中提供更多的清晰度或细节。