如何使用 mkdosfs 更改磁盘大小

Nat*_*ntu 2 command-line partitioning fat32 sd-card execute-command

所以我最近在 eBay 上以相当便宜的价格收到了一张 256GB 的 SD 卡,但事实证明印在背面塑料上的工厂部件号被列为 8GB 卡。

它是由卖家修改的,看起来是 256GB,而不是它的实际大小。

我发现 Linux 中有一个名为“mkdosfs”的软件(它也有一个Windows编译版本,这是我正在使用的版本,但本质上是相同的)。

我将默认脚本应用于 SD 卡,但这实际上将读取的大小减少到 4GB。

从 Windows 显示的磁盘大小

我进一步调查发现实际上在运行时出现了一个错误,在关闭前出现了半秒钟,我设法抓住了这个错误的屏幕截图: 尝试运行 mkdosfs 时出现的半秒错误

这是我用来在 Windows 上运行 mkdosfs 的脚本(其中 H: 是 SD 卡的驱动器号)

mkdosfs -n "8GB" -v H: 8386900
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何更改脚本以输出 8GB 磁盘作为结果(我很确定这与最后一个数字有关)

谢谢,非常感谢您的帮助。

Dav*_*ter 5

如果您购买了标有 256 GB 容量但只能容量 8 GB 的驱动器,您应该退回它并从卖家那里获得退款,因为他们没有出售承诺的产品。如果卖家和/或制造商愿意根据驱动器的大小欺骗您,谁知道驱动器还有哪些其他缺陷或潜在故障。即使在前 8 GB 中,我也不会相信它。


对于技术解决方案,与其摸索文件系统工具,您应该重新分区驱动器,使其分区仅覆盖前 8 GB(或任何可用的大小),然后格式化生成的分区) 使用您喜欢的任何文件系统。默认情况下,相应的文件系统工具将创建跨越整个目标分区的文件系统。

您可以使用您喜欢的分区管理器(例如 Gnome Disks、KDE ​​分区管理器、GParted)对驱动器进行重新分区。我将在下面为您提供两个基于命令行的示例,因为它们易于重现。让我们假设有问题的驱动器具有内核名称/dev/sdz

使用 fdisk

  1. 启动fdisk并将其指向驱动器:

    sudo fdisk /dev/sdz
    
    Run Code Online (Sandbox Code Playgroud)
  2. 用一个新的(菜单选项o)替换分区表。

  3. 创建一个新分区(n),

    1. 使其成为主分区 ( p),
    2. 将其设为第一个分区 ( 1),
    3. 在建议的 1 MiB 偏移处选择第一个扇区(2048或没有条目),
    4. 选择所需的大小 8 GiB (= 8192 MiB) 减去上面的 1 MiB ( +8191M),
  4. (可选)打印生成的分区表以验证您是否按预期执行 ( p),

  5. (可选)将分区类型设置为“W95 FAT32 (LBA)” 1 ( t, then c)

  6. 将新分区表写入设备 ( w),

  7. 要求 Linux 内核重新读取分区表:

    sudo partprobe /dev/sdz
    
    Run Code Online (Sandbox Code Playgroud)

使用 sfdisk

如果您不想浏览一堆菜单,您还可以使用sfdisk指定分区表(设置size_gb为所需的 GiB 大小):

size_gb=8

sudo sfdisk /dev/sdz <<EOF
unit: sectors
: start=2048, size=$((($size_gb << 21) - (1 << 11))), Id=c
EOF
Run Code Online (Sandbox Code Playgroud)

就像fdisk你需要让内核重新读取分区表一样:

sudo partprobe /dev/sdz
Run Code Online (Sandbox Code Playgroud)

1创建的新分区的默认分区类型fdisk是“Linux”,但两种类型都可以。所有主要操作系统(Linux、Windows 和 OS X)都将使用任一分区类型正确识别分区内容。第三方工具在某些极端情况下会出于任何原因选择期望特定的分区类型。

  • 创建适当大小的分区可能是最简单的*技术*解决方案;然而,我想强调这个答案的最后一段——如果问题中的描述是准确的,NaturalistUbuntu 是欺诈的受害者,eBay 可能会支持对卖家的索赔。即使您认为价格是广告尺寸的 1/32 的卡的价格是合理的,我也会对信任以这种方式被耍弄的卡持谨慎态度,因此我建议您获得退款。 (2认同)