Verkleinern eines RAID1, um Speicherplatz auf der Festplatte für eine neue RAID1-Partition freizugeben

382
damaltor

Ich habe vor einiger Zeit einen Webserver eingerichtet und einen Fehler gemacht. Ich habe folgendes:

/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 und sdb4 sind die erweiterten Partitionen)

Ich habe mich beim Einrichten des RAIDs vertippt (ich habe ein Installationsskript verwendet) und erhielt die folgenden Größen:

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

Alles hat gut geklappt .. bis ich etwa 80 GB Dateien in / var / www hochgeladen habe und die Übertragung zur Hälfte abgestürzt ist. Alles wurde verrückt. Nach einer Weile fand ich heraus, dass ich einfach die / -Partition gefüllt hatte, die den MySQL-Server zum Absturz brachte, und sofort erkannte, dass es so dumm war, / so klein zu machen (oder zumindest hätte ich / var / www auf eine andere Partition setzen sollen). Nun, der Server ist nun schon einige Zeit in Gebrauch und ich bin wirklich nicht daran interessiert, alles neu einzurichten. Ich habe alles gesichert, nur für den Fall, aber wie Sie alle wissen, ist das Einrichten eines Servers eine Arbeit und das Einrichten eines bekannten Zustands während der Verwendung von Sicherungen ist noch mehr Arbeit. so möchte ich das problem beheben.

Was ich jetzt machen möchte, ist folgendes:

  • Verkleinern Sie die / home-Partition auf etwa 1 TB
  • Fügen Sie eine neue Partition im jetzt freien Speicherplatz hinzu
  • bewegen Sie sich über / var / www
  • Mounten Sie die neue Partition an diesem Ort

Mein Plan war also Folgendes:

  1. unmount / home
  2. Führen Sie einen e2fsck für / dev / md3 aus
  3. resize2fs / dev / md3 auf eine Größe von etwa 990 GB, um 10 GB als Sicherheitsspanne zu haben
  4. mdadm Größe / dev / md3 auf 1 TB ändern
  5. resize2fs, ohne eine Größe zu benennen, um sie auf das Maximum des neuen MD zu vergrößern

(soweit so gut, alles hat bis jetzt funktioniert)

  1. Neue Partitionen hinzufügen sda / b6 im jetzt freien Speicherplatz
  2. mache sie zu einem Überfall
  3. mounten Sie es nach / mnt
  4. Kopieren über / var / www
  5. diff / var / www und / mnt, nur um sicher zu gehen
  6. rm -rf * in / var / www
  7. Mounten Sie / dev / md4 in / var / www und fügen Sie einen entsprechenden Eintrag in fstab hinzu, um ihn dauerhaft zu machen.

Ich stehe jetzt bei nein fest. 6: Der Schlachtzug ist verkleinert, / dev / md3 hat eine Größe von etwa 1 TB, alles ist perfekt, aber die Partitionen / dev / sda5 und / dev / sdb5 sind immer noch die alte Größe. Was habe ich vermisst? Sollten die Partitionen nicht mit dem MD geschrumpft sein? Wie kann ich sie verkleinern, ohne den Überfall zu brechen?

0

2 Antworten auf die Frage

1
Eugen Rieck

Durch das Verkleinern des RAID werden die Partitionen nicht verkleinert. Sie müssen dies manuell tun.

Dies ist nicht zu 100% trivial, da Ihr MD-Raid möglicherweise am Anfang ODER am Ende einen RAID-Superblock enthält.

Wenn der RAID-Superblock am Anfang ist (Version 1 und höher), sollte es ein Kinderspiel sein: fdiskoder das Werkzeug Ihrer Wahl und löschen (ja: ich meine löschen), sda5 nachdem Sie den Startblock notiert haben, erstellen Sie es dann mit Gleicher Startblock und genügend Platz. Sie können dann sda6den verbleibenden Platz erstellen . Ich empfehle Ihnen einen Neustart, um sicherzustellen, dass alles wie geplant funktioniert, bevor Sie den Vorgang mit wiederholen sdb.

Wenn der RAID-Superblock am Ende ist (Version 0.9), werden die Dinge sehr unordentlich - ich empfehle, Sie verwenden mdadm --detail, dann mdadm --stopund schließlich mdadm --create ... --metadata=1.0, um ihn an den Anfang des Geräts zu verschieben und dann wie oben beschrieben vorzugehen.

BEARBEITEN

Ich habe nicht darauf hingewiesen (da ich zu Unrecht davon ausgegangen bin, dass es eindeutig ist), dass Sie mdadm --stop ...zuerst fdiskFolgendes tun müssen : Wenn Sie das Programm beenden, weist es den Kernel an, die Partitionstabelle erneut zu lesen, was eine Hälfte des Überfalls als nicht aktuell markiert.

Nur um sicher zu gehen, dass Sie die Partition löschen / hinzufügen, nachdem Sie sie aus dem Schlachtzug entfernt haben? damaltor vor 6 Jahren 0
(Auch die Version ist 1.2, also sollte der Block nahe am Anfang sein) damaltor vor 6 Jahren 0
Ich meine auf jeden Fall **, dass es nicht aus dem RAID entfernt wird - es wird lediglich die Partitionsgröße geändert, sodass nach dem Neustart die wiederhergestellte Partition mit den vorhandenen RAID-Daten verwendet wird. Superblock 1.2 sollte in Ordnung sein. Eugen Rieck vor 6 Jahren 0
Ich tat es jetzt, ich löschte und machte die Partition neu. Nach dem Neustart wurde das Gerät als aus dem Raid entfernt markiert, daher habe ich es erneut hinzugefügt. Jetzt synchronisieren, wird der Fortschritt in den Kommentaren hier aktualisiert. damaltor vor 6 Jahren 0
Die erste Resynchronisation ist abgeschlossen. Ich habe jetzt die Größe der zweiten Partition geändert, die dann auch aus dem Raid geworfen wurde, also habe ich sie wieder hinzugefügt und sie werden jetzt wieder synchronisiert ... wieder. Ich bin mir ziemlich sicher, dass es einen schnelleren Weg geben würde, aber dies scheint den Trick zu vollbringen. wird zurückkommen, nachdem md und das Dateisystem danach erneut erweitert wurden. damaltor vor 6 Jahren 0
Nach dem Warten auf die Resync-Funktion auf beiden Festplatten funktioniert nun alles wieder einwandfrei. Die Partition ist nun verkleinert und ich habe eine neue dahinter gemacht. danke für die Hilfe! damaltor vor 6 Jahren 0
Ich habe meine Antwort bearbeitet: Sie hätten das Array stoppen müssen, um eine Neuerstellung zu vermeiden. Entschuldigung dafür, ich nahm an, dass dies klar war, aber natürlich nicht Eugen Rieck vor 6 Jahren 0
1
davidgo

Leider ist das schwieriger als es scheint. Die MD-Blockgeräte verwenden Partitionen auf den zugrunde liegenden Festplatten - und diese Platten müssen die richtige Größe haben - und zusammenhängende Speicherblöcke.

HINWEIS: Festplattenoperationen dieser Art sind riskant. Zuerst sichern.

Da sich das Basisverzeichnis nach dem Verzeichnis www befindet, wird durch das Verkleinern Speicherplatz am Ende der Festplatte frei. Sie benötigen jedoch Speicherplatz am Anfang der Festplatte. Möglicherweise können Sie gparted verwenden, um die Dateien / sda3, sda5, sdb3 und sdb5 an das Ende der Festplatte zu verschieben, aber ich habe mit diesem Tool nicht viel Glück gehabt.

Die Art und Weise, wie ich es tun würde (wenn ich nicht aus verschiedenen Gründen von vorne anfangen würde), wäre ein temporärer Umzug von / home auf / www (oder auf einen externen Speicher, wenn es bereits zu groß ist), dann mit fdisk löschen, sda3,5 und sdb3,5 löschen Löschen Sie sda2 und sdb2 und erstellen Sie sie mit demselben Startblock, aber einem späteren Endblock. Stellen Sie dabei sicher, dass der Partitionstyp festgelegt ist (für RAID auf fd), und erstellen Sie dann sda3,5 und sdb3,5 (oder einfach nur sdb3 - wenn Sie sicher sind, dass Sie gewonnen haben. ' Ich brauche mehr als 4 Partitionen) mit dem verbleibenden Speicherplatz.

Starten Sie danach das RAID neu und erweitern Sie es, erstellen Sie dann md3 / home neu und kopieren Sie die Daten zurück. Sie müssen auch fstab ändern.

Das heißt, ich würde ernsthaft überlegen, mit nur zwei RAID-Partitionen neu zu beginnen - eine kleine für den Start und eine große für alles andere. Ich würde dann LVM auf der großen RAID-Partition verwenden, um diese in Blöcke wie / www, / home aufzuteilen. Die Verwendung von LVM bietet viel Flexibilität, einschließlich der Möglichkeit, Partitionen unabhängig von der zugrunde liegenden Geometrie zu ändern, Festplatten hinzuzufügen und Snapshots zu erstellen .

Danke für deine Gedanken. Warum brauche ich Platz am Anfang der Festplatte? Gibt es eine Notwendigkeit, die neue Partition am Anfang zu haben? Warum wäre es nicht möglich, die Partition für / var / www nach / home zu setzen? Wie soll ich die Partition verkleinern? Muss ich die Partition zuerst aus dem traid entfernen / entfernen, die Größe ändern, sie wieder einfügen? damaltor vor 6 Jahren 0
"Der Anfang der Platte" war schlecht formuliert. Wenn Sie Abstraktionsebenen wie LVM ignorieren, können Sie Partitionen nur erweitern, indem Sie sie am Ende der Partition hinzufügen, da alle großen Dateisysteme meiner Meinung nach mit einem Index vergleichbar sind (der Dateinamen und Positionen enthält) ) am Anfang der Partition. Wenn Sie am Anfang eine Partition auslagern, befindet sich der Index plötzlich an der falschen Stelle. davidgo vor 6 Jahren 0
Die Reihenfolge der Installation von / var / www und / home ist irrelevant - meine Lösung wurde so konzipiert, dass Speicherplatz an der richtigen Stelle auf der Festplatte frei wird. davidgo vor 6 Jahren 0
Nun, ich wollte die Partition verkleinern, also ist es wahrscheinlich in Ordnung. Trotzdem danke, du hast mir einen Haufen geholfen. damaltor vor 6 Jahren 0