parted:在 gpt 磁盘上创建交换分区(一行)不起作用

parted:在 gpt 磁盘上创建交换分区(一行)不起作用

我正在尝试根据 Arch Linux 指南使用 parted 在我的脚本中创建交换分区。
https://wiki.archlinux.org/title/Parted#Partition_schemes
不知何故,它总是跳过文件系统类型,而是将其用作分区标签。

手动运行parted会创建正确的文件系统linux-swap(v1)。

root@NAS[~]# parted /dev/sdb
GNU Parted 3.4
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you
want to continue?
Yes/No? y
(parted) mkpart
Partition name?  []?
File system type?  [ext2]? linux-swap
Start? 0%
End? 100%

使用以下命令运行parted会创建一个“空”文件系统,并为其指定分区标签“linux-swap”。

root@NAS[~]# parted /dev/sdb -s mklabel gpt -- mkpart linux-swap 0% 100%

比较

parted (manually) - CORRECT FILESYSTEM
=================
root@NAS[~]# parted /dev/sdb print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 4295MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  4294MB  4293MB  linux-swap(v1)



parted (script command) - WRONG FILESYSTEM
=======================
root@NAS[~]# parted /dev/sdb print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 4295MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name        Flags
 1      1049kB  4294MB  4293MB               linux-swap

我缺少什么?

答案1

您无法在parted命令中创建交换空间。您可以设置分区标签来指示它是交换分区,但实际上并非如此:

dd bs=1M count=100 if=/dev/zero >/tmp/100m.img
  100+0 records in
  100+0 records out
  104857600 bytes (105 MB, 100 MiB) copied, 0.687057 s, 153 MB/s

lo=$(losetup --show --find /tmp/100m.img); echo $lo
  /dev/loop0

parted $lo --script --align optimal unit MiB mklabel gpt mkpart primary linux-swap 1 100% print
  Model: Loopback device (loopback)
  Disk /dev/loop0: 200MiB
  Sector size (logical/physical): 512B/512B
  Partition Table: gpt
  Disk Flags:

  Number  Start    End     Size     File system     Name     Flags
   1      1.00MiB  100MiB  99.0MiB  linux-swap(v1)  primary

现在,如果交换分区已准备好,mkswap则会警告它已覆盖它,但事实并非如此:

mkswap ${lo}p1
  Setting up swapspace version 1, size = 99 MiB (103784448 bytes)
  no label, UUID=1abc5a9d-9c2e-452f-be16-d63f7e8e6af1

只是为了证明覆盖(“擦除旧交换签名”),让我们重复交换空间准备工作:

mkswap ${lo}p1
  mkswap: /dev/loop0p1: warning: wiping old swap signature.
  Setting up swapspace version 1, size = 99 MiB (103784448 bytes)
  no label, UUID=2af1524b-101b-4e30-bdc0-2dfcadc1cde8

最后,拆除环回设备并删除临时映像文件:

losetup -d $lo
rm -f /tmp/100m.img

这里的结论是,parted不(而且实际上不能)准备交换分区以供立即使用。

答案2

parted可以使用命令来mkswap格式化交换空间:

sudo mkswap /dev/sdb

答案3

我猜mkpart linux-swap 0% 100%您错过了之间的分区名称mkpartlinux-swap因此后者用作分区名称而不是文件系统类型。

相关内容