Ubuntu copy

やりたいこと

Ubuntu を dump & restore する
mdadm + LVM + root fs luks が簡単
luks は別記事で mdadm + LVM

イメージに必要なパッケージ

grub-efi-amd64-bin
grub-pc
mdadm
lvm2

環境変数設定

export disk1=sdb
export disk2=sdc
export hostname=hosoname
export vgname=vg${hostname}
export mdname=${hostname}:root
export mdpart=3

対象のデバイスが SSD の場合

前領域を開放する

blkdiscard ${disk1}
blkdiscard ${disk2}

パーティションを切る

disk1 と disk2 に対して実行
root fs を luks で暗号化する場合は /boot パーティションも切る
Cache SSD (勝手に命名) を搭載するなら SWAP は不要

parted /dev/${disk1}
parted /dev/${disk2}

UEFI からブートする場合

mklabel gpt
mkpart ESP fat32 1MiB 551MiB
mkpart SWAP  551MiB 4GiB
mkpart LVM 4GiB 100%
set 1 esp on
set 1 boot on
set 2 swap on
set 3 raid on

BIOS からブートする場合

mklabel gpt
mkpart bios_grub 1MiB 2MiB
mkpart SWAP  2MiB 4GiB
mkpart LVM 4GiB 100%
set 1 bios_grub on
set 2 swap on
set 3 raid on

mdadm setup

対象のデバイスがハードディスクの場合

sudo mdadm --create /dev/md0 --name=${mdname} --level=raid1 --raid-devices=2 /dev/${disk1}${mdpart} /dev/${disk2}${mdpart}

対象のデバイスが SSD の場合

--assume-clean をつけると Initlyze が走らない
はじめに全領域 TRIM(blkdiscard) しとけば差分は出ないハズ

sudo mdadm --create /dev/md0 --assume-clean --name=${mdname} --level=raid1 --raid-devices=2 /dev/${disk1}${mdpart} /dev/${disk2}${mdpart}

VLM setup & mkfs

容量やら PE Size やらはよしなに

sudo pvcreate /dev/md0
sudo vgcreate -s 32M ${vgname} /dev/md0
sudo lvcreate -n root -L 80G ${vgname}

fstype はよしなに

sudo mkfs.ext4 -U VVVVVVVV-WWWW-XXXX-YYYY-ZZZZZZZZZZZZ /dev/${vgname}/root

mount & restore

ここでは / のみだけど /home とかは必要に応じてよしなに

sudo mount /dev/${vgname}/root /mnt/

カレントディレクトリの変更をお忘れなく

cd /mnt/
sudo restore rf image.dmp

grub-install

grub の target は /usr/lib/grub/ を見ると判る

UEFI

カレントは /mnt のまま

sudo mkfs.vfat -F 32 -i XXXXZZZZ /dev/${disk1}1
sudo mount /dev/${disk1}1 boot/efi/

sudo mount -t proc proc proc/
sudo mount -t sysfs sys sys/
sudo mount -o bind /dev dev/
sudo mount -t devpts pts dev/pts/
sudo chroot /mnt/
grub-install --target=x86_64-efi /dev/${disk1}

disk2 側へのインストールはよしなに
esp 領域をコピーできればよい

sudo umount boot/efi/
sudo mount /dev/${disk2}1 boot/efi/
grub-install --target=x86_64-efi /dev/${disk1}

BIOS

カレントは /mnt のまま

sudo mount -t proc proc proc/
sudo mount -t sysfs sys sys/
sudo mount -o bind /dev dev/
sudo mount -t devpts pts dev/pts/
sudo chroot /mnt/
grub-install --target=i386-pc /dev/${disk1}
grub-install --target=i386-pc /dev/${disk2}

grub.cfg を作成

grub-mkconfig > /boot/grub/grub.cfg

mdadm.conf を作成

コマンド実行後メールアドレスの設定を忘れずに

/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf

fstab 設定

/ とか swap とか

残作業

  1. hostname 設定 おまけで hosts の書換えも忘れずに
echo "foo" > /etc/hostname
  1. ssh host finger print 更新
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server
  1. パスワード認証トラップ回避
rm /etc/ssh/sshd_config.d/50-cloud-init.conf

ディスク切り離し

uefi

exit
umount proc sys dev/pts dev boot/efi
cd
umount /mnt
vgchange -an ${vgname}

BIOS

exit
umount proc sys dev/pts dev
cd
umount /mnt
vgchange -an ${vgname}