Table of Contents

Что делаем

У меня есть система Ubuntu 16.04, которая установлена на единственном разделе ext4 на диске /dev/sda.
Я подключаю другой диск и хочу перенести всю систему на него, а кроме того изменить разбивку разделов, выделив отдельный /boot.

Приступаем

Разбиваю диск. Отдаю 512Mb на /boot, 16Gb на swap (чтобы работал hibernate), а остальное в раздел brtfs.
Затем монтирую эти разделы и переношу на них данные:

sudo mkdir /mnt/restore
sudo mount /dev/sdb5 /mnt/restore/
sudo mkdir /mnt/restore/{mnt,sys,run,dev,proc,media,tmp}
sudo mkdir --parents /mnt/restore/var/log/
sudo touch /mnt/restore/var/log/lastlog
sudo chmod -R a+rw /mnt/restore/tmp
sudo rsync -av --exclude=/mnt --exclude=/sys --exclude=/run --exclude=/dev --exclude=/proc --exclude=/media --exclude=/tmp --exclude=/var/log/lastlog --exclude=/boot / /mnt/restore/
sudo rsync -av /boot /mnt/boot
#sudo grub-install --boot-directory=/mnt/boot --root-directory=/mnt/restore /dev/sdb

Затем нужно поправить файлик /etc/fstab на новом диске и прописать туда UUID новых разделов /boot и /.
В первый раз, когда я делал это, для новго раздела btrfs я сохранил опции монтирования, которые оставались от раздела ext4. Это было ошибкой, которая привела к тому, что загружалось ядро, а дальше загрузка останавливалась без каких бы то ни было ошибок. исправить все удалось выставив в поле опций монтирования defaults.

blkid /dev/sdb1
blkid /dev/sdb5
sudo nano /mnt/restore/etc/fstab

Теперь надо установить GRUB:

sudo mount /dev/sdb5 /mnt/restore/
sudo rm /mnt/restore/boot/* -Rf
sudo mount --bind /dev /mnt/restore/dev/
sudo mount --bind /proc /mnt/restore/proc/
sudo mount --bind /sys /mnt/restore/sys/
sudo mount --bind /mnt/boot /mnt/restore/boot
sudo mount /dev/sdb1 /mnt/boot/
sudo mount --bind /mnt/boot /mnt/restore/boot
sudo chroot /mnt/restore/
grub-install /dev/sdb
update-grub
exit

update-grub нужен для того, чтобы в grub.cfg изменились UUID разделов.
Готово. Перезагружаемся и радуемся.