Come posso ridurre una partizione LUKS, cosa fa `cryptsetup resize`?


14

Sono in corso il ridimensionamento di una partizione crittografata LUKS che contiene un singolo filesystem ext4 (niente LVM o qualcosa del genere). Le FAQ di cryptsetup raccomandano di rimuovere la vecchia partizione e ricrearla, ma sembra sprecare molto tempo. Quindi voglio procedere procedendo manualmente, ridimensionando attentamente la partizione.

Finora penso di dover fare:

  1. Crea un backup (crittografato) del filesystem. Importante! Non sarai il primo a perdere i tuoi dati mentre esegui le seguenti attività.
  2. Smonta il file system ext4 esistente (ad es. Avviando un Live CD). Se si avvia da un Live CD, montare la partizione crittografata utilizzandocryptsetup luksOpen /dev/sdXY ExistingExt4
  3. Ridimensiona il filesystem ext4 esistente .
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. Chiudi / "smonta" la partizione LUKS usando cryptsetup luksClose ExistingExt4
  6. Riduci le dimensioni della partizione.

I passaggi precedenti sono corretti?

Nel passaggio 4, cosa dovrei scegliere $SECTORS? Questo passaggio è persino necessario? La cryptsetuppagina di manuale non è veramente descrittiva resizesull'opzione:

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

Infine, se restringo la partizione ext4 di 15 GiB, posso tranquillamente supporre che 15 GiB possano essere rimossi dalla partizione esistente usando parted? Se sì, come fare? Il mio disco è partizionato GPT, se è importante.


1
Mi sono sempre chiesto dell'opzione di ridimensionamento anche su cryptsetup. Anche la FAQ di cryptsetup dice: "2.15 Posso ridimensionare una partizione dm-crypt o LUKS? Sì, è possibile, poiché né dm-crypt né LUKS memorizzano le dimensioni della partizione". Quindi perché ha un'opzione di ridimensionamento se non ha nulla a che fare con la dimensione della partizione ...
Dago

Risposte:


15

Dopo il backup (passaggio 1) e lo smontaggio (tra 2 e 3), eseguire fsckper assicurarsi che il filesystem sia integro:

e2fsck -f /dev/mapper/ExistingExt4

Oltre a ciò, i passaggi sono OK.

cosa dovrei scegliere per $ SECTORS? Questo passaggio è persino necessario?

Questo passaggio è necessario, altrimenti la partizione verrà comunque visualizzata sul lato precedente. Ciò è confermato con Nautilus, anche dopo il ridimensionamento con resize2fs, la partizione LUKS è stata mostrata come vecchia dimensione. Dopo l'esecuzione cryptsetup resize, viene visualizzato il numero corretto. Questo passaggio non è necessario. Influisce solo sullo stato delle dimensioni corrente, come mostrato nel browser dei file. Dopo aver modificato le dimensioni e chiuso / aperto nuovamente la partizione, il numero viene ripristinato. Quindi, quando si chiude la partizione LUKS come mostrato in seguito, questo diventerà obsoleto.

$SECTORSpuò essere determinato guardando l'output di cryptsetup status ExistingExt4:

    / dev / mapper / ExistingExt4 è attivo.
      tipo: LUKS1
      cifra: aes-cbc-essiv: sha256
      dimensione chiave: 256 bit
      dispositivo: / dev / sda2
      offset: 2056 settori
      dimensioni:     156049348 settori
      modalità: lettura / scrittura

Un settore è sempre di 512 byte (menzionato nella cryptsetuppagina del manuale). Pertanto, per sottrarre 15 GiB, utilizzare una dimensione del settore di 156049348 - 15 * 1024 * 1024 * 2 = 124592068:

cryptsetup resize ExistingExt4 -b 124592068

Per quanto riguarda il ridimensionamento della partizione, partedfunziona bene con le partizioni GPT. Il resizecomando non funziona tuttavia, come soluzione alternativa (o soluzione), rimuovere le informazioni sulla partizione e creare una nuova partizione come ispirato da http://ubuntuforums.org/showthread.php?p=8721017#post8721017 :

# cryptsetup luksChiudi ExistingExt4 
# parted / dev / sda2
GNU Parted 2.3
Usando / dev / sda
Benvenuto in GNU Parted! Digita "aiuto" per visualizzare un elenco di comandi.
(parted) unit s 
(parted) p
Modello: ATA INTEL SSDSA2CW08 (scsi)
Disco / dev / sda: 156301488s
Dimensione del settore (logico / fisico): 512B / 512B
Tabella delle partizioni: gpt

Numero Inizio Fine Dimensione Nome file system Flag
 1 34s 2082s 2049s Boot bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s 156301438s 156051404s Tutto

Poiché si devono eliminare 15 GiB, la nuova fine diventa 156301438 - 15 * 1024 * 1024 * 2 = 124844158. Dato che voglio cambiare la partizione 2, devo prima rimuoverlo e poi ricrearlo con l'etichetta "Tutto" (questo potrebbe essere cambiato se vuoi). Nota : questo disco ha un layout GPT. Per MBR, è necessario sostituirlo Everythingcon primaryo extended(non testato, il ridimensionamento di una partizione su MBR non è stato testato e non è raccomandato perché non è testato).

ATTENZIONE : i seguenti comandi hanno distrutto i dati . Non copiarlo senza capire cosa sta succedendo. Le dimensioni del settore devono essere cambiate, altrimenti si WILL distruggere la partizione (s). Non sono in alcun modo responsabile della tua stupidità, BACKUP BACKUP BACKUP dei tuoi dati su un secondo supporto di archiviazione prima di rischiare i tuoi dati.

(parted) rm 2 
(parted) mkpart Tutto 250035s 124844158s
Avvertenza: la partizione risultante non è allineata correttamente per le migliori prestazioni.
Ignora / Annulla? ignora 
(diviso) p
Modello: ATA INTEL SSDSA2CW08 (scsi)
Disco / dev / sda: 156301488s
Dimensione del settore (logico / fisico): 512B / 512B
Tabella delle partizioni: gpt

Numero Inizio Fine Dimensione Nome file system Flag
 1 34s 2082s 2049s Boot bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s   124844158s 124594124s                Tutto
(separato) chiuso

Nell'esempio sopra parted, i miei settori non sono allineati, il che è un errore di un'installazione precedente, non prestare troppa attenzione ad esso.

Questo è tutto! È possibile utilizzare cryptsetup statuse file -Ls /dev/...per verificare che tutto sia a posto, quindi riavviare.


1
Consiglio vivamente di non utilizzare questa soluzione senza backup completo, poiché è molto probabile che vada storto. Ma se si dispone di un backup completo, la creazione di una nuova partizione è molto più semplice.

Fammi indovinare, un essere umano ha fatto questo? Comunque, ora ho chiaramente sottolineato che un backup dovrebbe essere eseguito prima di giocare con questo. Ho pensato che fosse ovvio che un backup doveva essere eseguito prima di farlo manualmente ... anche allora come si potrebbe fare un casino con le chiare istruzioni e i modi per verificare?
Lekensteyn,

Hai anche una fonte per l'errore che hai citato? Tutti possono affermare che le informazioni fornite sono errate, ma vorrei verificarle. Potrebbe essere utile per altri utenti in futuro ...
Lekensteyn,

Arno stava parlando di questo post nella mailing list: saout.de/pipermail/dm-crypt/2013-September/003521.html
Philipp Wendler

Invece di rm 2e mkpart [part-type] [start] [end], si può anche usare resizepart 2 [end]per ridimensionare una partizione senza cambiare il nome o avviare l'offset.
Rob W,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.