如何在 RAID 1 模式下使用 BTRFS 將 Debian Jessie 正確安裝到多個設備上?
作為一個簡短的介紹,我將告訴你,我有什麼樣的設置以及我想要實現什麼。之後,我嘗試解釋我的問題。由於這是我關於 U&L 的第一個問題,我不得不為它可能很奇怪而道歉。它相當長,所以也許 BTRFS 或 Debian 的新使用者可以從我的經驗中受益,甚至可以將其用作某種教程。
基本硬體設置
我有一塊主機板和一個來自 Haswell 一代的 CPU,帶有一些 RAM 和兩個 SSD。
(注意:為了做出正確的診斷,除了這些部分之外,我沒有更多的聯繫在一起。如果您需要有關這些部分的更多資訊,請隨時詢問更多詳細資訊。)
全部
我想將 Debian Jessie 安裝到帶有 BTRFS 模式的 RAID 1 鏡像兩個驅動器的兩個 SSD 上,這樣如果一個失敗我仍然可以在降級模式下繼續另一個。
我所取得的成就
由於 Jessie 目前正在測試,我開始使用它的前身 Wheezy 進行全新安裝,因為我過去在安裝測試分支時遇到了問題。在安裝過程中,我通過以下方式手動對第一個驅動器(比如A )進行了分區:
- 只有一個分區(包含使用驅動器上所有可用空間的所有未來安裝點),
- 在 BTRFS 中格式化和
- 離開交換分區。
按預期在A上安裝成功,之後我升級到 Jessie(通過編輯
/etc/apt/sources.list
和執行apt-get update && dist-upgrade
. 我執行了重新啟動。它現在顯示核心 3.14-2-amd64 很好。之後我開始準備另一個驅動器(比如B)。我用 複製了A的分區表
sfdisk -d /dev/sda > /tmp/sda.pt
並將其轉儲回B。sfdisk /dev/sdb < /tmp/sda.pt
所以現在我已經準備好添加設備並使用以下命令執行到 RAID 1 的轉換:
mount /dev/sda1 /mnt btrfs device add /dev/sdb1 /mnt btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
直到這裡一切都成功了,因為我看到一個
btrfs filesystem show
包含/dev/sda1
別名A和/dev/sdb1
別名B的 RAID 1 。另外blkid
列出具有相同 UUID 和不同 UUID_SUB 的兩個驅動器。我
/etc/fstab
只添加了一些與 SSD 相關的掛載選項,幾乎沒有改變掛載點:UUID=01234567-89ab-cdef-0123-456789abcdef / btrfs defaults,noatime,nodiratime,discard 0 1
重新啟動後,系統完全啟動到作業系統中。上述命令
btrfs filesystem show
仍然blkid
顯示相同的結果。RAID 1 似乎正在執行。我的問題和我的問題
在系統冷啟動之前,我拔掉了B(模擬完整的設備錯誤),因此只有A可用,並且認為 BTRFS 仍以降級模式啟動。但事實並非如此。我收到了 initramfs 無法找到設備的錯誤。
- 這是 BTRFS 的預期行為還是我的 initramfs 有問題?(也許這就是 BTRFS 告訴我一個驅動器在離線時被破壞的方式。)
一種。是否可以僅使用一個驅動器A啟動,插入(熱插拔)新驅動器C並線上重新同步?
灣。在btrfs.wiki.kernel.org上,提到首先以降級模式掛載故障設備,然後添加新設備。這是唯一的方法嗎?
(對自己說:我將測試插入另一個裸設備C並看看會發生什麼。也許我可以在通過wiki.ubuntuusers.de上的德國資源工作後自己回答這些問題。) 2. 如何使驅動器B也可啟動(以防驅動器A被破壞)?是否
/boot
同步?我只需要將 GRUB 安裝到設備B上grub-install /dev/sdb
還是需要做更多的事情? 3. 在 fstab中使用 mount 選項是否有用ssd
,因為它似乎不像btrfs.wiki.kernel.org所說的那樣自動啟用?對我來說,似乎只有在作業系統無法正確檢測到 SSD 時才有必要。
問題 1 的答案 - 一個驅動器出現故障後如何啟動
我可以通過執行以下步驟來恢復 RAID 1:
- 我拿了一個以某種方式格式化的驅動器(比如C)並將其插入到有缺陷的驅動器B之前所在的同一個 SATA 埠。
- 之後,我啟動了電腦,並在啟動菜單中按以下方式
e
根據wiki.ubuntuusers.de在啟動前編輯命令:一種。我滾動到相關的開始條目並找到以下行:
set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 01234567-89ab-cdef-0123-456789abcdef else search --no-floppy --fs-uuid --set=root 01234567-89ab-cdef-0123-456789abcdef fi echo 'Loading Linux 3.14-2-amd64...' linux /boot/vmlinuz-3.14-2-amd64 root=UUID=01234567-89ab-cdef-0123-456789abcdef ro quiet
灣。然後我編輯了第 1 行並將驅動器號更改為工作硬碟(在我的情況下它仍然存在
hd0
,如果仍然插入多個驅動器,它可能是hd1
):set root='hd0,msdos1'
C。我通過添加前導字元使其成為評論來停用第 2 到 6 行
#
:#if [ x$feature_platform_search_hint = xy ]; then # search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 01234567-89ab-cdef-0123-456789abcdef #else # search --no-floppy --fs-uuid --set=root 01234567-89ab-cdef-0123-456789abcdef #fi
d。之後,我編輯了第 8 行並插入了一個根標誌以降低 RAID (
rootflags=degraded
):linux /boot/vmlinuz-3.14-2-amd64 root=UUID=01234567-89ab-cdef-0123-456789abcdef ro rootflags=degraded quiet
e. 通過按鍵,
F10
我選擇了剛剛編輯的條目。系統正在啟動。 3. 完全啟動作業系統後,我必須將新驅動器C添加到我的 RAID 1。我按照 btrfs.wiki.kernel.org上的說明進行了操作:一種。我安裝了仍在工作的驅動器A:
mount -o degraded /dev/sda1 /mnt
灣。我添加了新的驅動器C:
btrfs device add /dev/sdb1 /mnt
C。之後我刪除了舊設備(在我的情況下是驅動器B):
btrfs device delete missing /mnt
- 最後,我檢查了命令是否一切順利
btrfs filesystem show
,正如上面問題中提到的那樣blkid
。btrfs fi df /mnt
兩個驅動器都具有相同的 UUID 但不同的 UUID_SUB 並且報告處於模式 RAID 1。恭喜,它成功了!
個人筆記
我按預期處理失敗的 initramfs 的描述行為,直到其他人證明我錯了。也許這是一種告訴我的方式,我現在應該小心地做出反應,因為我的磁碟嚴重崩潰了——但這只是猜測。
關於需要手動降級的說明
與此同時,我在linux 核心開發者郵件列表中發現了一個與該主題相關的有趣討論。由於它的相關性,我想引用 Duncan 寫的一段話,我認為了解這一點非常重要,尤其是對於新使用者:
您應該能夠僅使用具有降級掛載選項的單個設備掛載兩個設備的 btrfs raid1 文件系統,但我相信目前核心在這種情況下拒絕讀寫掛載,因此您將擁有隻讀訪問權限,直到您btrfs 設備添加了第二個設備,因此它可以再次執行正常的 raid1 模式。
$$ … $$同時,因為如果 btrfs 確實可以找到文件系統的所有組件,降級的 mount-opt 實際上是無操作的,所以有些人選擇簡單地將降級添加到他們的標準掛載選項(編輯 grub 配置以在每次啟動時添加它) ,所以他們不必擔心。但是,不建議這樣做,因為公認的觀點是,未降級掛載失敗會警告系統管理員正在發生非常錯誤的事情,他們需要修復它。然後,如果他們願意,他們可以臨時添加 degraded,以便讓文件系統掛載並因此能夠啟動,但是在每次啟動時例行添加選項會繞過這個重要警告,因此管理員很可能會忽略問題(或根本不知道),直到為時已晚。 (來源:https ://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg31265.html )
附加說明:雖然我的範例電腦上沒有交換分區,但我想鼓勵那些願意擁有它們的人閱讀我提供連結的這封非常有趣的郵件,因為它解釋了在 RAID 模式下與 BTRFS 交換。
問題 2 的答案 - 如何使其他驅動器可啟動
至於我到目前為止所知道的,使用
grub-install /dev/sdb
(甚至是額外的 update-grub)似乎還不夠。我會解釋我為什麼這麼認為。當我通過離線拔出驅動器A並僅使用驅動器B啟動來嘗試相反的方式時,發生了以下情況。引導載入程序 GRUB 出現了,我執行了與問題 1 的第 2 點相同的步驟。在確認
F10
引導過程後立即以空白螢幕停止(我說的是活動監視器,黑色背景,沒有游標)。所以很明顯,驅動器B上的引導載入程序有問題。(記住:我有一個 RAID 1,在第一個驅動器“失敗”後無法從我的第二個驅動器啟動。)我通過硬重置幫助自己,再次插入驅動器A(因此A和B再次出現)並啟動到作業系統。因為我的驅動器A和B絕對相同,所以我將整個 MBR(包含引導載入程序)從工作驅動器A複製到B以原始模式與
dd if=/dev/sda of=/dev/sdb bs=512 count=1
. 我關閉電腦,像以前一樣拔下驅動器A,猜猜發生了什麼?在再次執行降級步驟後,我終於可以設法僅從驅動器B啟動到作業系統。我必須總結一下,我仍然不知道這是否與我的分區表(MSDOS - 不是 GPT)或
grub-install
與 BTRFS 或其他東西結合使用的命令有關。我也沒有得到我的原始副本與grub-install
. (也許有人可以在這個答案下面的評論中澄清這一點。)請注意,我仍在這種情況下進行研究,我將再次更新此答案。我想澄清更多,但我需要更多時間處理兩個驅動器的MBR 扇區佈局的原始程式碼,並確定問題是來自引導載入程序還是磁碟標識。
回答問題 3 - 如何處理掛載選項 ssd
這取決於主機板是否能夠正確傳遞驅動情況。如btrfs.wiki.kernel.org所述, BTRFS 本身依賴於作業系統的值。由於作業系統中的其他模組也可能依賴於這些值,因此通常最好檢查
/sys/block/sdX/queue/rotational
其適當的值(0:SSD,1:HDD)。如果值適合,請保留 ssd 選項。