Что делаем
У меня есть система 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 разделов.
Готово. Перезагружаемся и радуемся.
Discussion