BTRFS 餘額已完成,但仍顯示以“單一”模式儲存的數據
我有三個驅動器(8TB、4TB、3TB)。最初,我在 8TB 驅動器上創建了一個 btrfs 分區並將我的所有數據複製到那裡。我使用 btrfs device add 添加了 4TB 和 3TB 驅動器,然後進行了余額轉換:
btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
現在平衡完成了,但它仍然在原始驅動器上以“single”和“DUP”模式顯示一些數據。這是來自的輸出
btrfs fi usage /mnt/btrfs
:Overall: Device size: 13.37TiB Device allocated: 4.62TiB Device unallocated: 8.75TiB Device missing: 0.00B Used: 4.60TiB Free (estimated): 4.98TiB (min: 4.38TiB) Data ratio: 1.76 Metadata ratio: 2.00 Global reserve: 512.00MiB (used: 0.00B) Data,single: Size:645.00GiB, Used:645.00GiB /dev/mapper/8TB 645.00GiB Data,RAID1: Size:1.98TiB, Used:1.98TiB /dev/mapper/3TB 551.00GiB /dev/mapper/4TB 1.44TiB /dev/mapper/8TB 1.98TiB Metadata,RAID1: Size:8.00GiB, Used:3.84GiB /dev/mapper/4TB 8.00GiB /dev/mapper/8TB 8.00GiB Metadata,DUP: Size:7.00GiB, Used:6.41GiB /dev/mapper/8TB 14.00GiB System,DUP: Size:8.00MiB, Used:400.00KiB /dev/mapper/8TB 16.00MiB Unallocated: /dev/mapper/3TB 2.19TiB /dev/mapper/4TB 2.19TiB /dev/mapper/Seagate_Archive_8TB-btrfs 4.37TiB
問題:
- 是否有任何數據未儲存在多個磁碟上?那麼,換句話說,如果一個磁碟發生故障,是否會有任何數據失去?如果是這樣,我怎樣才能將這個揮之不去的“單一”儲存數據強制轉換為 RAID1?
- 假設“single”和“DUP”數據儲存是不必要的,現在一切都已轉換為raid,有什麼辦法可以清除它們嗎?
編輯:這是一些系統資訊:
uname -a Linux 4.8.0-0.bpo.2-amd64 #1 SMP Debian 4.8.11-1~bpo8+1 (2016-12-14) x86_64 GNU/Linux btrfs --version btrfs-progs v4.9
我還應該提到這台電腦在平衡期間重新啟動,當它重新啟動時,我根本無法安裝 btrfs 卷(它只會掛起)。我嘗試了許多不同的掛載參數(skip-param、recovery),唯一可行的是將它以只讀方式掛載(使用
-o ro
)。在經歷了很多挫折之後,我使用 Antergos live USB 啟動,它上面有最新的核心和 btrfs progs,並且安裝沒有問題。我暫停了自動啟動的平衡操作,然後重新啟動到 Debian,它沒有問題地安裝,所以我再次恢復了平衡。
在 btrfs irc 使用者的幫助下,我能夠回答問題 (1)。它似乎與重新啟動和不成功的掛載嘗試無關(仍然不確定那是什麼)。相反,儲存為“單個”的 645GB 數據似乎是在啟動 raid1 轉換後添加到 btrfs 卷的數據。
btrfs fi usage
因此,在假設所有數據在轉換後都儲存為 raid1 之前檢查輸出似乎是個好習慣。此外,“軟”過濾器將允許您重新平衡未根據目標配置文件儲存的數據,例如我執行:btrfs balance start --bg -mconvert=raid1,soft /mnt/btrfs btrfs balance start --bg -dconvert=raid1,soft /mnt/btrfs
(根據使用者在 btrfs irc 論壇上的建議,先對元數據進行平衡,然後對數據進行平衡),這是在將剩餘數據轉換為 raid1 的過程中。
此外,要回答問題 (2),答案是可能會在 raid1 文件系統中以一些“單個”塊結束,但它們的使用率應該為 0。如果發生這種情況,您可以通過執行清理它們
btrfs balance start -dusage=0 -musage=0 /mnt/btrfs
(請參閱btrfs 常見問題解答)