Jak zmniejszyć partycję LUKS, co robi rozmiar `cryptsetup`?

14

Jestem w trakcie zmiany rozmiaru zaszyfrowanej partycji LUKS, która zawiera pojedynczy system plików ext4 (brak LVM lub coś takiego). Cryptsetup FAQ zaleca, aby usunąć starą partycję i utwórz ją ponownie, ale to brzmi jak tracić dużo czasu. Dlatego chcę kontynuować ręcznie, ostrożnie zmieniając rozmiar partycji.

Jak dotąd uważam, że muszę zrobić:

  1. Utwórz (zaszyfrowaną) kopię zapasową systemu plików. Ważny! Nie będziesz pierwszy stracić danych podczas wykonywania następujących zadań.
  2. Odmontuj istniejący system plików ext4 (np. Poprzez uruchomienie z Live CD). W przypadku uruchamiania z Live CD zamontuj zaszyfrowaną partycję za pomocącryptsetup luksOpen /dev/sdXY ExistingExt4
  3. Zmień rozmiar istniejącego systemu plików ext4 .
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. Zamknij / „odmontuj” partycję LUKS za pomocą cryptsetup luksClose ExistingExt4
  6. Zmniejsz rozmiar partycji.

Czy powyższe kroki są prawidłowe?

W kroku 4, po co mam wybierać $SECTORS? Czy ten krok jest w ogóle konieczny? Strona cryptsetuppodręcznika nie jest tak naprawdę opisowa dla resizeopcji:

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

Wreszcie, jeśli zmniejszę partycję ext4 o 15 GiB, czy mogę bezpiecznie założyć, że 15 GiB można usunąć z istniejącej partycji przy użyciu parted? Jeśli tak, jak to zrobić? Mój dysk jest podzielony na partycje GPT, jeśli to ma znaczenie.

Lekensteyn
źródło
1
Zawsze zastanawiałem się również nad opcją zmiany rozmiaru w cryptsetup. Nawet często zadawane pytania dotyczące cryptsetup mówią: „2.15 Czy mogę zmienić rozmiar partycji dm-crypt lub LUKS? Tak, możesz, ponieważ ani dm-crypt, ani LUKS nie przechowują rozmiaru partycji”. Dlaczego więc ma opcję zmiany rozmiaru, jeśli nie ma to nic wspólnego z rozmiarem partycji ...
Dago

Odpowiedzi:

15

Po utworzeniu kopii zapasowej (krok 1) i odmontowaniu (od 2 do 3) uruchom, fsckaby upewnić się, że system plików jest w dobrej kondycji:

e2fsck -f /dev/mapper/ExistingExt4

Poza tym kroki są w porządku.

co powinienem wybrać dla $ SEECTORS? Czy ten krok jest w ogóle konieczny?

Ten krok jest konieczny, w przeciwnym razie partycja nadal pojawiałaby się po starej stronie. Potwierdza to Nautilus, nawet po zmianie rozmiaru resize2fspartycja LUKS pojawiła się jako stary rozmiar. Po uruchomieniu cryptsetup resizewyświetlany jest poprawny numer. Ten krok nie jest konieczny. Wpływa tylko na aktualny stan rozmiaru pokazany w przeglądarce plików. Po zmianie rozmiaru i ponownym zamknięciu / otwarciu partycji numer jest przywracany. Tak więc, kiedy zamkniesz partycję LUKS, jak pokazano później, spowoduje to, że będzie to przestarzałe.

$SECTORSmożna ustalić, patrząc na wynik cryptsetup status ExistingExt4:

    / dev / mapper / ExistingExt4 jest aktywny.
      wpisz: LUKS1
      szyfr: aes-cbc-essiv: sha256
      rozmiar klucza: 256 bitów
      urządzenie: / dev / sda2
      offset: 2056 sektorów
      rozmiar:     156049348 sektorów
      tryb: odczyt / zapis

Jeden sektor ma zawsze 512 bajtów (wymienionych na cryptsetupstronie podręcznika). Zatem, aby odjąć 15 GiB, użyj rozmiaru sektora 156049348 - 15 * 1024 * 1024 * 2 = 124592068:

cryptsetup resize ExistingExt4 -b 124592068

Jeśli chodzi o zmianę rozmiaru partycji, parteddziała dobrze z partycjami GPT. resizeKomenda nie działa jednak, jako obejście (lub roztworu), usunąć informacje o partycji i tworzy nową partycję jako inspirowane przez http://ubuntuforums.org/showthread.php?p=8721017#post8721017 :

# cryptsetup luksClose ExistingExt4 
# parted / dev / sda2
GNU Parted 2.3
Korzystanie z / dev / sda
Witamy w GNU Parted! Wpisz „help”, aby wyświetlić listę poleceń.
(rozdzielony) jednostki s 
(rozdzielony) str
Model: ATA INTEL SSDSA2CW08 (scsi)
Dysk / dev / sda: 156301488s
Rozmiar sektora (logiczny / fizyczny): 512B / 512B
Tabela partycji: gpt

Numer Początkowy Rozmiar końcowy System plików Nazwa Flagi
 1 34s 2082s 2049s Boot bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s 156301438s 156051404s Wszystko

Ponieważ 15 GiB musi zostać ogolony, nowy koniec staje się 156301438 - 15 * 1024 * 1024 * 2 = 124844158. Ponieważ chcę zmienić partycję 2, najpierw muszę ją usunąć, a następnie odtworzyć z etykietą „Wszystko” (można to zmienić, jeśli chcesz). Uwaga : ten dysk ma układ GPT. W przypadku MBR należy zastąpić Everythingprzez primarylub extended(nieprzetestowane, zmiana rozmiaru partycji na MBR nie została przetestowana i nie jest zalecana, ponieważ jest nie przetestowana).

OSTRZEŻENIE : następujące polecenia zniszczyły dane . Nie kopiuj go bez zrozumienia, co się dzieje. Wymiary sektora musi być zmieniony, inaczej BĘDZIE zniszczyć partycji (y). Nie jestem w żaden sposób odpowiedzialny za twoją głupotę, BACKUP BACKUP BACKUP twoich danych na drugi nośnik pamięci, zanim zaryzykuję twoje dane.

(parted) rm 2 
(parted) mkpart Wszystko 250035s 124844158s
Ostrzeżenie: wynikowa partycja nie jest odpowiednio wyrównana w celu uzyskania najlepszej wydajności.
Zignorować / anulować? ignore 
(parted) p
Model: ATA INTEL SSDSA2CW08 (scsi)
Dysk / dev / sda: 156301488s
Rozmiar sektora (logiczny / fizyczny): 512B / 512B
Tabela partycji: gpt

Numer Początkowy Rozmiar końcowy System plików Nazwa Flagi
 1 34s 2082s 2049s Boot bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s   124844158s 124594124s                Wszystko
(rozstał się) wyjdź

W powyższym partedprzykładzie moje sektory nie są wyrównane, co jest błędem z wcześniejszej instalacji, nie zwracaj na to zbyt dużej uwagi.

To jest to! Możesz użyć cryptsetup statusi file -Ls /dev/...do sprawdzenia, czy wszystko jest w porządku, a następnie uruchom ponownie.

Lekensteyn
źródło
1
Zdecydowanie odradzam korzystanie z tego rozwiązania bez pełnej kopii zapasowej, ponieważ jest bardzo prawdopodobne, że pójdzie nie tak. Ale jeśli masz pełną kopię zapasową, utworzenie nowej partycji jest o wiele łatwiejsze.
Niech zgadnę, człowiek to zrobił? W każdym razie wyraźnie podkreśliłem, że przed grą należy wykonać kopię zapasową. Pomyślałem, że to oczywiste, że trzeba wykonać kopię zapasową przed zrobieniem tego ręcznie ... nawet wtedy, jak ktoś może to zepsuć, biorąc pod uwagę jasne instrukcje i sposoby weryfikacji?
Lekensteyn,
Czy masz również źródło wspomnianej awarii? Każdy może twierdzić, że podane informacje są nieprawidłowe, ale chciałbym je zweryfikować. W przyszłości może być pomocny dla innych użytkowników ...
Lekensteyn,
Arno mówił o tym poście na liście mailingowej: saout.de/pipermail/dm-crypt/2013-September/003521.html
Philipp Wendler
Zamiast rm 2i mkpart [part-type] [start] [end]można również użyć resizepart 2 [end]do zmiany rozmiaru partycji bez zmiany nazwy lub rozpoczęcia przesunięcia.
Rob W
3

Pamiętaj, że KDE Partition Manager 2.2.0 może wykonać te kroki, a zmiana rozmiaru partycji LUKS działa dobrze.

Andrius Štikonas
źródło