Как я могу сжать раздел LUKS, что делает `cryptsetup resize`?

14

Я в процессе изменения размера зашифрованного раздела LUKS, который содержит одну файловую систему ext4 (без LVM или чего-то еще). Cryptsetup FAQ рекомендует удалить старый раздел и создать его заново, но это звучит как тратить много времени. Поэтому я хочу продолжить вручную, тщательно изменяя размер раздела.

Пока думаю, что мне нужно сделать:

  1. Создать (зашифрованную) резервную копию файловой системы. Важный! Вы не будете первыми, кто потеряет ваши данные при выполнении следующих задач.
  2. Размонтируйте существующую файловую систему ext4 (например, загрузившись с Live CD). При загрузке с Live CD смонтируйте зашифрованный раздел, используяcryptsetup luksOpen /dev/sdXY ExistingExt4
  3. Изменение размера существующей файловой системы ext4 .
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. Закрыть / «размонтировать» раздел LUKS, используя cryptsetup luksClose ExistingExt4
  6. Уменьшите размер раздела.

Вышеуказанные шаги верны?

На шаге 4, что я должен выбрать $SECTORS? Этот шаг вообще необходим? Страница cryptsetupруководства не является действительно описательной для resizeопции:

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

Наконец, если я уменьшу раздел ext4 на 15 ГиБ, могу ли я с уверенностью предположить, что 15 ГиБ можно удалить из существующего раздела с помощью parted? Если да, то как это сделать? Мой диск разделен на GPT, если это имеет значение.

Lekensteyn
источник
1
Я всегда задавался вопросом о параметре изменения размера в cryptsetup. Даже в FAQ по cryptsetup говорится: «2.15 Могу ли я изменить размер раздела dm-crypt или LUKS? Да, вы можете, так как ни dm-crypt, ни LUKS не сохраняют размер раздела». Так почему же у него есть опция изменения размера, если она не имеет никакого отношения к размеру раздела ...
Dago

Ответы:

15

После резервного копирования (шаг 1) и размонтирования (между 2 и 3) запустите, fsckчтобы убедиться, что файловая система исправна:

e2fsck -f /dev/mapper/ExistingExt4

Кроме этого, шаги в порядке.

что я должен выбрать для $ SECTORS? Этот шаг вообще необходим?

Этот шаг необходим, иначе раздел все равно будет отображаться на старой стороне. Это подтверждается Nautilus, даже после изменения размера resize2fsраздел LUKS показывался как старый размер. После запуска cryptsetup resizeотображается правильный номер. Этот шаг не является необходимым. Это влияет только на текущее состояние размера, как показано в файловом браузере. После изменения размера и закрытия / открытия раздела, номер восстанавливается. Таким образом, закрытие раздела LUKS, как показано ниже, сделает это устаревшим.

$SECTORSможно определить, посмотрев на вывод cryptsetup status ExistingExt4:

    / dev / mapper / ExistingExt4 активен.
      Тип: LUKS1
      шифр: aes-cbc-essiv: sha256
      размер ключа: 256 бит
      устройство: / dev / sda2
      смещение: 2056 секторов
      размер:     156049348 секторов
      режим: чтение / запись

Один сектор всегда составляет 512 байт (упомянуто на cryptsetupстранице руководства). Таким образом, чтобы вычесть 15 ГиБ, используйте размер сектора 156049348 - 15 * 1024 * 1024 * 2 = 124592068:

cryptsetup resize ExistingExt4 -b 124592068

Что касается изменения размера раздела, partedпрекрасно работает с разделами GPT. Команда resizeне работает, однако, в качестве обходного пути (или решения), удалите информацию о разделе и создайте новый раздел, вдохновленный http://ubuntuforums.org/showthread.php?p=8721017#post8721017 :

# cryptsetup luksClose ExistingExt4 
# parted / dev / sda2
GNU Parted 2.3
Использование / dev / sda
Добро пожаловать в GNU Parted! Введите «help», чтобы просмотреть список команд.
(разделенный) блок s 
(разделенный) p
Модель: ATA INTEL SSDSA2CW08 (scsi)
Диск / dev / sda: 156301488s
Размер сектора (логический / физический): 512B / 512B
Таблица разделов: gpt

Номер Начало Конец Размер Имя Файловой системы Флаги
 1 34s 2082s 2049s Boot bios_grub
 3 2083 с 250034 с 247952 с ext2 RootBoot
 2 250035 с 156301438 с 156051404 с

Поскольку 15 ГиБ должны быть выбриты, новый конец становится 156301438 - 15 * 1024 * 1024 * 2 = 124844158. Поскольку я хочу изменить раздел 2, я сначала должен удалить его, а затем заново создать его с меткой «Все» (это можно изменить, если хотите). Примечание : этот диск имеет формат GPT. Для MBR следует заменить Everythingна primaryили extended(непроверенный, изменение размера раздела в MBR не было проверено и не рекомендуется, поскольку оно не проверено).

ВНИМАНИЕ : следующие команды уничтожили данные . Не копируйте его, не понимая, что происходит. Размеры секторов должны быть изменены, в противном случае вы БУДЕТЕ уничтожить раздел (ы). Я никоим образом не отвечаю за вашу глупость. Прежде чем рисковать вашими данными, создайте резервную копию ваших данных на втором носителе.

(разделенный) rm 2 
(разделенный) mkpart Everything 250035s 124844158s
Предупреждение: результирующий раздел не выровнен должным образом для лучшей производительности.
Игнорировать / Отменить? игнорировать 
(расстаться) р
Модель: ATA INTEL SSDSA2CW08 (scsi)
Диск / dev / sda: 156301488s
Размер сектора (логический / физический): 512B / 512B
Таблица разделов: gpt

Номер Начало Конец Размер Имя Файловой системы Флаги
 1 34s 2082s 2049s Boot bios_grub
 3 2083 с 250034 с 247952 с ext2 RootBoot
 2 250035s   124844158s 124594124s                Все
(расстались) выйти

В приведенном выше partedпримере мои сектора не выровнены, что является ошибкой из более ранней установки, не обращайте на это слишком много внимания.

Вот и все! Вы можете использовать cryptsetup statusи, file -Ls /dev/...чтобы убедиться, что все в порядке, а затем перезагрузите компьютер.

Lekensteyn
источник
1
Я настоятельно рекомендую не использовать это решение без полного резервного копирования, так как оно очень вероятно пойдет не так. Но если у вас есть полная резервная копия, создать новый раздел намного проще.
Дай угадаю, это сделал человек? Во всяком случае, теперь я четко подчеркнул, что резервное копирование должно быть выполнено, прежде чем играть с этим. Я думал, что было очевидно, что перед тем, как делать это вручную, необходимо выполнить резервное копирование ... даже тогда, как кто-то может испортить это, учитывая четкие инструкции и способы проверки?
Лекенштейн
У вас также есть источник для упомянутой вами ошибки? Каждый может заявить, что предоставленная информация неверна, но я бы хотел ее проверить. Это может быть полезно для других пользователей в будущем ...
Лекенштейн
Арно говорил об этом посте в списке рассылки: saout.de/pipermail/dm-crypt/2013-September/003521.html
Филипп Вендлер
Вместо rm 2и mkpart [part-type] [start] [end]можно также resizepart 2 [end]изменить размер раздела без изменения имени или начального смещения.
Роб W
3

Обратите внимание, что KDE Partition Manager 2.2.0 может выполнять эти шаги, и изменение размера разделов LUKS прекрасно работает.

Андрюс Штиконас
источник