Raid
我可以用一個 2 TB 磁碟和兩個 1 TB 磁碟創建一個 2 TB RAID-1 陣列,同時保留 1 TB 數據嗎?
我目前在 RAID-1 mdadm 陣列上有 1 TB 的數據。該陣列由一個 1 TB 磁碟和一個 2 TB 磁碟上的 1 TB 分區組成。我現在購買了第二個 1 TB 磁碟,我想用它來創建一個 2 TB RAID-1 陣列。
該陣列上的數據將使用 dm-crypt 加密,因此我想
/dev/urandom
在將數據放入每個磁碟之前用數據覆蓋每個磁碟。問題是我是否可以創建這個 2 TB RAID-1 陣列,並用隨機數據安全地覆蓋每個磁碟,同時保留我目前 1 TB RAID-1 陣列上的 1 TB 數據。
回顧一下:我有 2 x 1 TB 磁碟和 1 x 2 TB 磁碟。我想創建一個 2 TB RAID-1 陣列,其中鏡像的一側由兩個匯集在一起的 1 TB 磁碟組成,而鏡像的另一側是整個 2 TB 磁碟。另外,我想只使用這些磁碟保留 1 TB 的數據,同時仍然能夠用隨機數據覆蓋每個磁碟。
至於用隨機數據覆蓋*每個磁碟,這是多餘的。*由於您要建構一個新的加密 RAID,因此重新同步無論如何都會覆蓋所有內容。
至於覆蓋的方法,
/dev/urandom
速度非常慢,嘗試使用它來擦除 TB 的人通常會在中途取消,因為它需要的時間太長。用隨機密鑰加密設備然後用它擦除它/dev/zero
會更快,而且shred -n 1
速度更快。因此,如果您的磁碟上必須有隨機數據,我建議您改用這些方法。現在對於您的 RAID,我將執行以下操作:(在此範例
loop2
中是 2TB 磁碟)
- 將新的 1TB 磁碟分區添加到 RAID-1。等到同步完成。這樣,您的 1TB 數據跨越三個磁碟。
$ mdadm /dev/md99 --grow --raid-devices=3 --add /dev/loop1p1 mdadm: added /dev/loop1p1 raid_disks for /dev/md99 set to 3 $ cat /proc/mdstat md99 : active raid1 loop1p1[2] loop2p1[1] loop0p1[0] 100224 blocks super 1.2 [3/3] [UUU]
- 從 RAID-1 陣列中移除 2TB 磁碟。您的 1TB 仍冗餘保留在兩個 1TB 磁碟上。
$ mdadm /dev/md99 --fail /dev/loop2p1 mdadm: set /dev/loop2p1 faulty in /dev/md99 $ mdadm /dev/md99 --remove /dev/loop2p1 mdadm: hot removed /dev/loop2p1 from /dev/md99 $ mdadm /dev/md99 --grow --raid-devices=2 raid_disks for /dev/md99 set to 2 $ cat /proc/mdstat md99 : active raid1 loop1p1[2] loop0p1[0] 100224 blocks super 1.2 [2/2] [UU]
- 擦除 2TB 磁碟
$ shred -n 1 /dev/loop2
- 將磁碟重新分區為 2TB。請注意,如果您沒有其他引導設備,則需要一個引導分區,因為您無法從加密設備引導。
$ parted /dev/loop2
- 使用該分區創建一個新的 RAID-1 陣列,並
missing
為第二個設備。稍後將添加第二個設備。此外,目前大小將受到限制,稍後會增加,因為我們目前不確定 2x1TB 磁碟的大小。(如果您確定,請隨意在此處使用不同的大小,但如果您將 2x1TB 設置得太大,則以後將無法添加)。$ mdadm /dev/md42 --create --level=1 --raid-devices=2 --size=1000G /dev/loop2p1 missing mdadm: largest drive (/dev/loop2p1) exceeds size (102400K) by more than 1% Continue creating array? yes mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md42 started. $ cat /proc/mdstat md42 : active raid1 loop2p1[0] 102400 blocks super 1.2 [2/1] [U_] md99 : active raid1 loop1p1[2] loop0p1[0] 100224 blocks super 1.2 [2/2] [UU]
- 加密它,mkfs,複製數據(使用你喜歡的密碼和設置,LVM,文件系統,複製方法,…)
$ cryptsetup luksFormat /dev/md42 $ cryptsetup luksOpen /dev/md42 luksmd42 $ mkfs.ext4 /dev/mapper/luksmd42 $ mount /dev/md99 /mnt/old $ mount /dev/md42 /mnt/new $ rsync -aAHSX /mnt/old/. /mnt/neW/. $ umount /mnt/old /mnt/new
- 現在您的數據在舊 RAID 1(未加密)和新的非冗餘 RAID 1(加密)上是冗餘的。但是此時您必須中斷冗餘才能將 2x1TB 磁碟添加到新的 RAID 1。
$ mdadm --stop /dev/md99 mdadm: stopped /dev/md99
- 此時,如果您想浪費時間,也可以擦除 2x1TB 磁碟。這不是必需的,因為 RAID-1 會將隨機數據從 2TB 磁碟同步到 1TB 磁碟。
$ shred -n 1 /dev/loop0 & $ shred -n 1 /dev/loop1 & $ wait # for shred $ parted /dev/loop0 $ parted /dev/loop1
- 根據您的喜好,使用 mdadm 或
linear
或組合 2x1TB 。0
$ mdadm /dev/md43 --create --level=0 --raid-devices=2 /dev/loop0p1 /dev/loop1p1 $ cat /proc/mdstat md43 : active raid0 loop1p1[1] loop0p1[0] 199680 blocks super 1.2 512k chunks md42 : active raid1 loop2p1[0] 102400 blocks super 1.2 [2/1] [U_]
- 將其添加到 RAID 1 並同時增長 RAID 1。
$ mdadm /dev/md42 --add /dev/md43 mdadm: added /dev/md43 $ mdadm /dev/md42 --grow --size=max mdadm: component size of /dev/md42 has been set to 199616K $ cat /proc/mdstat md43 : active raid0 loop1p1[1] loop0p1[0] 199680 blocks super 1.2 512k chunks md42 : active raid1 md43[2] loop2p1[0] 199616 blocks super 1.2 [2/2] [UU]
- 增加 cryptsetup 和文件系統。
$ cryptsetup resize luksmd42 $ resize2fs /dev/mapper/luksmd42 resize2fs 1.42.7 (21-Jan-2013) Resizing the filesystem on /dev/mapper/luksmd42 to 197568 (1k) blocks. The filesystem on /dev/mapper/luksmd42 is now 197568 blocks long.
Aaand 你完成了。
編輯:
/etc/mdadm.conf
這是一個使用此設置的範例(用於mdadm --detail --scan
獲取起點):ARRAY /dev/md43 metadata=1.2 UUID=b9f590d7:9984dad4:cb75131b:63bca165 ARRAY /dev/md42 metadata=1.2 UUID=3a70188d:9ecacda7:ac715e16:9402fc55
尤其:
- 沒有
DEVICE
線(如果你必須擁有它們,請確保它包括md*
設備)- 行的順序
ARRAY
很重要 - 必須首先建構 RAID0 陣列,如果它在文件中首先列出,就會發生這種情況。