Недавно я купил новый ноутбук и мне нужно было настроить его перед использованием. Но у меня не было настроения выполнять все те привычные шаги, о которых я рассказывал в предыдущем посте. Я пожаловался на это своему коллеге, и в ответ он предложил целиком копировать диск на новый ноутбук. Хотя эта идея показалась мне интересной, у меня возникли сомнения, которыми я поделился с ним.
-
У меня нет инструментов для вскрытия старого ноутбука и подключения нового диска через USB к новому ноутбуку.
-
Я использую полное шифрование диска, у старого ноутбука диск на 512 ГБ, а у нового — NVME на 1 ТБ; как менять размер LUKS, я не знаю.
Он ответил, что обе проблемы можно решить. На первом этапе можно просто открыть доступ к диску при помощи NVME over TCP, подключить его по сети и создать полную копию диска, а остальное сделать достаточно просто. Если вкратце, он предложил следующее:
-
Экспортировать диск, использовав из старого ноутбука nvmet-tcp.
-
Создать копию диска на новом ноутбуке.
-
Изменить размер раздела, чтобы использовать весь 1 ТБ.
-
Изменить размер LUKS.
-
Изменить размер корневого диска BTRFS.
Экспортируем диск через NVME TCP
Коллега сказал, что проще всего это сделать при помощи systemd-storagetm.service. Этот сервис можно вызвать, просто загрузившись в storage-target-mode.target, указав rd.systemd.unit=storage-target-mode.target. Но он рекомендовал не использовать это, потому что мне нужно настроить образ dracut initrd, чтобы задействовать сетевые сервисы, а также настроить из этого режима WiFi, а это довольно непростой процесс.
Поэтому вместо этого я просто запустил оба ноутбука с аварийным CD GRML. А для того, чтобы экспортировать диск NVME на новый ноутбук при помощи модуля nvmet-tcp Linux, я выполнил следующий шаг:
modprobe nvemt-tcp
cd /sys/kernel/config/nvmet
mkdir ports/0
cd ports/0
echo "ipv4" > addr_adrfam
echo 0.0.0.0 > addr_traaddr
echo 4420 > addr_trsvcid
echo tcp > addr_trtype
cd /sys/kernel/config/nvmet/subsystems
mkdir testnqn
echo 1 >testnqn/allow_any_host
mkdir testnqn/namespaces/1
cd testnqn
# replace the device name with the disk you want to export
echo "/dev/nvme0n1" > namespaces/1/device_path
echo 1 > namespaces/1/enable
ln -s "../../subsystems/testnqn" /sys/kernel/config/nvmet/ports/0/subsystems/testnqn
Эти команды гарантируют экспорт устройства при помощи NVME over TCP. Дальше нужно распознать это на новом ноутбуке и подключить устройство:
nvme discover -t tcp -a -s 4420
nvme connectl-all -t tcp -a <> -s 4420
В списке nvme отобразится устройство, подключенное к новому ноутбуку, и мы можем переходить к следующему этапу, а именно к копированию диска.
Копируем диск
Я просто воспользовался командой копирования корневого диска на новый ноутбук. Так как у нового ноутбука нет разъёма Ethernet, мне пришлось пользоваться только WiFi, и для копирования всех 512 ГБ на новый ноутбук понадобилось семь с половиной часов. Скорость копирования составляла примерно 18-20 МБ/с. Ещё одно решение заключалось бы в создании начального раздела и файловой системы с последующим выполнением rsync корневого диска или использованием непосредственно BTRFS для переноса файловой системы.
dd if=/dev/nvme2n1 of=/dev/nvme0n1 status=progress bs=40M
Меняем размер раздела и контейнера LUKS
Последняя часть была очень простой. После запуска parted он обнаружил, что таблица разделов не соответствует размеру диска и спросил, нужно ли исправить это, на что я ответил утвердительно. Дальше мне нужно было установить cloud-guest-utils, чтобы получить growpart для исправления второго раздела. Следующая команда расширила раздел на весь 1 ТБ:
growpart /dev/nvem0n1 p2
Дальше я использовал cryptsetup-resize для увеличения размера контейнера LUKS.
cryptsetup luksOpen /dev/nvme0n1p2 ENC
cryptsetup resize ENC
Далее я перезапустил диск, и всё заработало. После входа в систему я изменил размер файловой системы BTRFS. Для изменения размера BTRFS требует монтирования системы, поэтому я не мог попробовать это сделать при live boot.
btfs filesystem resize max /
Вывод
Единственный выигрыш от всего этого процесса заключается в том, что у меня теперь новый ноутбук, а я как будто продолжаю работать со старым. Обычно для полной настройки ноутбука требуется одна-две недели, но мне удалось сэкономить всё это время.
Кроме того, благодаря своему коллеге я научился экспортировать диски при помощи NVME over TCP.