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

Pil*_*ot6 11 btrfs swap

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

在 5.0 Linux 内核之前,不可能在btrfs分区上放置交换文件,btrfs文件系统可能会损坏。

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

Pil*_*ot6 15

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

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

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

  1. 安装/dev/sda1/mnt.

     sudo mount /dev/sda1 /mnt
    
    Run Code Online (Sandbox Code Playgroud)

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

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

     sudo btrfs sub create /mnt/@swap
    
    Run Code Online (Sandbox Code Playgroud)
  2. 卸载/dev/sda1距离/mnt

     sudo umount /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建/swap我们计划挂载@swap子卷的目录。

     sudo mkdir /swap
    
    Run Code Online (Sandbox Code Playgroud)
  4. @swap子卷挂载到/swap.

     sudo mount -o subvol=@swap /dev/sda1 /swap
    
    Run Code Online (Sandbox Code Playgroud)
  5. 创建交换文件。

     sudo touch /swap/swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  6. 为文件设置 600 权限。

     sudo chmod 600 /swap/swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  7. 为此文件禁用 COW。

     sudo chattr +C /swap/swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  8. 以交换文件大小为4G为例。

     sudo fallocate /swap/swapfile -l4g
    
    Run Code Online (Sandbox Code Playgroud)
  9. 格式化交换文件

    sudo mkswap /swap/swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  10. 打开交换文件。

    sudo swapon /swap/swapfile
    
    Run Code Online (Sandbox Code Playgroud)

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

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

UUID=XXXXXXXXXXXXXXX /swap btrfs subvol=@swap 0 0
/swap/swapfile none swap sw 0 0
Run Code Online (Sandbox Code Playgroud)

UUID是您的/dev/sda1.

欢迎提出意见和建议。