將 btrfs 放在 lvm 上有意義嗎?
這是 OpenSUSE Leap 42。我有一台帶有2 個 500 GB SATA HDD驅動器的電腦,為了加快速度,我為系統安裝了一個小的 30GB SSD驅動器。在安裝過程中,硬碟驅動器被斷開,因為它們混淆了安裝程序(和我)。系統啟動後,我很容易將**/home目錄交換為 XFS 邏輯卷(我主要使用 LVM 來輕鬆添加空間)。然後/opt**填滿(鉻和植物),我想把它放在硬碟上的一個卷上。所以我創建了一個卷並使用 BTRFS 對其進行格式化。經過一番摸索——fstab 中的
@ subvolumes
in 讓我閱讀了 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 應該用於特定於它的功能 - 主要是快照。在簡單的家庭網路使用中,最好遠離它。我在小型驅動器上管理空間時遇到了太多悲傷,但我想在大型驅動器上空間也會被吃掉。
也許這解釋了(順便說一下,來自 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 功能將解決這個問題
…. FAQ 繼續解釋 LVM+BTRFS 有意義的場景