Linux

parted:在 gpt 磁碟(一個襯裡)上創建交換分區不起作用

  • November 25, 2021

我正在嘗試根據 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

我錯過了什麼?

您不能在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

最後,拆掉loopback設備,刪除臨時鏡像文件:

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

這裡的結論是parted沒有(並且確實不能)準備交換分區以供立即使用。

引用自:https://unix.stackexchange.com/questions/679040