Недавно я купил новый ноутбук, и мне нужно было настроить его перед использованием. Но у меня не было настроения выполнять все те привычные шаги, о которых я рассказывал в предыдущем посте. Я пожаловался на это своему коллеге, и в ответ он предложил целиком копировать диск на новый ноутбук. Хотя эта идея показалась мне интересной, у меня возникли сомнения, которыми я поделился с ним.
У меня нет инструментов для вскрытия старого ноутбука и подключения нового диска через 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 <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.
Комментарии (23)
c0r3dump
15.03.2024 09:06Интересно, в чем преимущество использования nvme-over-tcp по сравнению с простым созданием шифрованной фс на новом ноуте и переноса туда файлов по сети tar | nc или аналогичным способом? Я просто много лет уже как так делал, и совершенно не важно какие типы накопителей, файловых систем (в рамках совместимых). Я не говорю, что предложенный метод плох, просто интересуюсь.
datacompboy
15.03.2024 09:06+1скипается шаг создания разделов, настройки шифрования, настройки загрузчиков и проч.
Fox_exe
15.03.2024 09:06Как написали выше - dd+nc решает эту проблему целиком и полностью. (Всмысле - можно копировать хоть диск целиком, хоть конкретные разделы, хоть сами файлы из раздела).
13werwolf13
15.03.2024 09:06а если между dd и nc воткнуть pigz/zstd/lzo/etc то ещё и шустрее выйдет..
но всё равно интересное
c0r3dump
15.03.2024 09:06Как выше уже писали, в случае зашифрованного диска вряд ли сжатие что-то даст кроме дополнительной нагрузки на CPU, разве нет?
13werwolf13
15.03.2024 09:06На самом деле zstd даже на шифрованном диске даёт пусть не космическую, но достаточно заметную разницу чтобы это имело смысл, покрайней мере на моём опыте это было так.
RighteousHippie
15.03.2024 09:06А если ключ шифрование в чипе TPM2 ноутбука находится, тогда это всё не заработает?
Prototik
15.03.2024 09:06+1Спросит пароль для расшифровки диска, дальше уже на новом ноуте enroll'им новый ключ в tpm2.
MikhailZakharov
15.03.2024 09:06Может быть я чего-то не учитываю, но кажется, что clonezilla должна помочь: делаем копию на внешний диск. Разворачиваем копию на новый диск. Меняем размер после расшифровки и загрузки.
Prototik
15.03.2024 09:06+1В этой схеме есть пара просчётов:
Нужен внешний диск (который не всегда есть)
Время копирования увеличивается в два раза минимум (т.к. нужно делать два раза копию одного и того же), плюс возможно упереться в скорость этого самого внешнего диска, и проиграть ещё больше времени.
nixtonixto
15.03.2024 09:06+4Однако, учитывая отсутствие езернет-разъёма у автора статьи, и наличие USB-3 у большинства ноутбуков, старше 2011-го года, из-за более высокой скорости USB можно было бы потратить меньше времени.
axe_chita
15.03.2024 09:06+1А разве Clonezilla не умеет копировать диски напрямую между машинами через сеть?
adrozhzhov
15.03.2024 09:06+1Если ноутбук действительно старый, и ядро там не самое свежее, то и работа nvmet модуля может быть с неожиданностями.
ssh с перенаправлением вывода dd удалённой машины на вход локального dd (или наоборот) и надёжно, и секретно.
И никаких модулей ядра не надо.
(своё набивание шишек с nvme я описывал тут https://habr.com/ru/companies/beeline_tech/articles/770174/)
S-trace
15.03.2024 09:06+1А этот nvme-over-tcp лучше или хуже работает чем nbd или iscsi при соединении через интернет+wiregiard? У кого-нибудь есть подобный опыт?
okhsunrog
15.03.2024 09:06+3Тут предлагают разные способы решения этой проблемы. Добавлю и от себя один: если у вас btrfs или ZFS, можно сделать снэпшоты нужных разделов и отправить их через любой pipe. Хоть ssh, хоть netcat. И с флешки загружаться не надо на ноуте, с которого отправляете
CCNPengineer
15.03.2024 09:06есть ноутбук с виндоус 10 в корпоративной АД и зашифрованый диск. можно ли скопировать диск на съемный диск и запускать его на другом ноутбуке,?
CCNPengineer
15.03.2024 09:06ChatGPT
Ваша ситуация представляется сложной. Если диск зашифрован с использованием технологии, такой как BitLocker, и интегрирован в корпоративную сеть Active Directory (АД), есть несколько аспектов, которые следует учитывать:BitLocker шифрует диск с использованием ключей, связанных с конкретной системой. При копировании зашифрованного диска на другую систему ключи не совпадут, что приведет к невозможности расшифровки данных.
Blogoslov
15.03.2024 09:06А если тоже самое но диск не зашифрованный? Можно всё скопировать? Хочу скопировать и виртуализировать его через ProxMox и не таскать с собой с работы ноутбук. Тем более он используется только как тонкий клиент для связи с внутренними удалённым столами.
m0xf
Можно было воспользоваться netcat (nc) совместно с dd.
datacompboy
+1. Что-то типа
На отправителе мы будем видеть прогрессбар и оценку скорости отправки в сырых данных (байтах диска); на получателе будем видеть скорость передачи по вайваю (до распаковки), это позволит наблюдать за скоростью передачи и процентом сжатия :D
... сжатие только бесплоезно, раз диск зашифрован...
funca
Единственное, dd не стоит использовать когда диск примонтирован. Он работает ниже уровня файловой системы и если там что-то меняется за время копирования, то копия будет неконсистентной. Как вариант - клонировать снэпшот.
Incognito90
Можно было и dd через ssh