我创建了我的虚拟磁盘(1024MB):
~$ dd if=/dev/zero of=MyDrive.img iflag=fullblock bs=1M count=1024 && sync
情况1:
现在我将使用内部分区配置它以分区/格式化 MyDrive.img :
~$ parted MyDrive.img
(parted) mklabel msdos
(parted) mkpart primary NTFS 1 1024
(parted) align-check optimal 1
结果:
(parted) print
Model: (file)
Disk /home/user/test/MyDrive.img: 1074MB
Sector size (logical / physical): 512B / 512B
Table of partitions: msdos
Disk Flags:
Start Number End Size Type File system Flags
1 1049kB 1024MB 1023MB primary ntfs lba
~$ sudo losetup loop1 MyDrive.img
~$ sudo -H gparted /dev/loop1
到目前为止,一切都很好。现在问题...
案例二:
如果我想使用相同的命令从命令行启动“parted”(在终端中;在 parted 之外),我不会得到相同的结果:
~$ parted -s MyDrive.img mklabel msdos
~$ parted -s MyDrive.img mkpart primary NTFS 1 1024
~$ parted -s MyDrive.img align-check optimal 1
~$ parted -s MyDrive.img set 1 lba on
出去:
~$ parted -s MyDrive.img print
Model: (file)
Disk /home/user/test/MyDrive.img: 1074MB
Sector size (logical / physical): 512B / 512B
Table of partitions: msdos
Disk Flags:
Start Number End Size Type File system Flags
1 1049kB 1024MB 1023MB primary
问题:缺少 NTFS 和 LBA(ext3、ext4 等也会发生同样的情况)
原因:
~$ parted -s MyDrive.img mklabel msdos # Works
~$ parted -s MyDrive.img mkpart primary NTFS 1 1024 # Not Work
~$ parted -s MyDrive.img align-check optimal 1 # Works
~$ parted -s MyDrive.img set 1 lba on # Not Work
问题:
如何直接从终端(案例2)的命令行使用选项“-s”(--script)正确执行“parted”以获得相同的输出(案例1)?
谢谢
parted
默认使用奇数单位,所以最好指定它。或者
如果您知道您的分区从 开始,则无需进行对齐检查
1MiB
。该
set 1 lba on
命令实际上将分区类型更改为 Linux。这可能有点令人惊讶,但parted
'sset
更改分区类型是正常的(其他选项是raid
,lvm
, ...)。除了那个细节,你的操作结果是完全一样的。输出的差异仅仅是一个光学问题。
它可能是(*) 如果你想parted
用于创建文件系统本身的旧的残余,而不仅仅是分区。ntfs
坚持,你实际上必须坚持mkntfs
。您的互动方式:
我此时创建了它的副本,以便我们可以检查和比较另一种方法:
向前:
显示
ntfs
但lba
再次打印它就消失了:您使用终端命令的第二种方法,在副本上执行:
实际上有什么不同吗?
(如果没有复制方法,它们将具有不同的磁盘标识符,因为它每次都是随机的
mkpart
。对于 GPT 分区,每个单独的分区也将具有唯一的 PARTUUID,因此该方法不适用于其他分区方案,或者您必须检查什么不同的字节代表。)所以,你确实得到了相同的结果,除非命令不同(
set
在你的第一个例子中没有)。(*)
为了使混淆完美,在
mkntfs
分区后,parted
检测到 NTFS 存在并且set 1 lba on
不再将 Linux 设置为分区类型。这也意味着磁盘上的随机数据可能会在分区表中得到随机结果。mkpart
因此,毕竟在您指定 NTFS 时可能有一点意义。parted
记住当前会话的这种类型,并在选择分区类型时采取相应的行动。翻译到终端,最好在一个命令中完成所有操作。