如何在不清除交换文件的情况下对 /swapfile 进行零填充?

0xC*_*22L 9 ubuntu swap

我有一个脚本,我运行该脚本以在备份虚拟来宾之前优化磁盘空间(使用哪个管理程序实际上并不重要)。

现代 Ubuntu 版本(例如 18.04)似乎默认使用/swapfile分区而不是分区。那也没关系。

但是,我想将交换文件与包含它的根分区一起归零。

对于交换分区,这相对轻松,因为总有一种方法可以$UUID从交换分区中提取现有的内容,并且 - 在对分区进行零填充之后 - 运行mkswap -U $UUID以重新创建所述交换分区。

但是,/swapfile我不知道该怎么做。虽然我意识到你不能通过/swapfileUUID 在 中挂载/etc/fstab,但我仍然想保留 UUID。

因此,我认为需要以下操作之一才能继续:

  1. 我需要一种方法可以对交换文件进行零填充,而无需擦除那些使其成为交换分区的结构(即避免必须运行mkswap -U $UUID
  2. 我需要一种方法来从交换检索现有的UUID文件(而不是一个分区,我可以使用任何来自blkid于看/dev/disk/by-uuid/$UUID...)

Ste*_*itt 15

  1. 这不会像重新创建交换文件那样彻底清除交换文件,但是如果您在跳过第一个 4KiB(严格来说,第一页,这取决于您的架构)之后清除它,您将不会触及任何结构标识交换文件。

  2. blkid 在交换文件上也能正常工作:

    $ mkswap swap
    Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
    no label, UUID=7916b81f-1faa-4b7d-84ef-b0bf2f75dbbc
    
    $ blkid swap
    swap: UUID="7916b81f-1faa-4b7d-84ef-b0bf2f75dbbc" TYPE="swap"
    
    Run Code Online (Sandbox Code Playgroud)

内核中定义了头格式:旧格式在第一页的末尾有一个魔法值,新格式将它与一个 1KiB 的空闲区域结合起来,然后是一些字段(版本、大小、坏页、UUID、标签),它们都适合放在第一页内。

  • 是的,读取 UUID 并重新创建交换文件可能是更简单的选择。 (3认同)