現在、RAID-1 mdadmアレイに1TBのデータがあります。アレイは、1TBディスクと2TBディスクの1TBパーティションで構成されています。これで、2TB RAID-1アレイの作成に使用したい2番目の1TBディスクを購入しました。
/dev/urandom
この配列のデータはdm-cryptを使用して暗号化されているため、データを入れる前に各ディスクをデータで上書きしたいと思います。
問題は、この2TB RAID-1アレイを作成し、現在1TB RAID-1アレイに1TBのデータを保持しながら、各ディスクを任意のデータで安全に上書きできるかどうかです。
要約すると、1 TBディスク2つと2TBディスク1つがあります。ミラーの片側は2つの1TBディスクで構成され、ミラーのもう一方は2TBディスク全体で構成される2TB RAID-1アレイを作成したいと思います。また、これらのディスクのみを使用して1TBのデータを保持しながら、各ディスクを任意のデータで上書きできるようにしたいです。
答え1
適用範囲に関しては各ランダムなデータを含むディスクは重複します。新しい暗号化されたRAIDを構築しているので、再同期はとにかくすべてを上書きします。
上書き方法は/dev/urandom
非常に遅く、テラバイトを消去しようとする人は時間がかかりすぎて途中でキャンセルすることがよくあります。任意のキーでデバイスを暗号化してから削除する方が/dev/zero
はるかshred -n 1
に高速です。したがって、ディスクにランダムなデータが必要な場合は、代わりにこの方法を使用することをお勧めします。
次に、RAIDに対して次のことを行います。 (loop2
この例では2TBディスク)
新しい1TBディスクパーティションをRAID-1に追加します。同期が完了するまで待ちます。。これにより、1TBのデータが3つのディスクにまたがる可能性があります。
$ 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はまだ予約されています。重複2つの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
このパーティションを使用して、2番目のデバイス用
missing
の新しいRAID-1アレイを作成します。 2番目のデバイスは後で追加される予定です。また、現在のサイズは限られており、現在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(暗号化されていない)で重複します。ただし、この時点で新しいRAID 1に2x1TBディスクを追加するには、冗長性を破る必要があります。
$ mdadm --stop /dev/md99 mdadm: stopped /dev/md99
時間を無駄にしたい場合は、この時点で2x1TBディスクを消去することもできます。 RAID-1 は 2 TB ディスクのランダムデータを 1 TB ディスクに同期するため、これは不要です。
$ shred -n 1 /dev/loop0 & $ shred -n 1 /dev/loop1 & $ wait # for shred $ parted /dev/loop0 $ parted /dev/loop1
linear
0
必要に応じてmdadmを使用するか、2x1TBを組み合わせてください。$ 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.
ああ、終わりました。
編集する:
/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アレイを最初にビルドする必要があり、ファイルに最初にリストされている場合に発生します。
答え2
まずはバックアップしてください。
私の答えは、sdaが2TBディスクで、sdbとsdcが1TBディスクであると仮定しています。 sdcは新しい空の1TBディスクです。現在、sda1とsdb1のイメージがあります。 sda2は使用されません。 (必要に応じて番号を変更してください)。
次の方法で好きなところに行けると思います。
echo repair > /sys/block/md0/md/sync_action
(またはミラー付きのすべてのMDデバイスを介して)フルアレイの整合性チェック/修復を実行します。ビューcat /proc/mdstat
;完了するまでしばらく(数時間)お待ちください。これは不良ブロックなどを隠さないようにするためです。- 新しい空のディスクを拭き取ります(アレイチェックと同時に実行する)。
- イメージからsda1を削除します。正しいディスクを落としたことを確認してください。この記事を読む前に必ずバックアップしてください。拭き取ってください
/dev/sda
(ランダムに塗りつぶす)。パーティションを分割すると、/dev/sda
パーティションが1つだけ残ります(/boot
1つがある場合は2つ)。また、再パーティションするときに少しの空き領域を残す必要があるかもしれません。このスペースがsdbとsdcの場合、RAID 10よりも大きくないことを確認する必要があります。 sda1
新しい画像を使用して作成しますmissing
。私はこれがだと仮定していますmd1
。続いてそれにLUKS(暗号化)を設定してmd1_crypt
。- 古い画像のファイルを新しい画像にコピーします。
- 古いファイルシステムをアンマウントし、md0(以前のアレイ)を停止します。
- /dev/sdb を削除します。
- /dev/sdcがクリアされていることを確認してください。
- /dev/sdb1 および /dev/sdb2 に RAID0 アレイを作成します。呼ぶよ
md2
- (新しいミラー)
md2
に(RAID0)を追加します。md1
基本的なアイデアは、次に切り替えることです。
sda
sdb |
\ \|/
---> RAID10 -> RAID1 ---> LUKS/dmcrypt ---> filesystem
/
sdc
追加のアレイ(3方向ミラー)が必要な場合があります/boot
。 dmcryptとファイルシステムの間または独自のアレイにLVMを配置することで、スワップスペースを解放できます。