我正在尝试在我的 SD 卡上手动创建一个发行版,从创建分区开始,但失败了......
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 119.4G 0 disk
vda 254:0 0 12G 0 disk
├─vda1 254:1 0 300M 0 part /boot
└─vda2 254:2 0 11.7G 0 part /
$ sudo dd if=/dev/zero of=/dev/sda bs=1M count=32
32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.0289816 s, 1.2 GB/s
$ sudo parted -s /dev/sda mklabel gpt
$ sudo parted -s /dev/sda mkpart fat32 32MB 512MB
Error: The location 512MB is outside of the device /dev/sda.
造成这种情况的潜在原因是什么?
$ sudo parted /dev/sda unit mib print free
Model: (file)
Disk /dev/sda: 32.0MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
0.02MiB 32.0MiB 32.0MiB Free Space
无论出于什么原因,现在输入时都会出现 sda1 分区lsblk
。我认为这是在创建标签时发生的。
$ lsblk
...
sda 8:0 1 119.4G 0 disk
└─sda1 8:1 1 119.4G 0 part
...
[编辑]
也许我应该提到我是在虚拟机中执行所有这些操作的。无论出于什么原因,只要我添加标签,虚拟机中的 fdisk 就会找到一个幽灵分区。它应该被删除,但它就在那里。
我可以通过禁用虚拟机中的 SD 卡来删除分区,重新插入它并在主机上启动 gdisk。
不幸的是,问题仍然存在,现在没有幽灵分区。
让我们逐步了解你向我们展示的内容
/dev/sda
第一个输出显示您的设备大约有 120 GiB然后清除设备的前 32 MiB,为新分区表做好准备
这里实际发生的情况是,在此步骤之前的某个时间点,设备节点
/dev/sda
已被删除或尚不存在。因此,您dd
创建了一个长度正好为 32 MiB 的文件。从这里开始,您使用的是文件而不是设备。您可以通过查看输出ls -l /dev/sda
并看到它是一个文件而不是块设备来证明这一点。然后,您准备
/dev/sda
一个 GPT 分区表。(但请注意,这是您的 32 MiB 文件,而不是 120 GiB 设备。)接下来,您尝试创建一个从 32 MB(不是 32 MiB,因此您只有少量空间可供命令尝试运行)开始到 512 MB 结束的分区,其大小为 480 MB。但是,“磁盘”不够大,无法容纳 480 MB 的分区,因此该命令会创建一个尽可能大的分区 - 大约 88 MB - 从指定的起点运行到磁盘末尾
现在你请求可用空间,由于剩下的只是 0 到 32 MB 的段,所以它显示的内容就是这些
当您返回此命令时,请注意您的单位 - 您可能希望
parted
使用 2 n单位(MiB、GiB 等)而不是 10 n单位(MB、GB 等),以便它与 的默认输出相对应lsblk
。您可以使用子命令执行此操作unit
。例如,