我可以在 btrfs 上拥有交换文件吗?

我可以在 btrfs 上拥有交换文件吗?

现代 Ubuntu 版本默认使用交换文件而不是交换分区。

在 Linux 内核 5.0 之前,无法将交换文件放置在分区上btrfs,否则btrfs文件系统可能会被损坏。

现在内核支持 btrfs 分区上的交换文件。我可以在安装的 Ubuntu 上使用交换文件吗btrfs?可能存在哪些问题?

答案1

可以使用交换文件btrfs,但需要注意一些事项。

btrfs如果子卷上有可用的交换文件,则文件系统不允许创建快照。这意味着强烈建议将交换文件放在单独的子卷上。

我们假设当前交换已关闭,已/打开/dev/sda1且 Ubuntu 安装/@子卷上且/home@home子卷上。

  1. 安装/dev/sda1/mnt

    sudo mount /dev/sda1 /mnt
    

    如果您运行ls /mnt,您将看到@@home以及可能存在的其他子卷。

  2. 创建一个新的@swap子卷。

    sudo btrfs sub create /mnt/@swap
    
  3. /dev/sda1从卸载/mnt

    sudo umount /mnt
    
  4. 创建/swap我们计划挂载@swap子卷的目录。

    sudo mkdir /swap
    
  5. @swap子卷挂载到/swap

    sudo mount -o subvol=@swap /dev/sda1 /swap
    
  6. 创建交换文件。

    sudo touch /swap/swapfile
    
  7. 为文件设置 600 权限。

    sudo chmod 600 /swap/swapfile
    
  8. 对此文件禁用 COW。

    sudo chattr +C /swap/swapfile
    
  9. 以设置交换文件大小为4G为例。

    sudo dd if=/dev/zero of=/swap/swapfile bs=1M count=4096
    
  10. 格式化交换文件。

    sudo mkswap /swap/swapfile
    
  11. 打开交换文件。

    sudo swapon /swap/swapfile
    

现在新的交换应该可以正常工作了。

您还需要更新/etc/fstab以在启动时安装所有这些。添加两行:

UUID=XXXXXXXXXXXXXXX /swap btrfs subvol=@swap 0 0
/swap/swapfile none swap sw 0 0

UUID是你的一个/dev/sda1

交换文件不能位于任何类型的 btrfs raid 上。

欢迎提出意见和建议。

答案2

请注意,对于具有 NVME SSD 的现代系统/笔记本电脑,您/dev/nvme0n1p2应该/dev/sda1忽略 /dev/nvme0n1p1,因为这是您的操作系统在安装时创建的 efi 启动盘。

此外,建议添加两个挂载选项“defaults”和“noatime”。默认值将自动加载驱动器(SSD、HDD)的挂载选项。如果仅打开以下文件,Noatime 将阻止写入文件:

UUID=XXXXXXXXXXXXXXX /swap btrfs defaults,noatime,subvol=@swap 0 0
/swap/swapfile none swap sw 0 0

答案3

流行的答案是正确的,但你应该不是使用 fallocate(1) 为交换文件分配空间。它可以创建与交换文件使用不兼容的文件系统“漏洞”(交换需要 100% 连续的空间,因为文件系统不在交换空间内使用)。您应该改用“dd if=/dev/zero ...”。请参阅此线程中的答案: fallocate 与 dd 用于交换文件吗? mkswap(8) 和 swapon(8) 手册页都明确不鼓励使用 fallocate(1) 在文件系统上实例化交换文件。

答案4

你可以在 btrfs 上进行交换,如果你留意 btrfs doku 对此的说明:

filesystem - must be only single device
filesystem - must have only single data profile
swapfile - the containing subvolume cannot be snapshotted
swapfile - must be preallocated (i.e. no holes)
swapfile - must be NODATACOW (i.e. also NODATASUM, no compression)

更多信息请参见来源:

相关内容