web-dev-qa-db-ja.com

RAID1を縮小して、新しいRAID1パーティション用にHDDのスペースを解放します

しばらく前にウェブサーバーをセットアップして間違えました。私は以下を持っています:

/dev/md0 swap  (made from sda1 and sdb1)
/dev/md1 /boot (made from sda2 and sdb2)
/dev/md2 /     (made from sda3 and sdb3)
/dev/md3 /home (made from sda5 and sdb5)

(sda4とsdb4は拡張パーティションです)

RAIDのセットアップ中にタイプミスし(インストーラースクリプトを使用していました)、次のサイズになりました。

swap   10GB
/boot  500MB
/      50GB
/home  The Rest (About    1,8TB)

約80GBのファイルを/ var/wwwにアップロードし、転送が途中でクラッシュするまで、すべてが正常に機能しました。すべてがおかしくなりました。しばらくすると、MySQLサーバーをクラッシュさせる/パーティションを埋めただけで、/を小さくするのは馬鹿げていることにすぐに気付きました(または、少なくとも/ var/wwwを別のパーティションに配置する必要がありました)。さて、サーバーはかなり長い間使用されており、私は本当にすべてを再設定することに興味がありません。念のため、すべてをバックアップしましたが、ご存知のとおり、サーバーのセットアップは作業であり、バックアップの使用中にサーバーを既知の状態にセットアップするのはさらに作業が必要です。だから私は問題を解決したいと思います。

私が今やりたいことは次のとおりです。

  • / homeパーティションを約1TBに縮小します
  • 現在空き領域に新しいパーティションを追加します
  • / var/wwwに移動します
  • その場所に新しいパーティションをマウントします

だから、私の計画は次のとおりでした:

  1. / homeをアンマウント
  2. / dev/md3でe2fsckを実行します
  3. サイズ変更2fs/dev/md3を約990GBのサイズに変更して、セキュリティマージンとして10GBにします。
  4. mdadmは/ dev/md3を1TBにサイズ変更します
  5. サイズを指定せずにresize2fsを使用して、新しいmdで使用可能な最大サイズに拡大します

(これまでのところ、これまでのすべてが機能しました)

  1. 空き領域に新しいパーティションsda/b6を追加します
  2. それらを襲撃する
  3. / mntにマウントします
  4. / var/wwwにコピー
  5. 念のため/ var/wwwと/ mntを比較します
  6. / var/wwwのrm-rf *
  7. / dev/md4を/ var/wwwにマウントし、対応するエントリをfstabに追加して永続的にします。

私は今、立ち往生しています。 6:レイドが縮小され、/ dev/md3のサイズは約1TBで、すべてが完全に正常ですが、パーティション/ dev/sda5と/ dev/sdb5はまだ古いサイズです。 w何が恋しかった?パーティションはmdで縮小されるべきではありませんか?レイドを壊さずにそれらを縮小するにはどうすればよいですか?

1
damaltor

RAIDを縮小しても、パーティションは縮小されません。手動で行う必要があります。

MD RAIDの最初にRAIDスーパーブロックが含まれている可能性があるため、これは100%簡単ではありませんOR最後に)。

RAIDスーパーブロックが最初(バージョン1以降)にある場合は、簡単なはずです:fdiskまたは選択して削除するツール(はい:削除を意味します)sda5開始ブロックに注意した後次に、同じ開始ブロックと十分なスペースで再作成します。その後、残りのスペースにsda6を作成できます。 sdbでプロセスを繰り返す前に、再起動してすべてが計画どおりに機能することを確認することをお勧めします。

RAIDスーパーブロックが最後(バージョン0.9)にある場合、状況は非常に乱雑になります。mdadm --detail、次にmdadm --stop、最後にmdadm --create ... --metadata=1.0を使用して、デバイスの先頭に移動し、次に、上記のように進めます。

[〜#〜]編集[〜#〜]

私は(私が間違って明確だと思っていたので)最初にmdadm --stop ...する必要があることを指摘しませんでした:終了すると、fdiskはカーネルにパーティションテーブルを再読み込みするように指示します。最新ではないとして襲撃の。

2
Eugen Rieck

残念ながら、これは難しいようです。 MDブロックデバイスは、基盤となるディスク上のパーティション(およびこれらのディスクは適切なサイズである必要があります)と連続したスペースブロックを使用します。

注:この種のディスク操作は危険です。最初にバックアップします。

ホームディレクトリはwwwディレクトリの後にあるため、縮小するとディスクの最後のスペースが解放されますが、ディスクの最初にスペースが必要です。 gpartedを使用して/ sda3、sda5、sdb3、およびsdb5をディスクの最後に移動できる場合がありますが、そのツールにはあま​​り運がありませんでした。

私がそれを行う方法(以下の理由で最初から始めない場合)は、fdiskを使用して/ homeを一時的に/ wwwに(またはすでに大きすぎる場合は外部ストレージに)移動し、sda3,5とsdb3,5を削除します。 sda2とsdb2を削除し、同じ開始ブロックで再作成しますが、後で終了ブロックでパーティションタイプを設定して(RAIDの場合はfdに)、sda3,5とsdb3,5(または単にsdb3-)を再作成します。残りのスペースで4つ以上のパーティションが必要です。

この後、RAIDを再起動して拡張し、md3、/ homeを再作成して、データをコピーして戻します。 fstabも変更する必要があります。

そうは言っても、私は2つのRAIDパーティションだけを使用してやり直すことを真剣に検討したいと思います。小さなパーティションはブート用で、大きなパーティションは他のすべてのものです。次に、大きなRAIDパーティションの上でLVMを使用して、/ www、/ homeなどのブロックに分割します。LVMを使用すると、基盤となるジオメトリに関係なくパーティションのサイズを変更したり、ディスクを追加したり、スナップショットを作成したりできるなど、柔軟性が高くなります。 。

1
davidgo