Схема такова:
- отмонтировать зашифрованный раздел;
- закрыть шифрующее LUKS устройство;
- растянуть раздел;
- открыть шифрующее LUKS устройство;
- растянуть шифрующее LUKS устройство;
- проверить файловую систему
- примонтировать зашифрованный раздел обратно
Я провожу увеличение раздела. При уменьшении раздела меняется порядок, что уменьшать в первую и во вторую очередь. Так при увеличении сначала нужно растянуть слой логического тома, затем слой устройства шифрования и только потом слой файловой системы. А при уменьшении, прежде всего необходимо уменьшить размер слоя файловой системы, затем слой шифрования, и только в конце слой логического тома.
Создание тестового раздела
Создаём LV размером 10G с именем test в группе томов VG_B01_DATA
[root@b01 ~]# lvcreate -L 10g -n test VG_B01_DATA Logical volume "test" created [root@b01 ~]# lvs --unit g LV VG Attr LSize Origin Snap% Move Log Copy% Convert test VG_B01_DATA -wi-a- 10.00g
Теперь отформатируем устройство. Очень внимательно смотрим, что форматируем. Так как эксперимент проводится на боевой машине где находится в том числе живой раздел который нужно будет растянуть.
[root@b01 ~]# cryptsetup luksFormat /dev/VG_B01_DATA/test WARNING! ======== This will overwrite data on /dev/VG_B01_DATA/test irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase:
Посмотрим что у нас получилось в дампе информации раздела.
[root@b01 ~]# cryptsetup luksDump /dev/VG_B01_DATA/test LUKS header information for /dev/VG_B01_DATA/test Version: 1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Hash spec: sha1 Payload offset: 4096 MK bits: 256 MK digest: e7 a1 2e ac d8 e4 54 a8 b3 94 45 7e 2c 44 8f 59 92 b6 e3 16 MK salt: 9a c1 46 07 81 63 c7 f5 76 96 6a 04 5e 46 76 47 03 0a 43 e3 63 1c 1b ad 20 15 be a6 c1 ae c1 e7 MK iterations: 42375 UUID: 9fdde297-58bd-497e-beee-84a036e69c57 Key Slot 0: ENABLED Iterations: 169843 Salt: c2 b9 07 c5 39 34 52 91 9c 53 cd 1b c7 7e 8d cf 6f 06 48 28 bb 8f d9 a5 80 56 06 69 7e 17 05 0f Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
Узнаем идентификатор UUID
[root@b01 ~]# cryptsetup luksUUID /dev/VG_B01_DATA/test 9fdde297-58bd-497e-beee-84a036e69c57
И теперь откроем шифрующее LUKS устройство
[root@b01 ~]# cryptsetup luksOpen /dev/VG_B01_DATA/test 9fdde297-58bd-497e-beee-84a036e69c57 Enter passphrase for /dev/VG_B01_DATA/test:
Посмотрим что оно активно и узнаем имя
[root@b01 ~]# dmsetup info 9fdde297-58bd-497e-beee-84a036e69c57 Name: 9fdde297-58bd-497e-beee-84a036e69c57 State: ACTIVE Read Ahead: 256 Tables present: LIVE Open count: 0 Event number: 0 Major, minor: 253, 8 Number of targets: 1 UUID: CRYPT-LUKS1-9fdde29758bd497ebeee84a036e69c57-9fdde297-58bd-497e-beee-84a036e69c57
Теперь создадим файловую систему ext4.
[root@b01 ~]# mkfs.ext4 /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2620928 blocks 131046 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 32 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Отключим автопроверку файловой системы. Я всегда проверку делаю руками.
[root@b01 ~]# tune2fs -i 0 -c 0 /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 tune2fs 1.41.12 (17-May-2010) Setting maximal mount count to -1 Setting interval between checks to 0 seconds
И примонтируем наше криптоустройство к дереву файловой системы
[root@b01 mnt]# mount /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 /mnt/test
Скопируем файлы для заполнения пространства и вычислим контрольную сумму каждого
[root@b01 test]# cd /mnt/test [root@b01 test]# cp /mnt/data/VG_S01_0-ROOT-2014-01-30-09-02-02.gz ./ [root@b01 test]# cp /mnt/data/VG_S01_0-ROOT-2014-11-01-10-27-41.gz ./ [root@b01 test]# md5sum * > test.md5
На этом подготовка экспериментального раздела завершена.
Увеличение размера
Отмонтируем раздел
[root@b01 mnt]# umount /mnt/test
Глянем что шифрующее устройство активно
[root@b01 mnt]# dmsetup info 9fdde297-58bd-497e-beee-84a036e69c57 Name: 9fdde297-58bd-497e-beee-84a036e69c57 State: ACTIVE Read Ahead: 256 Tables present: LIVE Open count: 0 Event number: 0 Major, minor: 253, 8 Number of targets: 1 UUID: CRYPT-LUKS1-9fdde29758bd497ebeee84a036e69c57-9fdde297-58bd-497e-beee-84a036e69c57
Посмотрим размер в секторах и устройство которое будем растягивать.
[root@b01 mnt]# cryptsetup status 9fdde297-58bd-497e-beee-84a036e69c57 /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 is active. type: LUKS1 cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/mapper/VG_B01_DATA-test offset: 4096 sectors size: 20967424 sectors mode: read/write
До увеличения имеем размер 20967424 сектора.
А устройство лежащее ниже это /dev/mapper/VG_B01_DATA-test
Отключим шифрующее LUKS устройство и проверим что отключилось
[root@b01 mnt]# cryptsetup luksClose 9fdde297-58bd-497e-beee-84a036e69c57 [root@b01 mnt]# cryptsetup status 9fdde297-58bd-497e-beee-84a036e69c57 /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 is inactive.
Растягиваем на +10g раздел /dev/mapper/VG_B01_DATA-test он же /dev/VG_B01_DATA/test
[root@b01 mnt]# lvextend -L +10g /dev/VG_B01_DATA/test Extending logical volume test to 20.00 GiB Logical volume test successfully resized
Смотрим размер
[root@b01 mnt]# lvs --unit g LV VG Attr LSize Origin Snap% Move Log Copy% Convert test VG_B01_DATA -wi-a- 20.00g
Было 10g стало 20g.
Открываем LUKS устройство
[root@b01 ~]# cryptsetup luksOpen /dev/VG_B01_DATA/test 9fdde297-58bd-497e-beee-84a036e69c57 Enter passphrase for /dev/VG_B01_DATA/test:
И растягиваем его на весь физический размер лежащего ниже логического тома
[root@b01 ~]# cryptsetup --verbose resize 9fdde297-58bd-497e-beee-84a036e69c57 Command successful.
Смотрим сколько секторов получилось
[root@b01 ~]# cryptsetup status 9fdde297-58bd-497e-beee-84a036e69c57 /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 is active. type: LUKS1 cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/mapper/VG_B01_DATA-test offset: 4096 sectors size: 41938944 sectors mode: read/write
Было 20967424 сектора стало 41938944
Проверим что он монтируется без ошибки. И сразу отмонтируем.
[root@b01 ~]# mount /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 /mnt/test [root@b01 ~]# umount /mnt/test
Проверим файловую систему
[root@b01 ~]# e2fsck -f /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57: 13/655360 files (0.0% non-contiguous), 1028187/2620928 blocks
Увеличим размер файловой системы до размера лежащего на уровень ниже устройства.
[root@b01 ~]# resize2fs /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 to 5242368 (4k) blocks. The filesystem on /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 is now 5242368 blocks long.
Примонтируем и посмотрим размер полный, занятый и свободный
[root@b01 ~]# mount /dev/mapper/9fdde297-58bd-497e-beee-84a036e69c57 /mnt/test [root@b01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/dm-8 20G 3.8G 15G 21% /mnt/test
Проверим контрольные суммы файлов.
[root@b01 test]# cd /mnt/test [root@b01 test]# md5sum -c /mnt/test.md5 VG_S01_0-ROOT-2014-01-30-09-02-02.gz: OK VG_S01_0-ROOT-2014-11-01-10-27-41.gz: OK
Готово.