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 とか
残作業
- hostname 設定 おまけで hosts の書換えも忘れずに
echo "foo" > /etc/hostname
- ssh host finger print 更新
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server
- パスワード認証トラップ回避
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}