Назад
  15.03.2024
Клонируем ноутбук при помощи NVME over TCP

Недавно я купил новый ноутбук и мне нужно было настроить его перед использованием. Но у меня не было настроения выполнять все те привычные шаги, о которых я рассказывал в предыдущем посте. Я пожаловался на это своему коллеге, и в ответ он предложил целиком копировать диск на новый ноутбук. Хотя эта идея показалась мне интересной, у меня возникли сомнения, которыми я поделился с ним.

  1. У меня нет инструментов для вскрытия старого ноутбука и подключения нового диска через USB к новому ноутбуку.

  2. Я использую полное шифрование диска, у старого ноутбука диск на 512 ГБ, а у нового — NVME на 1 ТБ; как менять размер LUKS, я не знаю.

Он ответил, что обе проблемы можно решить. На первом этапе можно просто открыть доступ к диску при помощи NVME over TCP, подключить его по сети и создать полную копию диска, а остальное сделать достаточно просто. Если вкратце, он предложил следующее:

  1. Экспортировать диск, использовав из старого ноутбука nvmet-tcp.

  2. Создать копию диска на новом ноутбуке.

  3. Изменить размер раздела, чтобы использовать весь 1 ТБ.

  4. Изменить размер LUKS.

  5. Изменить размер корневого диска 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 <ip> -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.

Опубликуйте ваш комментарий

Required for comment verification