Wurzel-Dateisystem mit grub2 verkleinern / verkleinern (dh bevor es gemountet wird)

697
Martin Vincent

Kontext:

  • ein paar entfernte debian 7 32bit server
  • nur über SSH erreichbar
  • mehr als die Hälfte der Festplatten ist leer
  • 1 ganze Festplattenpartition pro Server
  • kleines Wartungsfenster, kann nicht lange heruntergefahren werden
  • ext4 Dateisysteme
  • HINWEIS: Ich entwickle meine Lösung mit einer VirtualBox-VM, aber die Server sind reiner Bare-Metal-Server.

Ziel: Aktualisieren Sie das Betriebssystem auf zerstörungsfreie Weise auf Debian 9+, da die Maschine im Idealfall bis zum Neustart des neuen Betriebssystems aufrechterhalten bleiben muss.


Daher plane ich für jeden Server (andere Vorschläge werden begrüßt), Folgendes zu tun:

  1. Verkleinere die aktuellen deb 7 rootfs mit resize2fs auf etwas weniger als die Hälfte der Partitionsgröße
  2. Verkleinern Sie die Partition, um die Festplatte zu halbieren
  3. Partitionieren Sie den neu freigegebenen Speicherplatz (/, / home, swap) und installieren Sie LVM2
    ( Create VG, LV usw.) und Debian 9

Mein Problem ist, dass resize2fs kann nur schrumpfen ext4 fs IF ausgehängt. Die Idee ist, initrd image oder initramfs zu verwenden, um resize2fs für das nicht gemountete / dev / sda1 während der GRUB2-Bootloading-Sequenz aufzurufen.

Ich habe ein eigenes initrd-Image erstellt, das eine statische resize2fs-Binärdatei und ein Shellskript enthält, das es aufruft (und andere Validierungen durchführt usw.), aber ich habe anscheinend versucht, den richtigen Eintrag in die Datei grub.cfg zu schreiben mounten Sie mein initrd-Image und führen Sie mein Änderungsskript auf dem unmounted / dev / sda1 aus.

Meine Frage lautet also:

Welchen grub.cfg-Menüeintrag muss ich schreiben, um mein benutzerdefiniertes initrd-Image mit meinem /bin/resize.sh-Skript zu laden und dann auszuführen (die /bin/resize.sh)?

2
Was ich zuvor getan habe (und möglicherweise riskant?), Besteht darin, ein temporäres, minimales Dateisystem in einer Ramdisk und Pivot_root zu erstellen, wodurch die Bereitstellung des Datenträgers ohne SSH-Zugriff ermöglicht wird. Wurde vorher verwendet, um den Root-Dateisystemtyp vollständig zu ändern, sodass das Verkleinern funktionieren sollte. Wenn Sie diesen Weg verfolgen wollen, lassen Sie es mich wissen und ich kann es morgen früh aufschreiben. Bob vor 6 Jahren 0
Unabhängig davon, welche Methode Sie verwenden, sollten Sie sicherstellen, dass Sie Backups haben, die auf dem neuesten Stand und wiederherstellbar sind, falls das Schlimmste passiert. Bob vor 6 Jahren 0
Hallo @Bob, in der Tat habe ich über die Verwendung der [Pivot_root-Technik] (http://www.ivarch.com/blogs/oss/2007/01/resize-a-live-root-fs-a-howto.shtml) gelesen Ich fand es etwas riskanter und komplexer (viele Schritte), als nur die Größenänderung von grub vorzunehmen (dh: bevor Partitionen installiert wurden). Ich versuche, es relativ einfach und auch skriptfähig zu halten (dh, wenn möglich, unbeaufsichtigt). Ich würde mich jedoch definitiv dafür interessieren, mehr Informationen über den von Ihnen gewählten Weg zu erhalten. Danke im Voraus. Martin Vincent vor 6 Jahren 0
Ah, ich habe das eine gefunden, von dem aus ich gegründet wurde (https://unix.stackexchange.com/a/227318/33227). Es ist ein ziemlich umfassendes Handbuch (und funktioniert in systemd-Setups, im Gegensatz zu dem, auf das Sie verlinkt haben). Die einzige Änderung, die ich vorgenommen habe, war das Erzeugen der temporären Wurzel mit `debootstrap` anstelle von` cp`ing vorhandenen Dateien. Für meine Zwecke war es hilfreich, eine interaktive Shell zu haben, weil sowohl bei der Installation viele Schritte als auch beim Testen / Validieren vor dem Neustart ausgeführt wurden. Aber natürlich, wenn Sie es lieber mit einer initrd automatisieren möchten, die gleichermaßen gültig ist - ich kann nicht direkt helfen, tut mir leid. Bob vor 6 Jahren 0
Nochmals vielen Dank @Bob für Ihre Antwort. Ich habe es geschafft, dass es mit initrd in etwa den folgenden Schritten funktioniert: 1.Erstellen Sie eine initrd-Image-Datei (entpacken Sie in ~ / initrd eine vorhandene, fügen Sie ein paar Dateien hinzu) . | cpio -o -H newc | gzip -9> /boot/initrd.img-3.2.0-5-486-resize2fs `2. Erstellen Sie einen Eintrag in` / boot / grub / grub.cfg` wie folgt: `menuentry" run_once_resize_fs " ` Martin Vincent vor 6 Jahren 1
Froh das zu hören! Ich muss mir das merken, wenn ich das nächste Mal ein vorhandenes Dateisystem remote ändern möchte. Wenn Sie Ihre Frage unten selbst beantworten könnten, wäre das großartig :) Bob vor 6 Jahren 0

0 Antworten auf die Frage