如何对 /swapfile 进行零填充而不清除其成为交换文件的原因?

如何对 /swapfile 进行零填充而不清除其成为交换文件的原因?

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

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

但是,我想对交换文件以及包含它的根分区进行零填充。

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

但是,/swapfile我不知道该怎么做。虽然我意识到您无法/swapfile通过 UUID安装/etc/fstab,但我仍然想保留 UUID。

所以我认为需要以下之一才能继续:

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

答案1

  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"
    

标头格式为内核中定义的:旧格式在第一页末尾有一个神奇的值,新格式将其与 1KiB 可用区域结合起来,然后是许多字段(版本、大小、坏页、UUID、标签),这些字段都可以轻松地容纳在第一页。

相关内容