btrfs raid1 沒有使用所有磁碟?
我在 Ubuntu 16.04 上有一個帶有 3 個磁碟的 Btrfs raid1。但是,似乎只使用了 2 個磁碟而不是全部 3 個磁碟。我應該如何解決這個問題?
root@one:~# btrfs fi sh Label: none uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567 Total devices 3 FS bytes used 54.77GiB devid 1 size 2.73TiB used 56.03GiB path /dev/sda2 devid 2 size 2.73TiB used 56.03GiB path /dev/sdc2 devid 3 size 2.59TiB used 0.00B path /dev/sdb3
我試過執行轉換過濾器,但 /dev/sdb3 仍然沒有被使用。
root@one:~# btrfs balance start -dconvert=raid1 -mconvert=raid1 /top/raid/ Done, had to relocate 112 out of 112 chunks root@one:~# btrfs fi df /top/raid/ Data, RAID1: total=55.00GiB, used=54.40GiB System, RAID1: total=32.00MiB, used=16.00KiB Metadata, RAID1: total=1.00GiB, used=373.06MiB GlobalReserve, single: total=128.00MiB, used=0.00B
起初,安裝 Ubuntu 伺服器時只有 1 個磁碟。然後我添加了一個磁碟並轉換為raid1。然後我添加了第三個磁碟 /dev/sdb3 並嘗試再次平衡。第三個磁碟沒有被使用。
root@one:~# btrfs --version btrfs-progs v4.4
我可以掛載 /dev/sdb3 就好了。
root@one:~# mount /dev/sdb3 /mnt root@one:~# ll /mnt total 16 drwxr-xr-x 1 root root 74 Apr 13 09:37 ./ drwxr-xr-x 1 root root 200 Apr 12 21:19 ../ drwxr-xr-x 1 root root 200 Apr 12 21:19 @/ drwxr-xr-x 1 root root 152 Apr 12 15:31 @home/ drwxrwx--t 1 root root 36 Apr 13 09:38 @samba/ root@one:~# btr fi sh Label: none uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567 Total devices 3 FS bytes used 54.82GiB devid 1 size 2.73TiB used 56.03GiB path /dev/sda2 devid 2 size 2.73TiB used 56.03GiB path /dev/sdc2 devid 3 size 2.59TiB used 0.00B path /dev/sdb3
編輯:
注意:btrfs FAQ聲明如下,由@jeff-schaller 評論(強調我的):
btrfs 支持 RAID-0、RAID-1 和 RAID-10。從 Linux 3.9 開始,btrfs 還支持 RAID-5 和 RAID-6,儘管該程式碼仍處於試驗階段。
btrfs 首先將所有設備組合到一個儲存池中,然後在創建文件數據時複製這些塊。RAID-1 目前被定義為“所有數據在不同設備上的 2 個副本”。這與 MD-RAID 和 dmraid 不同,因為它們為 n 個設備製作了 n 個副本。在三個 1 TB 設備上的 btrfs RAID-1 中,我們得到 1.5 TB 的可用數據。因為每個塊只複製到 2 個設備,所以寫入一個給定的塊只需要寫入 2 個設備;只能從一個讀取。
RAID-0 的定義類似,將條帶拆分到盡可能多的設備上。3 × 1 TB 設備產生 3 TB 可用空間,但根本不提供冗餘。
RAID-10 建立在這些定義之上。每個條帶被拆分為恰好 2 個 RAID-1 集,並且這些 RAID-1 集被寫入正好 2 個設備(因此最少 4 個設備)。具有 6 × 1 TB 設備的 btrfs RAID-10 卷將產生 3 TB 可用空間和 2 個所有數據的副本。
目前我手頭沒有足夠大的驅動器來測試這個,但我的猜測很簡單,因為你有相對較大的驅動器,btrfs 只是選擇將數據寫入前兩個驅動器。我希望隨著更多數據寫入驅動器,這種情況會在未來發生變化。
如果您對我使用較小驅動器的測試感興趣:
我在具有單個 SATA 驅動器的 VM 中安裝了 Ubuntu Server 16.04 LTS,將作業系統安裝在單個 btrfs 分區上。
然後我添加了另一個 SATA 驅動器,對其進行分區,執行
btrfs device add /dev/sdb1 /
,然後在轉換為 raid1 時平衡它btrfs balance start -dconvert=raid1 -mconvert=raid1 /
我對設備 /dev/sdc1 重複了一遍。結果對我來說是一樣的——我有一個跨越三個驅動器的 btrfs。我還分配了一個 2GiB 的文件,它確實可以從所有三個磁碟訪問。我
btrfs fi sh
的顯示如下:Label: none uuid: cdfe192c-36da-4a3c-bc1a-74137abbb190 Total devices 3 FS bytes used 3.07GiB devid 1 size 10.00GiB used 5.25GiB path /dev/sda1 devid 2 size 10.00GiB used 5.03GiB path /dev/sdb1 devid 3 size 8.00GiB used 2.28GiB path /dev/sdc1
你是如何呼叫 mkfs.btrfs 的?你的 btrfs-progs 版本是什麼?
# btrfs --version btrfs-progs v4.4
我無法重現您的情況。如果您嘗試掛載 /dev/sdb3 會發生什麼?
如果您有虛擬機或備用磁碟來玩分區,請創建 3 個分區並嘗試以下操作。
我創建了一個 Ubuntu 16.04 VM 並將 /dev/vda 分區為三個分區,每個分區 2GiB。
# mkfs.btrfs -d raid1 -m raid1 /dev/vda{1..3} Label: (null) UUID: 0d6278f7-8830-4a73-a72f-0069cc560aaf Node size: 16384 Sector size: 4096 Filesystem size: 6.00GiB Block group profiles: Data: RAID1 315.12MiB Metadata: RAID1 315.12MiB System: RAID1 12.00MiB SSD detected: no Incompat features: extref, skinny-metadata Number of devices: 3 Devices: ID SIZE PATH 1 2.00GiB /dev/vda1 2 2.00GiB /dev/vda2 3 2.00GiB /dev/vda3 # btrfs fi sh Label: none uuid: 0d6278f7-8830-4a73-a72f-0069cc560aaf Total devices 3 FS bytes used 112.00KiB devid 1 size 2.00GiB used 614.25MiB path /dev/vda1 devid 2 size 2.00GiB used 315.12MiB path /dev/vda2 devid 3 size 2.00GiB used 315.12MiB path /dev/vda3
嘗試掛載 /dev/vda1,向其中寫入文件,然後改為掛載 /dev/vda2 或 /dev/vda3 並檢查文件是否存在(肯定應該存在)。
PS:我首先在 Arch 上使用 btrfs-progs 版本 4.10.2 進行了嘗試,結果相同,但我認為可能 Ubuntu 16.04 附帶的舊版本可能會有不同的行為。事實證明它隨 v4.4 一起提供,但在文件系統創建和鏡像等方面似乎表現相同。