Размер диска SSD 240G (223G если быть точным)
root@0:~# fdisk -l /dev/sda Disk /dev/sda: 223.6 GiB, 240057409536 bytes, 468862128 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
а размер HDD 500G, но используется примерно 233G, что на 10G больше емкости SSD диска
root@0:~# fdisk -l /dev/sdb Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x0003bb0b Device Boot Start End Sectors Size Id Type /dev/sdb1 * 2048 487423 485376 237M 83 Linux /dev/sdb2 487424 488396799 487909376 232.7G 83 Linux
На HDD используется LVM поверх LUKS и просто изменить размер второго раздела не получится. Сниму образ диска, чтобы уже в нем безопасно изменить размер разделов. Если что-то пойдет не так, то достаточно поставить HDD обратно и продолжить работу.
root@0:~# mount -t cifs //192.168.1.1/share /mnt -o guest root@tty1:~# pv -s 240g -S < /dev/sdb > /mnt/hdd_backup.bin bs=1M count=240000 101GiB 0:44:14 [38.1MiB/s] [==============> ] 43% ETA 0:59:07
Для изменения размера разделов буду использовать инструкцию Resizing LVM-on-LUKS из wiki ArchLinux. Уменьшать размер разделов нужно в определенном порядке (файловая система -> логический том LVM -> физический том LVM -> размер данных LUKS -> раздел LUKS). Если изменить порядок или что-то пропустить, то можно превратить данные в кашу.
Устанавливаю в ноутбук SSD, а старый HDD подключаю через USB-SATA адаптер (/dev/sdb). Загружаюсь с LiveCD (Finnix), монтирую по сети домашнюю файлопомойку и делаю образ HDD диска (только размер данных с небольшим запасом)
root@0:~# mount -t cifs //192.168.1.50/share /mnt -o guest root@0:~# pv -s 250G -S < /dev/sdb > /mnt/hdd_backup.bin
Теперь старый HDD можно отключить и убрать на полку.
root@0:~# eject /dev/sdb
Подключаю файл с образом диска и создаю устройства для каждого раздела
root@0:~# losetup --find --show /mnt/hdd_backup.bin /dev/loop1 root@0:~# kpartx -a /dev/loop1
Открываю LUKS раздел и проверяю его статус
root@0:~# cryptsetup luksOpen /dev/mapper/loop1p2 loop1_crypt Enter passphrase for /dev/mapper/loop1p2: root@0:~# cryptsetup status loop1_crypt /dev/mapper/loop1_crypt is active. type: LUKS1 cipher: aes-xts-plain64 keysize: 512 bits device: /dev/mapper/loop1p2 offset: 4096 sectors size: 487905280 sectors mode: read/write
Теперь сканирую доступность групп томов LVM
root@0:~# vgscan Reading all physical volumes. This may take a while... Found volume group "steshan" using metadata type lvm2
Искомая группа 'steshan' нашлась - активируем ее
root@0:~# vgchange -ay 3 logical volume(s) in volume group "steshan" now active
Теперь блочные устройства выглядят правильно и можно приступать к изменению размера
root@0:~# lsblk /dev/loop1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop1 7:1 0 240G 0 loop ├─loop1p1 254:0 0 237M 0 part └─loop1p2 254:1 0 232.7G 0 part └─loop1_crypt 254:2 0 232.7G 0 crypt ├─steshan-rootfs 254:3 0 14G 0 lvm ├─steshan-swap 254:4 0 6G 0 lvm └─steshan-home 254:5 0 186.3G 0 lvm
Но сначала нужно проверить файловые системы на наличие ошибок
root@0:~# fsck -Cf /dev/steshan/rootfs fsck from util-linux 2.26.2 e2fsck 1.42.13 (17-May-2015) 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/steshan-rootfs: 212139/915712 files (0.5% non-contiguous), 1989447/3661824 blocks root@0:~# fsck -Cf /dev/steshan/home fsck from util-linux 2.26.2 e2fsck 1.42.13 (17-May-2015) 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/steshan-home: 106361/12214272 files (2.2% non-contiguous), 24456249/48827392 blocks
Ошибок нет, уменьшаю размер файловой системы /home до 140G
root@0:~# resize2fs -p /dev/steshan/home 140G resize2fs 1.42.13 (17-May-2015) Resizing the filesystem on /dev/steshan/home to 36700160 (4k) blocks. Begin pass 2 (max = 5761427) Relocating blocks XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Begin pass 3 (max = 1491) Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Begin pass 4 (max = 8200) Updating inode references XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX The filesystem on /dev/steshan/home is now 36700160 (4k) blocks long.
На всякий случай проверю целостность еще раз
root@0:~# fsck -Cf /dev/steshan/home fsck from util-linux 2.26.2 e2fsck 1.42.13 (17-May-2015) 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/steshan-home: 106361/9175040 files (2.3% non-contiguous), 24265588/36700160 blocks
Деактивирую логический том на котором расположена файловая система /home и уменьшаю его размер до 141G (на 1G больше размера файловой системы)
root@0:~# lvchange -an /dev/steshan/home root@0:~# lvresize -L 141G /dev/steshan/home Size of logical volume steshan/home changed from 186.26 GiB (47683 extents) to 141.00 GiB (36096 extents). Logical volume home successfully resized
Теперь можно уменьшить размер физического тома до 162G (с большим запасом)
root@0:~# pvs PV VG Fmt Attr PSize PFree /dev/mapper/loop1_crypt steshan lvm2 a-- 232.65g 71.68g root@0:~# pvresize --setphysicalvolumesize 162G /dev/mapper/loop1_crypt /dev/mapper/loop1_crypt: cannot resize to 42239 extents as later ones are allocated. 0 physical volume(s) resized / 1 physical volume(s) not resized
Упс, произошла ошибка т.к. часть данных логического тома расположена за границей нового размера физического тома. Сначала нужно переместить эти данные в другое место
root@0:~# pvmove --alloc anywhere /dev/mapper/loop1_crypt:41472-59557 /dev/mapper/loop1_crypt: Moved: 16.0% /dev/mapper/loop1_crypt: Moved: 48.4% /dev/mapper/loop1_crypt: Moved: 75.6% /dev/mapper/loop1_crypt: Moved: 100.0%
Прошло без ошибок и теперь можно попробовать уменьшить размер физического тома снова.
root@0:~# pvresize --setphysicalvolumesize 162G /dev/mapper/loop1_crypt Physical volume "/dev/mapper/loop1_crypt" changed 1 physical volume(s) resized / 0 physical volume(s) not resized
Физический том уменьшил, а теперь пора изменить размер области, которую использует cryptsetup (163 * 1024 * 1024 * 1024 / 512 = 341835776). Ее итоговый размер должен быть 341835776 сектор.
root@0:~# cryptsetup -b 341835776 resize loop1_crypt
В последнюю очередь уменьшаем размер раздела
root@0:~# parted /dev/loop1 GNU Parted 3.2 Using /dev/loop1 Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) (parted) unit s (parted) resizepart 2 End? [318359375s]? 341835776s (parted) print Model: Loopback device (loopback) Disk /dev/loop1: 503316480s Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 2048s 487423s 485376s primary ext4 boot 2 487424s 341835776s 341348353s primary (parted)
Изменение размера завершено, теперь можно отключить LVM и закрыть LUKS. Заключительным этапом станет копирование данных из образа на SSD диск.
root@0:~# vgchange -an 0 logical volume(s) in volume group "steshan" now active root@0:~# cryptsetup luksClose loop1_crypt root@0:~# kpartx -d /dev/loop1 root@0:~# pv -s 180g -S < /dev/loop1 > /dev/sda
Загрузка с SSD прошла без ошибок. Аналогично делается изменение в большую сторону чтобы максимально использовать емкость SSD. Но порядок будет обратный.
Комментариев нет:
Отправить комментарий