1TBのデータを保持しながら、2TBディスク1個と1TBディスク2個で2TB RAID-1アレイを作成できますか?

1TBのデータを保持しながら、2TBディスク1個と1TBディスク2個で2TB RAID-1アレイを作成できますか?

現在、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
    
  • linear0必要に応じて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は使用されません。 (必要に応じて番号を変更してください)。

次の方法で好きなところに行けると思います。

  1. echo repair > /sys/block/md0/md/sync_action(またはミラー付きのすべてのMDデバイスを介して)フルアレイの整合性チェック/修復を実行します。ビューcat /proc/mdstat;完了するまでしばらく(数時間)お待ちください。これは不良ブロックなどを隠さないようにするためです。
  2. 新しい空のディスクを拭き取ります(アレイチェックと同時に実行する)。
  3. イメージからsda1を削除します。正しいディスクを落としたことを確認してください。この記事を読む前に必ずバックアップしてください。拭き取ってください/dev/sda(ランダムに塗りつぶす)。パーティションを分割すると、/dev/sdaパーティションが1つだけ残ります(/boot1つがある場合は2つ)。また、再パーティションするときに少しの空き領域を残す必要があるかもしれません。このスペースがsdbとsdcの場合、RAID 10よりも大きくないことを確認する必要があります。
  4. sda1新しい画像を使用して作成しますmissing。私はこれがだと仮定していますmd1。続いてそれにLUKS(暗号化)を設定してmd1_crypt
  5. 古い画像のファイルを新しい画像にコピーします。
  6. 古いファイルシステムをアンマウントし、md0(以前のアレイ)を停止します。
  7. /dev/sdb を削除します。
  8. /dev/sdcがクリアされていることを確認してください。
  9. /dev/sdb1 および /dev/sdb2 に RAID0 アレイを作成します。呼ぶよmd2
  10. (新しいミラー)md2に(RAID0)を追加します。md1

基本的なアイデアは、次に切り替えることです。

                     sda
sdb                   |
    \                \|/
     ---> RAID10 -> RAID1 ---> LUKS/dmcrypt ---> filesystem
    /
sdc

追加のアレイ(3方向ミラー)が必要な場合があります/boot。 dmcryptとファイルシステムの間または独自のアレイにLVMを配置することで、スワップスペースを解放できます。

関連情報