[linux]作業メモ:luks で暗号化した EFI ベースの notepc で HDD を換装した際の作業記録
単なる自分メモ。
1. GParted で GPT で partitioning
- EFI System Parition を作る。 (sdb1)
- サイズは 384MB にしてみた
- format 実行するまでは boot フラグが立てられなかった? 気のせい?
- フラグを立てる画面に esp フラグもあるので、これを立てる
- /boot も作る (sdb2)
- 最後の一つを unformated で確保 (sdb3)
2. /boot/efi をベタコピー
mount /dev/sdb1 /mnt/tmp
cp -va /boot/efi/* /mnt/tmp
umount /mnt/tmp
3. /boot をベタコピー
mount /dev/sdb2 /mnt/tmp rsync -av -x -A -X /boot/ /mnt/tmp umount
- pax -r -w -X -pe だと何かエラー出た。 selinux?
4. luks
cryptsetup luksFormat /dev/sdb3
cryptsetup luksOpen /dev/sdb3 newsecure
pvcreate /dev/mapper/newsecure
vgcreate vghk16 /dev/mapper/newsecure
vgchange -ay vghk16
5. (今回は lv の統合も行う)
mkdir /mnt/srcimg lv=/dev/vghk15/root snap=snap-$lv:t lvcreate --snapshot --name $snap -L2G $lv mount -r /dev/vghk15/$snap /mnt/srcimg function lvsnap {lv=$1; snap=snap-$lv:t; lvcreate --snapshot --name $snap -L2G $lv} lvsnap /dev/vghk15/var mount -r /dev/vghk15/$snap /mnt/srcimg/var lvsnap /dev/vghk15/libvirt_images mount -r /dev/vghk15/$snap /mnt/srcimg/var/lib/libvirt/images mkdir /mnt/destimg mkfs.ext4 -m 1 /dev/vghk16/root mount /dev/vghk16/root /mnt/destimg lvcreate --name var.log --size 8G /dev/vghk16 mkfs.ext4 -m 1 /dev/vghk16/var.log mkdir -p /mnt/destimg/var/log mount /dev/vghk16/var.log /mnt/destimg/var/log time rsync -a -A -X /mnt/srcimg/ /mnt/destimg umount /dev/vghk15/snap-libvirt_images /dev/vghk15/snap-var /dev/vghk15/snap-root lvremove -f /dev/vghk15/snap-libvirt_images /dev/vghk15/snap-var /dev/vghk15/snap-root time hktools/sysadm/lvsnapbackup.zsh /dev/vghk16/ /dev/vghk15/home /dev/vghk15/*.hkoba
… snapshot 作成と mount は一つの関数にまとめるべきだった…読みづらい…
6. lvm vg name と luks の uuid 更新.
前回のメモ>
fedora のディスク暗号化をやり直す場合のメモ。
— hkoba (@hkoba) August 25, 2014
lv を restore したら /etc/crypttab と /etc/default/grub の luks 行を書き換えて、 grub2-mkconfig で grub.cfg を作り直す
今回も grub2-mkconfig 使うべき所を変に気を回して失敗した。
以下は本来こうすべきだったはず!という事後の想像>
volume group 名の変化への対処
HDD 引越しで Fedora が起動しなくなるのは大抵 fstab の書き損じ。
- 最後に chroot して mount -a 通るまで確認するべきだった。
- lv を削ったので fstab 編集は必須
/boot
と/boot/efi
については/dev/sda1
とかに書き換える方法だと chroot からの mount -a での確認が出来ない (この時点では sdb1 とかだから)。 だから真面目に uuid の置き換えをやるべきだった。
- 一度やり直しが発生したせいで、fstab の確認が甘くなった。 (こういう再演をもっと確実にこなすには…?)
files=(/etc/fstab /etc/default/grub) sed -i -e "s/vghk15/vghk16/g" /mnt/destimg$^files vim /mnt/destimg/etc/fstab
luks uuid の変化への対処
files=(/etc/crypttab /etc/default/grub) read vol olduuid rest < /etc/crypttab newuuid=$(cryptsetup luksUUID /dev/sdb3) sed -i -e "s/$olduuid[6,-1]/$newuuid/g" /mnt/destimg$^files
7. chroot して、 dracut
mount -t proc none /mnt/destimg/proc mount -t sysfs none /mnt/destimg/sys mount -t devtmpfs none /mnt/destimg/dev chroot /mnt/destimg
chroot 内での作業
mount -a が上手く行くか確認し、大丈夫なら initramfs と grub2-efi.cfg を生成し直す。
mount -a dracut --force # 確認 lsinitrd -f etc/crypttab grub2-mkconfig -o /etc/grub2-efi.cfg exit
…余談…
この時作った chroot 空間の中で zsh の行編集の一部 (Ctrl キーと alphabet の組み合わせだけ)が 無効になってて…これは何が原因なのか、どなたかご存知でしたら是非ツッコんで下され〜
8. umount
umount /mnt/destimg/boot/efi /mnt/destimg/boot umount /mnt/destimg/{proc,sys,dev} umount /mnt/destimg grep sdb /proc/mounts
で、後は物理交換して再起動するだけ(のはずだった…次こそは一発でやりとげたいなぁ…)
結末
よし、新 HDD で desktop までたどり着いた!
— hkoba (@hkoba) April 10, 2016
% sudo vgs
— hkoba (@hkoba) April 10, 2016
VG #PV #LV #SN Attr VSize VFree
vghk16 1 10 0 wz--n- 930.13g 624.13g
%
ディスクにも余裕出来たし、めでたし。
.oO(…いっそ systemd が top 的な物まで取り込んでくれたら、心穏やかに boot を見守れるようになるのかもしれん…)
— hkoba (@hkoba) April 10, 2016
@hkoba はじめての systemctl enable debug-shell .
— hkoba (@hkoba) April 10, 2016
起動時に top 取れて幸せ。
なんだ setfiles(8) くんが時間掛かってたのか~(白目
追記. 更に後日談
/var/log
を新たに lv として分けてあったのに、 fstab に書き忘れてて全然活かせてなかったと後で気付いた。
これも最初は正しいつもりの fstab を書き上げた後で、手戻りが発生したことで抜けになったケース。
そう言えば、増やした lv の fstab への書き忘れは mount -a でも検出できないなぁ…
折角 /etc を git で管理してあるのだから、一旦 git diff
で変更を保存しておいて、
後で git apply
すれば良かったと、今更ながら思う。