Wie kann ich eine LUKS-Partition verkleinern, was bewirkt "Cryptsetup Resize"?

14

Ich bin dabei, die Größe einer LUKS-verschlüsselten Partition zu ändern, die ein einzelnes ext4-Dateisystem enthält (kein LVM oder so). In den häufig gestellten Fragen zu Cryptsetup wird empfohlen, die alte Partition zu entfernen und neu zu erstellen, aber das hört sich nach viel Zeitverschwendung an. Daher möchte ich manuell vorgehen und die Größe der Partition sorgfältig ändern.

Bisher denke ich, dass ich Folgendes tun muss:

  1. Erstellen Sie eine (verschlüsselte) Sicherung des Dateisystems. Wichtig! Sie sind nicht der erste, der Ihre Daten verliert, während Sie die folgenden Aufgaben ausführen.
  2. Hängen Sie das vorhandene ext4-Dateisystem aus (z. B. durch Booten von einer Live-CD). Wenn Sie von einer Live-CD booten, hängen Sie die verschlüsselte Partition mit eincryptsetup luksOpen /dev/sdXY ExistingExt4
  3. Ändern Sie die Größe des vorhandenen ext4-Dateisystems .
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. Schließen Sie die LUKS-Partition mit cryptsetup luksClose ExistingExt4
  6. Verkleinern Sie die Partitionsgröße.

Sind die obigen Schritte korrekt?

Wofür soll ich mich$SECTORS in Schritt 4 entscheiden ? Ist dieser Schritt überhaupt nötig? Die cryptsetupHandbuchseite beschreibt die resizeOption nicht wirklich :

resize <name>
    resizes an active mapping <name>.
    If --size (in sectors) is not specified, the size of the underlying
    block device is used.

Wenn ich die ext4-Partition um 15 GiB verkleinere, kann ich dann davon ausgehen, dass 15 GiB mithilfe von aus der vorhandenen Partition entfernt werden können parted? Wenn ja, wie geht das? Meine Festplatte ist GPT-partitioniert, wenn das wichtig ist.

Lekensteyn
quelle
1
Ich habe mich schon immer über die Option zum Ändern der Größe bei Cryptsetup gewundert. Sogar in der FAQ zu Cryptsetup heißt es: "2.15 Kann ich die Größe einer dm-crypt- oder LUKS-Partition ändern? Ja, Sie können dies, da weder dm-crypt noch LUKS die Partitionsgröße speichern." Also, warum hat es eine Option zum Ändern der Größe, wenn es nichts mit der Partitionsgröße zu tun hat ...
Dago

Antworten:

15

Führen Sie fscknach dem Sichern (Schritt 1) ​​und dem Aufheben der Bereitstellung (zwischen 2 und 3) Folgendes aus, um sicherzustellen, dass das Dateisystem fehlerfrei ist:

e2fsck -f /dev/mapper/ExistingExt4

Ansonsten sind die Schritte in Ordnung.

Was soll ich für $ SECTORS wählen? Ist dieser Schritt überhaupt nötig?

Dieser Schritt ist notwendig, da sonst die Partition weiterhin auf der alten Seite angezeigt wird. Dies wird mit Nautilus bestätigt, obwohl resize2fsdie LUKS-Partition nach dem Ändern der Größe mit der alten Größe angezeigt wurde. Nach dem Rennencryptsetup resize wird die richtige Nummer angezeigt. Dieser Schritt ist nicht erforderlich. Es wirkt sich nur auf den aktuellen Größenstatus aus, der im Dateibrowser angezeigt wird. Nach dem Ändern der Größe und dem Schließen / Öffnen der Partition wird die Nummer wiederhergestellt. Wenn Sie also die LUKS-Partition wie später gezeigt schließen, wird dies obsolet.

$SECTORSkann durch Betrachten der Ausgabe von bestimmt werden cryptsetup status ExistingExt4:

    / dev / mapper / ExistingExt4 ist aktiv.
      Typ: LUKS1
      Chiffre: aes-cbc-essiv: sha256
      Schlüsselgröße: 256 Bit
      Gerät: / dev / sda2
      Offset: 2056 Sektoren
      Größe:     156049348 Sektoren
      Modus: Lesen / Schreiben

Ein Sektor ist immer 512 Bytes (erwähnt in cryptsetup Handbuchseite). Verwenden Sie zum Subtrahieren von 15 GiB eine Sektorgröße von 156049348 - 15 * 1024 * 1024 * 2 = 124592068:

cryptsetup resize ExistingExt4 -b 124592068

Wie für die Größenänderung der Partition, parted mit GPT-Partitionen. Der resizeBefehl funktioniert jedoch nicht als Problemumgehung (oder Lösung). Entfernen Sie die Partitionsinformationen und erstellen Sie eine neue Partition, die von http://ubuntuforums.org/showthread.php?p=8721017#post8721017 inspiriert ist :

#  cryptsetup luksClose ExistingExt4 
# parted / dev / sda2
GNU Parted 2.3
Mit / dev / sda
Willkommen bei GNU Parted! Geben Sie 'help' ein, um eine Liste der Befehle anzuzeigen.
(geteilte) Einheit s 
(geteilte) p
Modell: ATA INTEL SSDSA2CW08 (scsi)
Disk / dev / sda: 156301488sSektorgröße 
(logisch / physisch): 512B / 512B
Partitionstabelle: gpt

Nummer Start Ende Größe Dateisystem Name Flags
 1 34s 2082s 2049s Booten Sie bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s 156301438s 156051404s Alles

Da 15 GiB abgeschabt werden müssen, wird das neue Ende 156301438 - 15 * 1024 * 1024 * 2 = 124844158. Da ich Partition 2 ändern möchte, muss ich sie zuerst entfernen und dann mit dem Label "Everything" neu erstellen (dies kann geändert werden, wenn Sie möchten). Hinweis : Diese Festplatte verfügt über ein GPT-Layout. Für MBR sollten Sie Everythingdurch primaryoder ersetzen extended(ungetestet, Größenänderung einer Partition auf MBR wurde nicht getestet und wird nicht empfohlen, da es ungetestet ist).

WARNUNG : Die folgenden Befehle haben Daten zerstört . Kopieren Sie es nicht, ohne zu verstehen, was gerade passiert. Die Sektor Dimensionen muss geändert werden, andernfalls Sie WILL Ihre Partition (en) zerstören. Ich bin in keiner Weise für Ihre Dummheit verantwortlich. BACKUP BACKUP Sichern Sie Ihre Daten auf einem zweiten Speichermedium, bevor Sie Ihre Daten riskieren.

(getrennt) rm 2 
(getrennt) mkpart Alles 250035s 124844158s
Warnung: Die resultierende Partition ist nicht richtig ausgerichtet, um eine optimale Leistung zu erzielen.
Ignorieren / Abbrechen? ignorieren 
(getrennt) p
Modell: ATA INTEL SSDSA2CW08 (scsi)
Disk / dev / sda: 156301488s
Sektorgröße (logisch / physisch): 512B / 512B
Partitionstabelle: gpt

Nummer Start Ende Größe Dateisystem Name Flags
 1 34s 2082s 2049s Booten Sie bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s   124844158s 124594124s                Alles
(getrennt) aufhören

Im obigen partedBeispiel sind meine Sektoren nicht ausgerichtet, was ein Fehler aus einer früheren Installation ist. Achten Sie nicht zu sehr darauf.

Das ist es! Sie können verwenden cryptsetup statusund file -Ls /dev/...dass alles in Ordnung ist, um zu überprüfen und dann neu starten.

Lekensteyn
quelle
1
Ich rate dringend davon ab, diese Lösung ohne vollständige Sicherung zu verwenden, da mit hoher Wahrscheinlichkeit ein Fehler auftritt. Wenn Sie jedoch eine vollständige Sicherung haben, ist das Erstellen einer neuen Partition viel einfacher.
Lassen Sie mich raten, ein Mensch hat das getan? Jedenfalls habe ich jetzt deutlich betont, dass vor dem Spielen ein Backup durchgeführt werden sollte. Ich dachte, dass es offensichtlich ist, dass ein Backup durchgeführt werden muss, bevor dies manuell durchgeführt wird. Wie kann dann jemand das durcheinander bringen, wenn man die klaren Anweisungen und Möglichkeiten zur Verifizierung beachtet?
Lekensteyn
Haben Sie auch eine Ursache für den von Ihnen genannten Fehler? Jeder kann behaupten, dass die bereitgestellten Informationen falsch sind, aber ich möchte sie überprüfen. Es kann für andere Benutzer in Zukunft hilfreich sein ...
Lekensteyn
Arno hat über diesen Beitrag auf der Mailingliste gesprochen: saout.de/pipermail/dm-crypt/2013-September/003521.html
Philipp Wendler
Anstelle von rm 2und mkpart [part-type] [start] [end]kann auch die resizepart 2 [end]Größe einer Partition geändert werden, ohne den Namen oder den Startoffset zu ändern.
Rob W
3

Beachten Sie, dass KDE Partition Manager 2.2.0 diese Schritte ausführen kann und das Ändern der Größe von LUKS-Partitionen gut funktioniert.

Andrius Štikonas
quelle