アレイの新しいパーティションに別のLinuxベースのオペレーティングシステムをインストールできるように、mdadm RAID-0アレイのオペレーティングシステムのパーティションを縮小したいと思います。

アレイの新しいパーティションに別のLinuxベースのオペレーティングシステムをインストールできるように、mdadm RAID-0アレイのオペレーティングシステムのパーティションを縮小したいと思います。

数年前、このガイドに従ってアーチインストールを設定したときにRaid-0 mdadm raidアレイを設定しました。https://wiki.archlinux.org/title/RAID#インストールまた、インターネット検索を使用して正確な設定に合わせて動作するように他の場所から要求します。

私のオペレーティングシステムに割り当てられているraid-0アレイの部分を縮小し、空き領域を使用して新しいパーティションを作成し、そのパーティションに別のLinuxオペレーティングシステムをインストールしたいと思います。

このオペレーティングシステムのインストール中にアレイをリセットする必要がありますか?私が理解したのは、これがソフトウェア攻撃です。私のOSパーティションにアレイをロードするためのいくつかの設定があったことを覚えています。

mdadm --grow /dev/md127 --size=3T(他の400GBにOSをインストールできるように3.4Tから3Tに縮小)を試しました。これにより、次のエラーが発生します。mdadm: Cannot set device size in this type of array.

私はfdiskのような他のソフトウェアを試してみましたが、私は誤って私のアレイを壊す作業を書いたくありません。

答え1

私はRAID-0をあまり使用しない(まったく使用していない)ので、実際にmdadmがRAID-0の縮小をサポートしていない理由はわかりません。もう一つの方法は配列を再作成するようですが、mdadm --createこの機能を使用するには、ディスクの順序、データオフセット、レベル、レイアウトなどを正しく指定する必要があります。

エラーメッセージ自体は一般的なメッセージであり、特にRAID-0にはまったく言及していません(実際にComponent size change is not supported for RAID0ここに記載されていないコードには別のメッセージがあります)。マニュアルページにはこれに関する言及がありますRAID 0 array size cannot be changed

--layout=parity-last一時的にRAID-0をRAID-4に変換(またはRAID-5に変換を使用)して、間接的にこれを実行できます。 RAID-0とRAID-4(パリティディスクの欠落)が同じであるため、この変換はディスクのデータを変更せずにすぐに行う必要があります。その後、md RAID-4/5/6がサポートされ、縮小が機能します。

しかし、これをテストした人はほとんどいないと確信しています。したがって...まだ少し危険があるかもしれません。


以下は、レベルとレイアウトの変更の例です。

RAID-0設定:

# head -c 100M /dev/urandom > a.img
# losetup --find --show a.img
/dev/loop0

# head -c 100M /dev/urandom > b.img
# losetup --find --show b.img
/dev/loop1

# mdadm --create /dev/md42 --level=0 --raid-devices=2 /dev/loop0 /dev/loop1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md42 started.

# head -c 42M /dev/md42 | md5sum
fff6e815ae3979b190e1a84f1b9fd776  -

RAID-4でRAID-0を縮小します。

# mdadm --grow /dev/md42 --size=21M
mdadm: Cannot set device size in this type of array.

# mdadm --grow /dev/md42 --level=4
mdadm: level of /dev/md42 changed to raid4
# mdadm --grow /dev/md42 --size=21M
mdadm: component size of /dev/md42 has been set to 21504K
# mdadm --grow /dev/md42 --level=0
mdadm: level of /dev/md42 changed to raid0

# echo 3 > /proc/sys/vm/drop_caches
# md5sum /dev/md42
fff6e815ae3979b190e1a84f1b9fd776  /dev/md42

データオフセットを考慮しないため、--size各コンポーネントは少なくともコンポーネントサイズにデータオフセットを加えた値を維持する必要があります。

# mdadm --examine /dev/loop0
[…]
Avail Dev Size : 43008 sectors (21.00 MiB 22.02 MB)
Data Offset : 4096 sectors

したがって、この例では、デバイスサイズは少なくとも43008 + 4096 = 47104セクタでなければなりません。配列が大きい場合は、mdadmで選択したデフォルトのデータオフセットもはるかに大きくなる可能性があるため、パーティションを縮小しすぎないように注意してください。

また、このアプローチが機能しない可能性があるraid0(異なるサイズのデバイスを使用)についていくつかの特別なケースがあることに注意してください。この回答では、mdadm 1.2メタデータと同じサイズのドライブを使用すると想定しています。

関連情報