Это не универсальная инструкция, просто шпаргалка для себя. Мог что-то упустить 
- Форматируем новый винт. Записываем (копируем в текстовый редактор и т.п.) UUID будущего корневого раздела. Делаем этот раздел загрузочным (активным) (включаем флаг "boot").
- Монтируем его, например, в /mnt/tmp.
- Копируем файлы: cd /mnt/tmp && sudo cp -apxuR /* .
Можно добавить -v для печати имён файлов в процессе работы, но это сильно замедляет копирование.
- Правим /mnt/tmp/fstab (заменяем UUID для "/" на новый).
- Правим /mnt/tmp/boot/grub/grub.cfg (заменяем UUID корневого диска на новый).
- Проецируем системные каталоги в /mnt/tmp, чтобы сделать chroot:
sudo mount -o bind /dev/ /mnt/tmp/dev
sudo mount -t proc none /mnt/tmp/proc
sudo mount -t sysfs none /mnt/tmp/sys
- sudo chroot /mnt/tmp
- sudo grub-install /dev/sdXXXX (Имя устройства, а не раздела!) Примечание: на некоторых машинах grub-install может занять несколько минут, а то и полчаса. Прерывать его не нужно, дайте доработать.
После этого перезагружаемся, выбирая при необходимости новый диск в качестве стартового в BIOS. Если всё ОК, можно отключать или форматировать и переиспользовать старый диск.