User:Massimo B./Migration

From Gentoo Wiki
Jump to:navigation Jump to:search

Gentoo Migration to new drive or machine [DRAFT, not ready)

This guide is my personal cheat sheet on how to migrate my Gentoo installation to a new drive or machine. My Gentoo installation is based on btrfs-on-luks.

Rebuild on source hardware

If the build is incompatible for the new target machine, it might be necessary to rebuild all on the old hardware.

root #btrfs subvolume snapshot /mnt/btrfs-top-lvl/root /mnt/btrfs-top-lvl/root.rebuild RootCmd
root #mkdir /mnt/gentoo RootCmd
root #mount --bind /mnt/btrfs-top-lvl/root.rebuild /mnt/gentoo RootCmd
root #mount --types proc /proc /mnt/gentoo/proc RootCmd
root #mount --rbind /sys /mnt/gentoo/sys RootCmd
root #mount --rbind /dev /mnt/gentoo/dev RootCmd
root #mount --bind /run /mnt/gentoo/run RootCmd
root #chroot /mnt/gentoo /bin/bash

Choose some CFLAGS compatible to both platforms, old and new:

FILE /etc/portage/make.conf/local
CFLAGS="-march=x86-64-v3"

Re-emerge all:

root #emerge -e -atv @world

Partitioning

Example:

# Device           Start        End    Sectors  Size Type
# /dev/nvme1n1p1    2048      26623      24576   12M EFI System
# /dev/nvme1n1p2   26624    1075199    1048576  512M Linux filesystem
# /dev/nvme1n1p3 1075200 1953523711 1952448512  931G Linux filesystem

Migration

root #mkfs.vfat -F 12 -n EFI /dev/nvme1n1p1 RootCmd
root #mkfs.ext4 -L boot /dev/nvme1n1p2 RootCmd
root #cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 /dev/nvme1n1p3
  1. TODO: --hw-opal, --iter-time 5000, --pbkdf-memory 2097152, --pbkdf-parallel 4
root #cryptsetup luksAddKey /dev/nvme1n1p3 RootCmd
root #cryptsetup luksOpen --allow-discards --persistent /dev/nvme1n1p3 _new_gentoo RootCmd
root #mkfs.btrfs -L gentoo /dev/mapper/_new_gentoo RootCmd
root #mkdir /mnt/new-btrfs-top-lvl RootCmd
root #cryptsetup luksOpen /dev/sdb4 _old_gentoo RootCmd
root #mkdir /mnt/old-btrfs-top-lvl RootCmd

{{

RootCmd|btrfs subvolume list /mnt/old-btrfs-top-lvl | grep -v snapshots | grep -v archive|output=

    ID 262 gen 439143 top level 5 path volumes/home
    ID 264 gen 439143 top level 5 path volumes.nosnap/tmp
    ID 265 gen 438955 top level 5 path volumes.nosnap/usr.portage
    ID 266 gen 438737 top level 5 path volumes.nosnap/usr.src
    ID 267 gen 439144 top level 5 path volumes.nosnap/var.cache
    ID 268 gen 438955 top level 5 path volumes.nosnap/var.db.repos
    ID 270 gen 438957 top level 5 path volumes.nosnap/var.tmp
    ID 271 gen 437369 top level 5 path volumes/vm
    ID 274 gen 438724 top level 5 path volumes/data
    ID 275 gen 439144 top level 5 path volumes/root<pre>}}

<pre>
cd /mnt/new-btrfs-top-lvl
mkdir -vp snapshots/root snapshots/home snapshots/data snapshots/vm
mkdir -vp volumes volumes.nosnap .beeshome rescue archive
for sub in data home root vm ; do btrfs subvolume snapshot -r /mnt/old-btrfs-top-lvl/volumes/$sub /mnt/old-btrfs-top-lvl/volumes/$sub.ro ; done
for sub in tmp usr.portage usr.src var.cache var.db.repos var.tmp ; do btrfs subvolume snapshot -r /mnt/old-btrfs-top-lvl/volumes.nosnap/$sub /mnt/old-btrfs-top-lvl/volumes.nosnap/$sub.ro ; done
for sub in data home root vm ; do btrfs send /mnt/old-btrfs-top-lvl/volumes/$sub.ro | mbuffer -v 1 -m 5% | btrfs receive /mnt/new-btrfs-top-lvl/volumes ; done
for sub in tmp usr.portage usr.src var.cache var.db.repos var.tmp ; do btrfs send /mnt/old-btrfs-top-lvl/volumes.nosnap/$sub.ro | mbuffer -v 1 -m 5% | btrfs receive /mnt/new-btrfs-top-lvl/volumes.nosnap ; done
btrfs subvolume delete /mnt/old-btrfs-top-lvl/volumes*/*.ro
for sub in data home root vm ; do btrfs subvolume snapshot /mnt/new-btrfs-top-lvl/volumes/$sub.ro /mnt/new-btrfs-top-lvl/volumes/$sub ; done
for sub in tmp usr.portage usr.src var.cache var.db.repos var.tmp ; do btrfs subvolume snapshot  /mnt/new-btrfs-top-lvl/volumes.nosnap/$sub.ro /mnt/new-btrfs-top-lvl/volumes.nosnap/$sub ; done
btrfs subvolume delete /mnt/new-btrfs-top-lvl/volumes*/*.ro
mkdir -v /mnt/gentoo
mount --bind /mnt/new-btrfs-top-lvl/volumes/root/ /mnt/gentoo

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run

chroot /mnt/gentoo /bin/bash