![如何在脚本中使用 parted 并获取空白的 PARTLABEL?](https://linux22.com/image/1064769/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%20parted%20%E5%B9%B6%E8%8E%B7%E5%8F%96%E7%A9%BA%E7%99%BD%E7%9A%84%20PARTLABEL%EF%BC%9F.png)
我正在尝试创建软件来恢复我已经使用脚本创建的备份。幸运的是,我不需要恢复任何备份,但现在我想将其中一个备份的内容移动到 SSD 驱动器,结果发现这比我想象的要难。
现在我正在尝试重新创建分区表。我想使用 parted,因为它似乎是脚本中最容易使用的工具。我发现有两件事让我感到困惑。
首先,像这样的命令
parted /dev/sdh mklabel gpt mkpart primary fat32 2048 4096 print
生成一个 gpt 分区表和一个分区,但它显示名称为“primary”,这就是 blkid 所称的“PARTLABEL”。阅读信息和手册页似乎表明它应该是文件系统类型,而不是名称。经过实验,似乎不再接受任何 fs 类型,而是名称。
第二个问题是:我根本不想在分区上有名字,但是我尝试过,""
但" "
没有成功。
那么:如何创建没有 PARTLABEL 的分区?我当然可以在 gparted 中执行此操作,但我无法编写脚本。
答案1
我找到了方法,但结果很奇怪。如果我想让 parted 接受一个空字符串(至少出于这个目的),我必须引用它三次。没错,三次。
它看起来像这样:
parted -s $destination mkpart "'\ '" ntfs 1874585600s 1876559871s
因此,在双引号内使用单引号内的反斜杠空格。这样可行,而且我找不到更简单的方法。例如,如果我将其省略,parted 仍会接受该命令,但会使用“ntfs”作为文件系统类型和分区名称。
呼呼呼。
答案2
我尝试了各种方法来获得一个实际的空白名称(也这),但没有一种方法适用于非交互式脚本。但是使用管道自动“输入”命令是可行的:
printf "\nfat32\n1048576B\n537919487B\n" | parted /dev/sda mkpart
Output:
Partition name? []?
File system type? [ext2]? fat32
Start? 1048576B
End? 537919487B
Information: You may need to update /etc/fstab.
由于某种原因,文件系统是空白的:
parted /dev/sda u b p
Number Start End Size File system Name Flags
1 1048576B 537919487B 536870912B msftdata
必须用这个作为最后一步来格式化它:
mkfs -t fat -F 32 /dev/sda1