Lvm

使用 LVM 與 MDRAID 進行 RAID - 優缺點?

  • February 26, 2016

他對“混合 RAID 類型”問題的回答中,HBruijn 建議使用 LVM 來實現 RAID,而不是更標準的 MDRAID。

經過一番調查,似乎 LVM 也支持 RAID 功能。過去,我在 MDRAID 上使用過 LVM,直到現在才知道 LVM 也支持 RAID 功能。這似乎是一個相對較新的發展,但我還沒有確切地知道這是什麼時候實施的。

因此,這些是在 Linux 上實現軟體 RAID 的替代方法。這兩種不同方法的優缺點是什麼?我正在尋找兩種方法之間的功能比較,以便人們可以決定哪種方法更適合他們。基於實驗得出的結論(例如,此功能不如此功能有效,這就是原因)也可以,只要您在答案中包含您的數據。

需要解決的一些具體問題:

  1. 假設我想做 sw RAID + LVM(一個常見的場景)。我應該使用 LVM 對 sw RAID 的支持,從而使用一個實用程序而不是兩個實用程序嗎?這種更集成的方法有什麼優勢嗎?
  2. 與更成熟的 MDADM 相比,LVM 對 sw RAID 的支持是否有明顯的缺陷?具體來說,LVM 對 sw RAID 的支持有多穩定/無錯誤?似乎這種支持只能追溯到 2011 年(見下文),而 MDADM 則要老得多。此外,它在功能集方面如何比較?與 MDADM 相比,它是否存在顯著的功能缺陷?相反,它是否支持任何 MDADM 不具備的 sw RAID 功能?

筆記:

  1. 在http://www.olearycomputers.com/ll/linux_mirrors.html上有詳細的討論, 但我不知道它是在什麼日期寫的。

關於 Serverfault 的類似問題:linux LVM mirror vs. MD mirror。但是,這個問題是在 2010 年提出的,答案可能已經過時了。 2. 2.02.87 版的變更日誌條目 - 2011 年 8 月 12 日有

為新的 segtype ‘raid’ 添加配置 –with-raid 以支持 MD RAID 1/4/5/6

因此,LVM 中的 RAID 支持似乎已有 3 年的歷史了。

LVM RAID 的成熟度和功能性如何?

LVM-RAID 實際上是幕後的 mdraid。它的工作原理是為每個 RAID 設備創建兩個邏輯卷(一個用於數據,稱為“rimage”;一個用於元數據,稱為“rmeta”)。然後它將這些傳遞給現有的 mdraid 驅動程序。所以處理磁碟讀取錯誤、I/O 負載平衡等應該是相當成熟的。

這就是好消息。

工具

您不能在上面使用mdadm它(至少,不是以任何簡單的方式¹),而且 LVM RAID 工具遠沒有那麼成熟。例如,在 Debian Wheezy 中,lvs無法告訴您 RAID5 同步狀態。我非常懷疑修復和恢復(尤其是從“那永遠不會發生!”的情況)是否與 mdadm 一樣好(我在測試中不小心遇到了其中一個,最後只是放棄了恢復它——用mdadm 本來很容易)。

特別是如果您沒有使用所有工具的最新版本,情況會變得更糟。

缺少的功能

目前版本的 LVM-RAID 不支持收縮 ( lvreduce) RAID 邏輯卷。它們也不支持更改磁碟數量或 RAID 級別(lvconvert給出一條錯誤消息,指出尚不支持)。lvextend確實有效,甚至可以增加 mdraid 最近才獲得支持的 RAID 級別,例如 RAID10。根據我的經驗,擴展 LV 比減少它們更常見,所以這實際上是合理的。

其他一些 mdraid 功能不存在,尤其是您無法自定義使用 mdadm 的所有選項。

在舊版本上(例如,在 Debian Wheezy 中),LVM RAID 也不支持增長。例如,在 Wheezy 上:

root@LVM-RAID:~# lvextend -L+1g vg0/root
Extending logical volume root to 11.00 GiB
Internal error: _alloc_init called for non-virtual segment with no disk space.

通常,您不想執行 Wheezy 版本。

以上是安裝後的。這也不是一個簡單的過程。

工具問題

在玩我的 Jessie VM 時,我(實際上)斷開了一個磁碟。那行得通,機器保持運轉。lvs但是,沒有表明陣列已降級。我重新連接了磁碟,並刪除了第二個。保持執行(這是raid6)。重新連接,仍然沒有任何跡象lvs。我lvconvert --repair按音量執行,它告訴我沒問題。然後我拉了第三個磁碟……機器死了。重新插入它,重新啟動,現在不確定如何修復。mdadm --force --assemble會解決這個問題;似乎也沒有那個選項(lvchange 接受,vgchange但它似乎沒有做任何事情)。即使試圖直接將映射表提供給核心,我也不知道如何恢復它。lvchange``--force``dmsetup

此外,mdadm它是專門用於管理 RAID 的工具。LVM 做得更多,但感覺(我承認這是相當主觀的)RAID 功能有點被塞進去了;它不太合適。

您如何實際安裝具有 LVM RAID 的系統?

這是在 Debian Jessie 或 Wheezy 上安裝它的簡要概述。傑西要容易得多;請注意,如果您要在 Wheezy 上嘗試此功能,請先閱讀整個內容……

  1. 使用完整的 CD 映像進行安裝,而不是 netinst 映像。
  2. 照常進行,進行磁碟分區,設置 LVM 物理卷。您可以使用/bootLVM-RAID(在 Jessie 和 Wheezy 上,下面將詳細介紹一些工作)。
  3. 創建您的捲組。將其保留在 LVM 菜單中。
  4. 第一點樂趣——安裝程序沒有dm-raid.ko載入模組,甚至沒有可用!因此,您可以從將要安裝的 linux-image 包中獲取它。切換到控制台(例如Alt- F2)並:
cd /tmp
dpkg-deb --fsys-tarfile /cdrom/pool/main/l/linux/linux-image-*.deb | tar x
depmod -a -b /tmp
modprobe -d /tmp dm-raid
  1. 安裝程序不知道如何創建 LVM-RAID LV,因此您必須使用命令行來完成。注意我沒有做任何基準測試;下面的條帶大小 ( -I) 完全是我的 VM 設置的猜測:
lvcreate --type raid5 -i 4 -I 256 -L 10G -n root vg0
  1. 在 Jessie 上,您可以使用 RAID10 進行交換。在 Wheezy 上,不支持 RAID10。因此,您可以使用兩個交換分區,每個 RAID1。但是您必須準確地告訴它要將它們放在哪個物理卷上,否則它會將鏡像的兩半放在同一個磁碟上。是的。嚴重地。無論如何,這看起來像:
lvcreate --type raid1 -m1 -L 1G -n swap0 vg0 /dev/vda1 /dev/vdb1
lvcreate --type raid1 -m1 -L 1G -n swap1 vg0 /dev/vdc1 /dev/vdd1
  1. 最後,切換回安裝程序,然後在 LVM 菜單中點擊“完成”。您現在將看到大量的邏輯卷顯示。那是安裝程序不了解發生了什麼;忽略所有名稱rimagermeta名稱中的內容(請參閱上面的第一段以了解它們的含義)。
  2. 照常創建文件系統、交換分區等。安裝基本系統等,直到進入 grub 提示符。
  3. 在 Jessie 上,如果安裝到 MBR(或者可能使用 EFI,但我還沒有測試過),grub2 將可以工作。在 Wheezy 上,安裝將失敗,唯一的解決方案是向後移植 Jessie 的 grub2。這實際上相當容易,它可以在 Wheezy 上乾淨地編譯。不知何故,將您的反向移植 grub 包放入/target(或在 chroot 之後在一秒鐘內完成)然後:
chroot /target /bin/bash
mount /sys
dpkg -i grub-pc_*.deb grub-pc-bin_*.deb grub-common_*.deb grub2-common_*.deb 
grub-install /dev/vda … grub-install /dev/vdd # for each disk
echo 'dm_raid' >> /etc/initramfs-tools/modules
update-initramfs -kall -u
update-grub # should work, technically not quite tested²
umount /sys
exit
  1. 實際上,在我最近的 Jessie VM grub-install 上掛了。切換到 F2 並執行while kill $(pidof vgs); do sleep 0.25; done,然後執行相同的 for lvs,通過 grub-install 獲得它。儘管如此,它似乎生成了一個有效的配置,但以防萬一我做了一個chroot /target /bin/bash,確保/proc並被/sys安裝,然後做了一個update-grub. 那一次,它完成了。然後我做了一個dpkg-reconfigure grub-pc選擇在所有虛擬磁碟的 MBR 上安裝 grub。
  2. 在 Wheezy 上,完成上述操作後,選擇“不使用引導載入程序繼續”。
  3. 完成安裝。它會啟動。大概。

社區知識

有相當多的人知道mdadm,並且有很多部署經驗。Google可能會回答您的大部分問題。您通常可以在此處獲得有關它的問題,可能會在一天內得到答案。

LVM RAID 則不能這樣說。很難找到指南。我執行的大多數 Google 搜尋都找到了關於使用 mdadm 數組作為 PV 的內容。老實說,這可能主要是因為它較新且不太常用。在某種程度上,反對它感覺不公平——但如果出現問題,mdadm 周圍更大的現有社區使恢復我的數據的可能性更大。

結論

LVM-RAID 的發展相當迅速。在 Wheezy 上,它並不是真正可用的(至少,不做 LVM 和核心的反向移植)。早些時候,在 2014 年,在 Debian 測試中,這感覺像是一個有趣但未完成的想法。如果您經常需要創建具有不同 RAID 配置的小切片(這對於mdadm.

如果幾個大型 mdadm RAID 陣列足以滿足您的需求,使用 LVM 分割成分區,我建議繼續使用它。如果您最終不得不創建許多陣列(甚至是邏輯卷陣列),請考慮改用 LVM-RAID。但保持良好的備份。

LVM RAID(甚至是 mdadm RAID)的許多用途正在被集群儲存/對象系統、ZFS 和 btrfs 之類的東西所取代。我建議也調查這些,它們可能會更好地滿足您的需求。


謝謝你

我要感謝psusi讓我重新審視 LVM-RAID 的狀態並更新這篇文章。

腳註

  1. 我懷疑您可以使用設備映射器將元數據和數據粘合在一起,從而採用這種方式mdadm --assemble。當然,你可以mdadm在邏輯卷上執行就好了……這樣會更明智。
  2. 在進行 Wheezy 安裝時,我第一次沒有這樣做,最後沒有 grub 配置。我必須通過在 grub 提示符下輸入所有資訊來啟動系統。一旦啟動,就可以了,所以我認為它可以從安裝程序中正常工作。如果您在 grub 提示符下結束,請輸入以下神奇的行:
linux /boot/vmlinuz-3.2.0-4-amd64 root=/dev/mapper/vg0-root
initrd /boot/initrd.image-3.2.0-4-amd64
boot

PS:自從我真正進行原始實驗以來已經有一段時間了。我已經提供了我的原始筆記。請注意,我現在已經完成了最近的一些,包括在這個答案中,而不是在那些筆記中。

引用自:https://unix.stackexchange.com/questions/150644