Comment puis-je réduire une partition LUKS, que fait «cryptsetup resize»?

14

Je suis en train de redimensionner une partition cryptée LUKS qui contient un seul système de fichiers ext4 (pas de LVM ou quelque chose). La FAQ cryptsetup recommande de supprimer l'ancienne partition et de la recréer, mais cela ressemble à une perte de temps. Par conséquent, je veux procéder manuellement, en redimensionnant soigneusement la partition.

Jusqu'à présent, je pense que je dois faire:

  1. Créez une sauvegarde (cryptée) du système de fichiers. Important! Vous ne serez pas le premier à perdre vos données lors de l'exécution des tâches suivantes.
  2. Démontez le système de fichiers ext4 existant (par exemple en démarrant sur un Live CD). Si vous démarrez à partir d'un Live CD, montez la partition chiffrée à l'aide decryptsetup luksOpen /dev/sdXY ExistingExt4
  3. Redimensionnez le système de fichiers ext4 existant .
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. Fermer / "démonter" la partition LUKS en utilisant cryptsetup luksClose ExistingExt4
  6. Réduisez la taille de la partition.

Les étapes ci-dessus sont-elles correctes?

À l'étape 4, que dois-je choisir $SECTORS? Cette étape est-elle même nécessaire? La cryptsetuppage de manuel n'est pas vraiment descriptive sur l' resizeoption:

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

Enfin, si je réduis la partition ext4 de 15 Gio, puis-je supposer en toute sécurité que 15 Gio peuvent être supprimés de la partition existante à l'aide de parted? Si oui, comment faire? Mon disque est partitionné GPT, si cela importe.

Lekensteyn
la source
1
Je me suis toujours posé des questions sur l'option de redimensionnement sur cryptsetup également. Même la FAQ cryptsetup dit: "2.15 Puis-je redimensionner une partition dm-crypt ou LUKS? Oui, vous pouvez, car ni dm-crypt ni LUKS ne stockent la taille de la partition." Alors pourquoi a-t-il une option de redimensionnement si cela n'a rien à voir avec la taille de la partition ...
Dago

Réponses:

15

Après avoir sauvegardé (étape 1) et démonté (entre 2 et 3), exécutez fsckpour vous assurer que le système de fichiers est sain:

e2fsck -f /dev/mapper/ExistingExt4

À part cela, les étapes sont OK.

que dois-je choisir pour $ SECTORS? Cette étape est-elle même nécessaire?

Cette étape est nécessaire, sinon la partition apparaîtrait toujours sur l'ancien côté. Cela est confirmé avec Nautilus, même après le redimensionnement avec resize2fs, la partition LUKS est apparue comme l'ancienne taille. Après l'exécution cryptsetup resize, le numéro correct s'affiche. Cette étape n'est pas nécessaire. Cela n'affecte que l'état de la taille actuelle, comme indiqué dans le navigateur de fichiers. Après avoir changé la taille et fermé / rouvert la partition, le numéro est restauré. Ainsi, lors de la fermeture de la partition LUKS, comme indiqué plus loin, cela deviendra obsolète.

$SECTORSpeut être déterminé en regardant la sortie de cryptsetup status ExistingExt4:

    / dev / mapper / ExistingExt4 est actif.
      type: LUKS1
      chiffre: aes-cbc-essiv: sha256
      taille de clé: 256 bits
      périphérique: / dev / sda2
      offset: 2056 secteurs
      taille:     156049348 secteurs
      mode: lecture / écriture

Un secteur fait toujours 512 octets (mentionné dans cryptsetupla page de manuel). Ainsi, pour soustraire 15 Gio, utilisez une taille de secteur de 156049348 - 15 * 1024 * 1024 * 2 = 124592068:

cryptsetup resize ExistingExt4 -b 124592068

Quant au redimensionnement de la partition, partedfonctionne très bien avec les partitions GPT. La resizecommande ne fonctionne pas cependant, comme solution de contournement (ou solution), supprimez les informations de partition et créez une nouvelle partition comme inspiré par http://ubuntuforums.org/showthread.php?p=8721017#post8721017 :

# cryptsetup luksClose ExistingExt4 
# parted / dev / sda2
GNU Parted 2.3
Utilisation de / dev / sda
Bienvenue dans GNU Parted! Tapez «aide» pour afficher une liste de commandes.
(séparé) unité s 
(séparé) p
Modèle: ATA INTEL SSDSA2CW08 (scsi)
Disque / dev / sda: 156301488s
Taille du secteur (logique / physique): 512B / 512B
Table de partition: gpt

Numéro Début Fin Taille Système de fichiers Nom Indicateurs
 1 34s 2082s 2049s Boot bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s 156301438s 156051404s Tout

Comme 15 Gio doivent être rasés, la nouvelle fin devient 156301438 - 15 * 1024 * 1024 * 2 = 124844158. Étant donné que je souhaite modifier la partition 2, je dois d'abord la supprimer, puis la recréer avec le libellé "Tout" (cela peut être modifié si vous le souhaitez). Remarque : ce disque a une disposition GPT. Pour MBR, vous devez remplacer Everythingpar primaryou extended(non testé, le redimensionnement d'une partition sur MBR n'a pas été testé et n'est pas recommandé car il n'est pas testé).

AVERTISSEMENT : les commandes suivantes ont détruit les données . Ne le copiez pas sans comprendre ce qui se passe. Les dimensions du secteur doivent être modifiées, sinon vous DÉTRUIREZ vos partitions. Je suis en aucun cas responsable de votre stupidité, BACKUP BACKUP vos données à un deuxième support de stockage avant de risquer vos données.

(séparé) rm 2 
(séparé) mkpart Tout 250035s 124844158s
Avertissement: la partition résultante n'est pas correctement alignée pour de meilleures performances.
Ignorer / Annuler? ignorer 
(séparé) p
Modèle: ATA INTEL SSDSA2CW08 (scsi)
Disque / dev / sda: 156301488s
Taille du secteur (logique / physique): 512B / 512B
Table de partition: gpt

Numéro Début Fin Taille Système de fichiers Nom Indicateurs
 1 34s 2082s 2049s Boot bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s   124844158s 124594124s                Tout
(séparé) quitter

Dans l' partedexemple ci-dessus , mes secteurs ne sont pas alignés, ce qui est une erreur d'une installation antérieure, n'y prêtez pas trop attention.

C'est ça! Vous pouvez utiliser cryptsetup statuset file -Ls /dev/...pour vérifier que tout est OK, puis redémarrer.

Lekensteyn
la source
1
Je déconseille fortement d'utiliser cette solution sans sauvegarde complète, car elle risque fort de mal tourner. Mais si vous avez une sauvegarde complète, la création d'une nouvelle partition est beaucoup plus facile.
Laissez-moi deviner, un humain a fait ça? Quoi qu'il en soit, j'ai maintenant clairement souligné qu'une sauvegarde doit être effectuée avant de jouer avec cela. Je pensais qu'il était évident qu'une sauvegarde doit être effectuée avant de le faire manuellement ... même alors comment quelqu'un pourrait-il gâcher cela étant donné les instructions claires et les moyens de vérifier?
Lekensteyn
Avez-vous également une source pour l'échec que vous avez mentionné? Tout le monde peut affirmer que les informations fournies sont incorrectes, mais je voudrais le vérifier. Cela peut être utile pour d'autres utilisateurs à l'avenir ...
Lekensteyn
Arno parlait de ce message sur la liste de diffusion: saout.de/pipermail/dm-crypt/2013-September/003521.html
Philipp Wendler
Au lieu de rm 2et mkpart [part-type] [start] [end], on peut également utiliser resizepart 2 [end]pour redimensionner une partition sans changer le nom ou démarrer l'offset.
Rob W
3

Notez que KDE Partition Manager 2.2.0 peut effectuer ces étapes et le redimensionnement des partitions LUKS fonctionne bien.

Andrius Štikonas
la source