我创建了虚拟磁盘(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
到目前为止,一切都很好。现在问题...
案例 2:
如果我想从命令行(在终端中;在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)?
谢谢
答案1
parted
默认情况下使用奇数单位,因此最好指定它。
(parted) unit MiB
或者
(parted) mkpart ... 1MiB 1024MiB
如果您知道分区从 开始,则无需进行对齐检查1MiB
。
该set 1 lba on
命令实际上将分区类型更改为Linux。这可能会让人感到有点惊讶,但parted
sset
更改分区类型是正常的(其他选项有raid
, lvm
, ...)。
除了这个细节之外,您的操作结果完全相同。输出的差异仅仅是一个光学问题。
它可能是旧的残余 (*) 如果你想让它parted
,用于创建文件系统本身,而不仅仅是分区。ntfs
粘在一起,你实际上必须mkntfs
这样做。
您的互动方式:
# dd if=/dev/zero of=MyDrive.img iflag=fullblock bs=1M count=1024 && sync
# parted MyDrive.img
GNU Parted 3.2
Using /dev/shm/MyDrive.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel msdos
我此时创建了它的副本,以便我们可以检查和比较其他方法:
(parted) ^Z
[1]+ Stopped parted MyDrive.img
# cp MyDrive.img MyDrive-Copy.img
# fg
向前:
(parted) mkpart primary NTFS 1 1024
(parted) align-check optimal 1
1 aligned
(parted) print
Model: (file)
Disk /dev/shm/MyDrive.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary ntfs lba
显示ntfs
但lba
再次打印它就消失了:
# parted MyDrive.img
GNU Parted 3.2
Using /dev/shm/MyDrive.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: (file)
Disk /dev/shm/MyDrive.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary
使用终端命令的第二种方法,在副本上执行:
# parted MyDrive-Copy.img mkpart primary NTFS 1 1024
# parted MyDrive-Copy.img align-check optimal 1
1 aligned
# parted MyDrive-Copy.img print
Model: (file)
Disk /dev/shm/MyDrive-Copy.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary
实际上有什么区别吗?
# cmp -l MyDrive.img MyDrive-Copy.img && echo Identical || echo Different
Identical
(如果没有复制方法,它们将具有不同的磁盘标识符,因为每次您使用它时它都是随机的mkpart
。使用 GPT 分区,每个单独的分区也将具有唯一的 PARTUUID,因此该方法不适用于其他分区方案,或者更确切地说,您必须检查什么不同的字节代表。)
那么你做set
毕竟得到相同的结果,除非命令不同(第一个示例中没有)。
(*)
为了使混乱更加完美,mkntfs
在分区后,parted
检测到 NTFS 存在,并且set 1 lba on
不再将 Linux 设置为分区类型。这也意味着对于磁盘上的随机数据,您可能会在分区表中获得随机结果。
因此,最终指定 NTFS 可能是有意义的mkpart
。parted
记得这个类型对于当前会话并在选择分区类型时采取相应的行动。翻译到终端后,最好用一个命令来完成这一切。
# parted MyDrive.img \
mklabel msdos \
mkpart primary NTFS 1 1024 \
set 1 lba on \
align-check optimal 1 \
print
Model: (file)
Disk /dev/shm/MyDrive.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary ntfs lba