btrfs raid1 未使用所有磁碟?

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

答案1

編輯

注意:btrfs 常見問題解答正如 @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 個副本。在 btrfs RAID-1 中三台 1 TB 設備,我們獲得 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 磁碟機的虛擬機器中安裝了 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 一起發布,但在檔案系統創建和鏡像等方面似乎表現相同。

答案2

該卷現在正在使用所有磁碟。我想拉班的猜測應該是對的。由於前兩個磁碟比第三個磁碟大,「btrfs 只是選擇將資料寫入到目前為止的前兩個磁碟機」。

root@one:~# btrfs fi sh
Label: none  uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
        Total devices 3 FS bytes used 151.00GiB
        devid    1 size 2.73TiB used 148.03GiB path /dev/sda2
        devid    2 size 2.73TiB used 148.03GiB path /dev/sdc2
        devid    3 size 2.59TiB used 8.00GiB path /dev/sdb3

root@one:~# btrfs dev usage /
/dev/sda2, ID: 1
   Device size:             2.73TiB
   Data,RAID1:            147.00GiB
   Metadata,RAID1:          1.00GiB
   System,RAID1:           32.00MiB
   Unallocated:             2.58TiB

/dev/sdb3, ID: 3
   Device size:             2.59TiB
   Data,RAID1:              8.00GiB
   Unallocated:             2.58TiB

/dev/sdc2, ID: 2
   Device size:             2.73TiB
   Data,RAID1:            147.00GiB
   Metadata,RAID1:          1.00GiB
   System,RAID1:           32.00MiB
   Unallocated:             2.58TiB

相關內容