分开的命令行没有得到相同的结果

分开的命令行没有得到相同的结果

我创建了虚拟磁盘(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。这可能会让人感到有点惊讶,但partedsset更改分区类型是正常的(其他选项有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

显示ntfslba再次打印它就消失了:

# 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 可能是有意义的mkpartparted记得这个类型对于当前会话并在选择分区类型时采取相应的行动。翻译到终端后,最好用一个命令来完成这一切。

# 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

相关内容