Как перенести Linux вместе с Windows 10 на SSD

Иногда возникает такая необходимость, перенести уже существующую установленную и настроенную операционную систему на другой жесткий диск. Например это актуально после покупки ноутбука. Большинство бюджетных моделей комплектуются очень медленными HDD дисками, но имеют специальные разъемы для установки SSD дисков. Не секрет, что в наше время самая медленная аппаратная часть ПК это ПЗУ. В связи с этим переход на ssd несет множество преимуществ. Скорость чтения/записи возрастает в десятки раз, а это основной показатель быстродействия операционной системы. Есть множество утилит, которые помогут вам перенести систему на другой жесткий диск, но ситуация немного сложнее, если вы хотите перенести сразу две системы, одна из которых Linux. Перенести dualboot. В той статье я расскажу, как это возможно реализовать на примере Debian 9 и Windows 10.

Дано

Ситуация следующая: Есть ноутбук HP Omen ax232ur с 1Тб HDD.

На него была установлена Windows10, которая создала 4 раздела:

  • 1. recovery(ntfs)
  • 2. uefi_boot(fat32)
  • 3. windows(ntfs)
  • 4. какой-то системный 128мб. Соответственно все разделы основные, тк. таблица разделов gpt.

Система запустилась, работает хорошо.

Далее была произведена установка Debian 9 в режиме UEFI. Создано три дополнительных раздела:

  • 1. /
  • 2. /home
  • 3. /swap

Загрузчик Grub установился автоматически, определил Debian и Windows. Приоритет загрузки стоит UEFI с HDD. Все отлично работает, можно выбрать загрузочную запись.

Был приобретен ssd 240гб с разъемом M.2. Встала задача перенести обе системы на новый диск.

Перенос Windows 10

Сначала нужно перенести Windows 10. Я это сделал с помощью программы AOMEI Partition Assistant (перенос ОС на ssd) с предварительной разметкой ssd. Ничего сложно тут не было, просто следовал инструкциям программы. Система отлично загружается и работает если выбирать в настройках загрузки старт UEFI с ssd.

Перенос Linux

Дальше я вошел в небольшой ступор. Не мог до конца понять, как правильно перенести Linux вместе с загрузчиком. Насколько я понял, Grub установился на раздел uefi_boot. Чтобы перенести Linux, достаточно разметить дополнительные разделы для /home и / на ssd ну и swap перенести. С помощью livecd скопировать все данные из старых разделов в новые.

Постановка вопроса

Но как правильно скопировать разделы? Можно ли это сделать при помощи программы Gparted? Если да, то нужно ли потом менять UUID новых разделов? Как перенести загрузчик? Где прописать новые UUID разделов, чтобы стартовала система с ssd а не с hdd?

Реализация

  1. Для начала нужно сделать UEFI liveusb с puppy linux на борту. Для этого нужно скачать xenialpup64 вот отсюда: https://puppylinux.com/index.html#download. Далее вставляем флешку, удаляем на ней все разделы, создаем новую таблицу разделов gpt; и новый раздел fat32. Монтируем образ xenialpup.iso и копируем все данные с него на флешку. (Во время подготовки загрузочной флешки заметил одну странность – в образе был еще один образ, в котором лежал EFI загрузчик, пришлось смонтировать еще и его, и скопировать папку EFI в корневой раздел флешки рядом с данными с образа xenialpup.iso);
  2.  Далее загружаемся в Puppylinux;
  3. С помощью встроенной в Puppylinux программой Gparted ищем /, home старой системы, и подготовленные для них новые разделы на ssd;
  4. Монитируем их в /mnt/root-hdd, /mnt/home-hdd, /mnt/root-ssd, /mnt/home-ssd;
  5. Командой rsync с параметрами -avx копируем данные соответственно. Ключ -x у рсинка значит не переходить границы файловой системы, так что он не полезет в дебри /dev /proc и тд.;
  6. После успешного копирования осталось поправить uuid разделов диска в файле /etc/fstab и /boot/grub/grub.cfg на новые. Их можно посмотреть в том же Gparted;
  7. Далее надо записать загрузчик и обновить grub-config, для этого пробрасываем системные директории в новый диск (только тут есть трудности, связанные с UEFI). Тут sdX = ssd диск | sdXX = efi раздел, созданный после переноса Win10 | sdXXX = раздел / на ssd:
    • # mount /dev/sdXXX /mnt 
    • # mount /dev/sdXX /mnt/boot/efi
    • # for i in /dev /dev/pts /proc /sys /run; do mount -B $i /mnt$i; done
    • # chroot /mnt
    • # grub-install /dev/sdX
    • # update-grub
  8. Перезагружаем компьютер, грузимся с ssd. Все должно отлично работать, grub запускаться.
  9. Выбираем Debian, и тут возникает небольшая проблема. Система долго висит с мигающей нижней чертой, потом выдает ошибку: “gave up waiting for suspend/resume device”. После форматирования HDD, Linux потерял SWAP. Мало поправить UUID в /etc/fstab, еще нужно изменить UUID в файле /etc/initramfs-tools/conf.d/resume. Указать UUID нового SWAP раздела.
  10. Есть еще одна маленькая проблемка, после первой загрузки с ssd grub находит только Debian, Win10 там нет. Но после запуска Linux, нужно всего-лишь сделать update-grub и Win10 подтянется.
  11. JOBSDONE. Вот и все, остается лишь очистить старый диск от копии систем, и можно смело использовать его для хранения файлов и медиа.