Схема такова:
- отмонтировать зашифрованный раздел;
- закрыть шифрующее 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
Готово.