Линукс клонированный зашифрованный диск на диск меньшего размера
Я хочу обновить диск моего ноутбука с большей скоростью, поэтому я хочу клонировать мой текущий жесткий диск в ssd. К сожалению, они не одного размера.
Я уже нашел этот вопрос, но пока недоволен ответами.
Вот что у меня есть (sda = HDD, sdb = SSD):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 232.9G 0 disk
|-sda1 8:1 0 243M 0 part /boot
|-sda2 8:2 0 1K 0 part
`-sda5 8:5 0 232.7G 0 part
`-sda5_crypt (dm-0) 252:0 0 232.7G 0 crypt
|-elementary--vg-root (dm-1) 252:1 0 230.8G 0 lvm /
`-elementary--vg-swap_1 (dm-2) 252:2 0 1.9G 0 lvm [SWAP]
sdb 8:16 0 111.8G 0 disk
`-sdb1 8:17 0 111.8G 0 part
Разве это не лучший способ уменьшить текущие разделы жесткого диска, используя livecd, до точного размера, который может обработать sdd, и затем перезаписать его? Какие команды мне нужно использовать?
1 ответ
Я собираюсь ответить на вопрос сам, но общее замечание:возможно, быстрее всего начать с нуля, шаги сложны и требуют много времени!
- Сделайте резервную копию, используя ваш любимый инструмент клонирования дисков / резервного копирования
- Следуйте статье в Ubuntu Wiki о ResizeEncryptedPartions
- Убедитесь, что разделы точно соответствуют размеру вашего меньшего диска (чтобы свободное пространство после последнего раздела не было выделено)
- клонировать ваш диск с помощью dd до точного размера
детализированный
- /dev/sda - мой текущий диск, который я хочу сжать
- /dev/sdb - мой новый диск
- Используйте ваши точные значения для ваших размеров дисков, размеров блоков и т. Д., Мои расчеты лишь немного подсказывают, как я это сделал.
- будьте осторожны с параметром параметров (например, b иногда означает байты, иногда означает блоки и т. д.). Всегда проверяйте man-страницу в первую очередь.
- Проверьте связанную статью выше для некоторой дополнительной информации о разумных шагах
Загрузите livecd, загрузите модули, расшифруйте ваш диск, найдите разделы:
sudo modprobe dm-crypt
sudo cryptsetup luksOpen /dev/sda5 crypt1
sudo vgscan --mknodes
sudo vgchange -ay
распечатать текущий макет раздела с размерами в байтах:
ubuntu@ubuntu:~$ lsblk -b
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 250059350016 0 disk
├─sda1 8:1 0 254803968 0 part
├─sda2 8:2 0 1024 0 part
└─sda5 8:5 0 249802260480 0 part
└─crypt1 (dm-0) 252:0 0 249800163328 0 crypt
├─elementary--vg-root (dm-1) 252:1 0 247757537280 0 lvm
└─elementary--vg-swap_1 (dm-2) 252:2 0 2038431744 0 lvm
sdb 8:16 0 120034123776 0 disk
└─sdb1 8:17 0 120034091520 0 part /media/ubuntu/ff08402
Нам нужно знать, какой размер должен иметь новый корневой раздел, сделаем некоторые вычисления:
find how much space is used without root:
250059350016
- 247757537280
= 2301812736
calculate new wished size from the new disk:
120034123776
- 2301812736
= 117732311040
Since we can specify it only in kibibytes, we divide it by 1024
117732311040
/ 1024
= 114972960
Измените размер вашего раздела, используя resize2fs (у меня ext4):
sudo resize2fs -p /dev/mapper/elementary--vg-root 114972960k
Установите логический том на рассчитанный размер:
sudo lvreduce -L 114972960k /dev/mapper/elementary--vg-root
Напечатайте новую настройку раздела, нам понадобятся некоторые значения оттуда:
ubuntu@ubuntu:~$ lsblk -b
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 250059350016 0 disk
├─sda1 8:1 0 254803968 0 part
├─sda2 8:2 0 1024 0 part
└─sda5 8:5 0 249802260480 0 part
└─crypt1 (dm-0) 252:0 0 249800163328 0 crypt
├─elementary--vg-root (dm-1) 252:1 0 117734113280 0 lvm
└─elementary--vg-swap_1 (dm-2) 252:2 0 2038431744 0 lvm
sdb 8:16 0 120034123776 0 disk
└─sdb1 8:17 0 120034091520 0 part /media/ubuntu/ff08402
Нам нужно знать, какой размер должен иметь новый раздел crypt1, сделаем некоторые вычисления:
Calculate difference between logical volume sizes and crypt1 (from before we made any changes):
2038431744
+ 247757537280
= 249795969024
249800163328
- 249795969024
= 4194304
calculate the new crypt1 size (with the new changes):
2038431744
+ 117734113280
+ 4194304
= 119776739328
later we need the crypt1 size in blocks:
119776739328
/ 512
= 233938944
Прежде чем мы сможем уменьшить объем склепа, проверьте, в порядке ли объемы:
ubuntu@ubuntu:~$ sudo pvs -v --segments /dev/mapper/crypt1
Using physical volume(s) on command line
PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges
/dev/mapper/crypt1 elementary-vg lvm2 a-- 232.64g 121.09g 0 28070 root 0 linear /dev/mapper/crypt1:0-28069
/dev/mapper/crypt1 elementary-vg lvm2 a-- 232.64g 121.09g 28070 31000 0 free
/dev/mapper/crypt1 elementary-vg lvm2 a-- 232.64g 121.09g 59070 486 swap_1 0 linear /dev/mapper/crypt1:59070-59555
Нет, это не так, поэтому мне нужно было перенести своп в лучшее свободное место (на самом деле это значит заблокировать 28070):
sudo pvmove --alloc anywhere /dev/mapper/crypt1:59070-59555
И еще раз проверьте ваше распределение, чтобы освободить место в конце:
sudo pvs -v --segments /dev/mapper/crypt1
установить новый размер тома для crypt1
sudo pvresize --setphysicalvolumesize 119776739328b /dev/mapper/crypt1
sudo cryptsetup -b 233938944 resize crypt1
Продолжите с таблицей разделов, для этого выгрузите зашифрованный раздел:
sudo vgchange -an
sudo cryptsetup luksClose crypt1
Распечатайте и запишите где-нибудь свой текущий формат таблицы разделов:
ubuntu@ubuntu:~$ sudo fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 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
Disk identifier: 0x00082d72
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 499711 248832 83 Linux
/dev/sda2 501758 488396799 243947521 5 Extended
/dev/sda5 501760 488396799 243947520 83 Linux
Нам нужно знать, какой размер должна иметь новая таблица разделов, мы снова проведем некоторые вычисления:
reverse engineering blocks setup from current /dev/sda:
243947521
* 1024
- 1024
= 249802260480
size of other uses:
250059350016
- 249802260480
= 257089536
size for the new disk:
120034123776
- 257089536
= 119777034240
blocks for new disk:
119777034240
+ 1024
/ 1024
= 116969761
calculating end sector with new size:
488396799
+ 1
- 501758
/ 2
= 243947521
116969761
* 2
+ 501758
- 1
= 234441279
Теперь мы можем переопределить таблицу разделов новыми размерами:
ubuntu@ubuntu:~$ sudo fdisk /dev/sda
Command (m for help): d
Partition number (1-5): 5
Command (m for help): d
Partition number (1-5): 2
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
Partition number (1-4, default 2):
Using default value 2
First sector (499712-488397167, default 499712):
Using default value 499712
Last sector, +sectors or +size{K,M,G} (499712-488397167, default 488397167): 234441279
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (501760-234441279, default 501760):
Using default value 501760
Last sector, +sectors or +size{K,M,G} (501760-234441279, default 234441279):
Using default value 234441279
Command (m for help): p
Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 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
Disk identifier: 0x00082d72
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 499711 248832 83 Linux
/dev/sda2 499712 234441279 116970784 5 Extended
/dev/sda5 501760 234441279 116969760 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Небольшой тест: попробуйте загрузить новый зашифрованный том (или перезагрузиться без livecd) и проверить, можете ли вы получить доступ к данным (если вы не можете, вы где-то допустили ошибку и вам нужно перезапустить ее, используя резервную копию):
sudo cryptsetup luksOpen /dev/sda5 crypt1
sudo vgscan --mknodes
sudo vgchange -ay
Проверьте правильность своих расчетов, сравнив конечный блок с размером блока вашего меньшего диска:
ubuntu@ubuntu:~$ sudo fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 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
Disk identifier: 0x00082d72
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 499711 248832 83 Linux
/dev/sda2 499712 234441279 116970784 5 Extended
/dev/sda5 501760 234441279 116969760 83 Linux
ubuntu@ubuntu:~$ sudo fdisk /dev/sdb
Command (m for help): p
Disk /dev/sdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 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
Disk identifier: 0x000f335e
Device Boot Start End Blocks Id System
/dev/sdb1 63 234441647 117220792+ 83 Linux
перепроверьте свои расчеты с новой таблицей разделов:
/dev/sda total - sda5 end-block (in the beginning):
488397168
- 488396799
= 369
/dev/sdb total - sda5 end-block (after shrink):
234441648
- 234441279
= 369
было хорошо идти, именно тот размер, который мы хотим. поэтому следующим шагом будет дд от 0 до 234441648 (= общий размер /dev/sdb)
sudo dd if=/dev/sda of=/dev/sdb bs=1b count=234441648
И ты готов, сожми полный. Эта команда дд займет некоторое время, и вы не увидите никакого вывода. В моем случае это длилось около 6 часов.