将 btrfs 放在 lvm 上有意义吗?

r0b*_*rts 15 linux partition lvm btrfs

这是 OpenSUSE Leap 42。我有一台带有2 个 500 GB SATA HDD驱动器的计算机,为了加快速度,我为系统安装了一个小型 30GB SSD驱动器。在安装过程中,硬盘断开连接,因为它们混淆了安装程序(和我)。系统启动后,我很容易将/home目录交换为 XFS 逻辑卷(我主要使用 LVM 来轻松添加空间)。然后/opt填满(chrome 和 botanicula),我想把它放在硬盘上的一个卷上。所以我创建了一个卷并用 BTRFS 对其进行了格式化。经过一番摸索之后 - @ subvolumesin fstab 让我阅读了 BTRFS 我做了我需要的 - /opt 现在的大小为 100 GB。

但问题是:用 btrfs 格式化 LVM 卷有意义吗?本质上,它们都是卷处理系统。

为了说明,我粘贴了我的 fstab(# 评论显示了我的编辑)和 vgscan + lvscan 输出:

~> cat /etc/fstab

UUID=1b511986-9c20-4885-8385-1cc03663201b swap swap defaults 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af / btrfs defaults 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /boot/grub2/i386-pc btrfs subvol=@/boot/grub2/i386-pc 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /boot/grub2/x86_64-efi bt

rfs subvol=@/boot/grub2/x86_64-efi 0 0
UUID=3e103686-52e9-44ac-963f-5a76177af56b /opt                 btrfs      defaults              0 0
#UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /opt btrfs subvol=@/opt 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /srv btrfs subvol=@/srv 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /tmp btrfs subvol=@/tmp 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /usr/local btrfs subvol=@/usr/local 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/crash btrfs subvol=@/var/crash 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/lib/libvirt/images btrfs subvol=@/var/lib/libvirt/images 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/lib/mailman btrfs subvol=@/var/lib/mailman 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/lib/mariadb btrfs subvol=@/var/lib/mariadb 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/lib/mysql btrfs subvol=@/var/lib/mysql 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/lib/named btrfs subvol=@/var/lib/named 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/lib/pgsql btrfs subvol=@/var/lib/pgsql 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/log btrfs subvol=@/var/log 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/opt btrfs subvol=@/var/opt 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/spool btrfs subvol=@/var/spool 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /var/tmp btrfs subvol=@/var/tmp 0 0
UUID=30e20531-b7f1-4bde-b2d2-fab8eeca23af /.snapshots btrfs subvol=@/.snapshots 0 0
UUID=c4c4f819-a548-4881-b854-a0ed62e7952e /home     xfs defaults 1 2
#UUID=e14edbfa-ddc2-4f6d-9cba-245d828ba8aa /home                xfs        defaults              1 2
Run Code Online (Sandbox Code Playgroud)

~>

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "r0data" using metadata type lvm2
  Found volume group "r0sys" using metadata type lvm2

# lvscan
  ACTIVE            '/dev/r0data/homer' [699.53 GiB] inherit
  ACTIVE            '/dev/r0sys/optr' [100.00 GiB] inherit
Run Code Online (Sandbox Code Playgroud)

回答后: 谢谢,我现在明白了关键的区别。对我来说,LVM 确实更适合管理其上的任何文件系统的空间,但 BTRFS 应该用于特定于它的功能 - 主要是快照。在简单的家庭网络使用中,最好远离它。我对管理小驱动器上的空间感到非常痛苦,但我想在大驱动器上也会消耗空间。

小智 12

也许这可以解释(顺便说一下来自 btrfs wiki)

btrfs 中的子卷与 LVM 逻辑卷或 ZFS 子卷不同。对于 LVM,逻辑卷本身就是一个块设备(例如,它可以包含任何其他文件系统或容器,如 dm-crypt、MD RAID 等)——而 btrfs 则不是这种情况。btrfs 子卷不是块设备(并且不能被视为一个块设备),而是可以将 btrfs 子卷视为 POSIX 文件命名空间。该命名空间可以通过文件系统的顶级子卷访问,也可以自行挂载。

另见https://btrfs.wiki.kernel.org/index.php/FAQ

与分区、设备管理器和逻辑卷的交互

Btrfs 有子卷,这是否意味着我不需要逻辑卷管理器,我可以在原始分区上创建一个大的 Btrfs 文件系统?

这个问题没有唯一的答案。以下是选择原始分区或 LVM 时要考虑的问题:

  • 表现
    • 原始分区比逻辑卷稍快
    • btrfs 跨文件系统进行写入优化(顺序写入),子卷写入性能将受益于该算法创建多个 btrfs 文件系统,每个文件系统在不同的 LV 上,这意味着该算法可能无效(尽管内核仍会在块设备上执行一些优化)等级)
  • 跨设备在线调整文件系统大小和重新定位:来自 LVM 的 pvmove 命令允许文件系统在线时在设备之间移动
    • 原始分区只能在离线时移动到不同的起始柱面
    • 如果分区后有可用空间,原始分区只能变大,而 LVM 可以将 LV 扩展到卷组中的任何可用空间 - 它可以在线调整大小
  • 子卷/逻辑卷大小限制
    • LVM 便于创建固定大小的逻辑卷(例如每个用户 10MB,每个虚拟机映像 20GB 等)
    • subvolumes 目前不强制执行这种严格的大小限制,尽管即将推出的 qgroups 功能将解决这个问题

.... FAQ 继续解释 LVM+BTRFS 有意义的场景


小智 5

这里的另一个答案是“好吧!” 质量。LVM 采用一组块设备,并向系统提供一个新的 (LV) 块设备,该块设备具有到物理块的固定映射。它是僵化的、不灵活的。BTRFS 是一个实际的文件系统。比较两者是徒劳的。

ZFS 和 BTRFS(也许还有 BCACHEFS)提出了一种全新且普遍优越的范例。 文件系统中的所有块设备共享空闲块。子卷上的“df”几乎没有意义。“子卷”可以共享数据和元数据块!创建 BTRFS 快照或从一个子卷到另一个子卷意味着更改一些元数据块 = 瞬时。

LVM 支持相当愚蠢和简单化的固定“分区”概念来支持老式文件系统。重新安排 LV 和 FS 大小是一项完全包含在 BTRFS 或 ZFS 中的任务。