Linux

MDADM - 將新硬碟添加到現有 RAID1

  • August 29, 2021

我的專用伺服器有一個帶有 2x1TB 硬碟的 RAID1 陣列它正在填滿

我想添加新硬碟(已經物理添加)

我不知道該怎麼做。

我害怕失去數據

我找到了這個教程

[root@server ~]# fdisk -l

Disk /dev/nvme2n1: 1024.2 GB, 1024209543168 bytes, 2000409264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/nvme1n1: 1024.2 GB, 1024209543168 bytes, 2000409264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x844cebe6

Device Boot      Start         End      Blocks   Id  System
/dev/nvme1n1p1            2048    67110911    33554432   fd  Linux raid autodetect
/dev/nvme1n1p2        67110912    68159487      524288   fd  Linux raid autodetect
/dev/nvme1n1p3        68159488  2000407215   966123864   fd  Linux raid autodetect

Disk /dev/nvme0n1: 1024.2 GB, 1024209543168 bytes, 2000409264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xcb3fcb0e

   Device Boot      Start         End      Blocks   Id  System
/dev/nvme0n1p1            2048    67110911    33554432   fd  Linux raid autodetect
/dev/nvme0n1p2        67110912    68159487      524288   fd  Linux raid autodetect
/dev/nvme0n1p3        68159488  2000407215   966123864   fd  Linux raid autodetect

Disk /dev/md1: 535 MB, 535822336 bytes, 1046528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/md2: 989.2 GB, 989175545856 bytes, 1931983488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/md0: 34.3 GB, 34325135360 bytes, 67041280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

該教程看起來毫無用處,因為它是關於“增長 RAID-1”,但甚至沒有提到這樣做的最重要的事情,那就是你不能(除非用更大的驅動器重建它)——你能做到的最多要做的是通過向陣列添加另一個驅動器來增加冗餘 - 但陣列仍將具有相同的儲存容量。增加 RAID-1 意味著您的數據會更安全,因為會有更多的副本,但您不會獲得更多的儲存容量。

RAID-1 在陣列中的所有設備上鏡像相同的數據,具有任意數量相同大小驅動器的 RAID-1 陣列的容量是其中一個驅動器的容量(並且 RAID-1 的容量不同大小的驅動器是其中最小的驅動器的容量)。

為了增加您的儲存空間,您將不得不啟動進入救援模式(或進入救援 CD/DVD/USB/等),並對現有的 RAID-1 陣列進行完整的備份和恢復到新的 RAID-5 陣列. 或者,您可以使用 LVM 的 RAID-5 功能而不是 mdadm 的 - LVM在 RHEL 和 Centos 上得到很好的支持和記錄,並且幾乎是這些發行版的預設環境。或者,見下文,也許改用 ZFS。

如果您有另一個 1TB 驅動器(比如機械硬碟而不是另一個 nvme 驅動器),那麼您可以將其用作備份目標。然後使用所有三個 nvme 驅動器創建一個新的 RAID-5 陣列並將所有內容還原到它。

否則,您將不得不使用新的 nvme 驅動器作為備份目標,將所有內容備份到它,然後使用您原來的兩個 nvme 驅動器創建一個降級的RAID-5 陣列,將所有內容還原到它,然後(一旦您測試過系統啟動並在 RAID-5 陣列上工作),將新的 nvme 添加到陣列中。

新的 RAID-5 陣列將具有 2TB(因為具有 N 個驅動器的 RAID-5 陣列的容量是 N-1…3 x 1TB 驅動器在 RAID-5 中將具有 2 x 1TB 的總儲存容量)。

我更喜歡rsync進行備份和恢復,因為如果崩潰或電源故障或某些事情中斷了該過程,您只需重新啟動它,它就會從中斷的地方繼續,而不必從頭開始複製相同的文件之前已經複製了。

在此站點上有許多分步範例說明如何執行此操作,搜尋將數據遷移到新驅動器的問題,特別注意涉及mdadmlvm(或 ZFS)的問題和答案。忽略任何關於使用的內容dd(因為您想要進行基於文件的備份和恢復,而不是磁碟映像的一點副本)。我知道這些年來我已經寫了一些關於這個主題的答案(例如如何遷移到 LVM?以及是否可以將現有分區與文件系統集成?),其他人也有。

完成閱讀後,寫下您需要做的分步計劃。通過周密的計劃,可以避免遷移災難。沒有計劃幾乎肯定會導致災難,尤其是如果您以前從未這樣做過。這些年來,我已經用物理機和虛擬機進行了數百次這樣的遷移,我仍然花時間以點的形式寫下一個計劃,因為我知道如果我不這樣做,我會忘記一些重要的步驟。

如果您可以在您的系統上執行虛擬機,那麼我強烈建議您在 RAID-1 陣列上安裝一個最少安裝 Centos 的虛擬機和一個額外的磁碟來練習遷移,然後再在您的真實驅動器上嘗試遷移。VM 的虛擬磁碟不需要很大,每個幾百 MB 就足夠了……對於最小的作業系統(以及 mdadm、lvm、rsync 和您需要的任何其他工具)來說已經足夠了。這將使計劃真正的遷移變得更加容易,很難計劃您以前從未做過的事情。

多次練習,直到您了解該過程,並知道哪些事情可能會出錯(​​以及如何從中恢復)。您還可以練習不同類型的遷移——例如,從 mdadm RAID-1 到 mdadm RAID-5,以及從 mdadm RAID-1 到 LVM RAID-5 或到 ZFS,以幫助您決定哪種方式最適合您。在您完成第一次設置後製作兩個 RAID-1 虛擬磁碟的副本,讓您自己更輕鬆……這樣您就可以快速輕鬆地將 VM 恢復到其“啟動條件”以進行另一次練習跑。


另一種選擇是使用 ZFS RAIDZ 而不是 RAID-5,這將提供大致相同的儲存容量,但 ZFS 支持透明壓縮,因此高度可壓縮的文件,如文本(例如配置文件、日誌文件、原始碼、markdown 或 TeX 文件、HTML、 XML、json 等),將使用更少的磁碟空間。已經壓縮的文件(例如 PDF 和大多數影片、圖像、音頻格式)將使用與以前相同的空間量。ZFS 還有其他好處,包括錯誤檢測和糾正、快照以及為具有不同屬性(例如壓縮類型、加密、記錄大小等)的不同類型數據創建單獨數據集的能力。

您必須安裝 ZFS dkms 模組和 ZFS 實用程序。這在 Debian 和 Ubuntu 上非常簡單直接,但我從未在 Centos 上做過,所以不知道這會有多困難。我相信會有關於它的部落格文章和教程。

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