我的 BTRFS 子卷在哪里?

我的 BTRFS 子卷在哪里?

我刚刚使用 Ubuntu 安装程序(从已安装的 ISO 映像)在 VPS 上安装了 Ubuntu 18.04 服务器。在安装的手动分区阶段,我选择了 BTRFS 作为文件系统类型。

现在安装已完成,但我看不到@@home不像在非服务器安装中通常看到的那样。我不关心@home这里的子卷,但我不想将顶层卷安装在/

lsblk:

vda    252:0    0   25G  0 disk
|-vda1 252:1    0    1M  0 part
|-vda2 252:2    0   20G  0 part /
`-vda3 252:3    0    5G  0 part [SWAP]

没有产生任何结果:

btrfs su li /

我接下来尝试了这个:

btrfs filesystem show | awk '/ path /{print $NF}'
/dev/vda2

和:

# findmnt
TARGET    SOURCE     FSTYPE     OPTIONS
/         /dev/vda2  btrfs      rw,relatime,space_cache,subvolid=5,subvol=/

如何在安装 18.04 服务器期间创建 BTRFS 子卷?

我想创建@(为/)和@varlog(为/var/log)以及其他人。

我想使用 Snapper 进行每小时快照。有没有推荐的方法来使用 BTRFS 和 Snapper 设置 Ubuntu 服务器?

答案1

您可以通过以下方式移动/到子卷:

  1. 创建文件系统的快照。

     btrfs sub snap / /@
    
  2. 将新的子卷挂载到/mnt

     mount -o subvol=@ /dev/vda2 /mnt
    
  3. Chroot 到子卷并更新 grub。

     cd /mnt
     mount -o bind /dev  dev
     mount -o bind /sys  sys
     mount -o bind /proc proc
     chroot /mnt
     update-grub
     exit
    
  4. 更新/mnt/etc/fstab并添加此处subvol=@作为选项。

  5. 重启。您将启动到子卷。通过以下方式确保

     mount | grep vda2
    

它应该显示类似

   /dev/vda2 on / type btrfs (rw,relatime,space_cache,subvolid=257,subvol=/@) 
  1. 现在,您可以将顶部子卷挂载到某处,并删除其内容,但 除外/@

答案2

这是一个适用于 Ubuntu Server 20.04 的解决方案。它@在第一次启动之前创建子卷并从/卷中删除所有文件。

  1. 使用 BTRFS 根分区安装 Ubuntu 20.04,但系统安装后不要重新启动。

  2. 切换到终端(Alt+ F2)。

  3. 切换到 root 用户并卸载除 BTRFS 分区之外的所有设备:

    sudo -i
    umount /target/boot/efi
    umount -l /target/run
    umount /target/cdrom
    

    如果您还有其他挂载点(即/home),也请将其卸载。

  4. 创建@子卷并将所有文件移入其中:

    cd /target
    btrfs subvolume create @
    ls | grep -v @ | xargs mv -t @
    
  5. 卸载 BTRFS 分区并再次挂载,这次指向@子卷。这也是定义一些额外挂载选项的好时机(在我的示例中,有一些针对 SSD 设备的推荐选项)。我假设 BTRFS 卷位于/dev/sda2(根据情况进行调整)

    cd /
    umount /target
    mount -o subvol=@,ssd,noatime,space_cache,commit=120,compress=zstd:2 /dev/sda2 /target 
    
  6. 现在是时候通过安装所有必要的设备来完成系统,然后切换到它chroot(我假设你的启动分区是/dev/sda1

    mount /dev/sda1 /target/boot/efi
    mount --bind /proc /target/proc
    mount --bind /dev /target/dev
    mount --bind /sys /target/sys
    chroot /target
    

    如果你已经创建了其他分区(例如/home),也请将它们挂载在这里

  7. 在编辑器中打开fstab

    vi /etc/fstab
    

    并用 BTRFS 分区更新该行,即:

    UUID=xxx / btrfs default,subvol=@,ssd,noatime,space_cache,commit=120,compress=zstd:2  0 0
    
  8. 最后,设置引导加载程序(我假设/dev/sda

    update-initramfs -u -k all
    grub-install --recheck /dev/sda
    update-grub 
    exit
    
  9. 返回安装程序 ( Alt+ F1) 并重新启动。Ubuntu 应该会启动到您的@子卷。

相关内容