把btrfs放在lvm上有意义吗?

把btrfs放在lvm上有意义吗?

这是 OpenSUSE Leap 42。我有一台计算机2 个 500 GB SATA 硬盘驱动器并加速它我放入了一个小型 30GB SSD系统的驱动器。在安装过程中,硬盘驱动器被断开,因为它们使安装人员(和我)感到困惑。系统启动后,我很容易交换/家XFS 逻辑卷的目录(我使用 LVM 主要是为了轻松添加空间)。然后/选择填满了(铬和植物),我想把它放在硬盘上的一个卷上。所以我创建了一个卷并使用 BTRFS 对其进行了格式化。经过一番绞尽脑汁后 - @ subvolumesfstab 中的内容让我阅读了 BTRFS,我做了我需要的事情 - /opt 现在大小为 100 GB。

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

为了便于说明,我粘贴了我的 fstab (# comments 显示我的编辑)和 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

〜>

# 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

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

答案1

也许这可以解释(顺便说一下,来自 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 等)
    • 子卷目前不强制执行这种严格的大小限制,但即将推出的 qgroups 功能将解决此问题

....常见问题解答继续解释 LVM+BTRFS 有意义的场景

答案2

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

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

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

相关内容