Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2015年度の自宅NAS環境

13,336 views

Published on

2014/02/15 kernelvm night
setup system on dm-cache/lvm/dm-crypt/mdadm on debian jessie in UEFI

Published in: Engineering
  • Hello! High Quality And Affordable Essays For You. Starting at $4.99 per page - Check our website! https://vk.cc/82gJD2
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

2015年度の自宅NAS環境

  1. 1. 2015年度の 自宅NAS環境 ROOT ON DM-CACHE ON LVM ON DM-CRYPT ON MD(RAID1)をNATIVE UEFI 環境でセットアップ してみた Hiroaki Mizuguchi Twitter: @m_akihiro
  2. 2. AGENDA 初めに UEFIネイティブなブート環境について • Debian jessieを選んだ理由 • UEFI環境でのdm-cache/LVM/dm-crypt/RAID1なdebian install bootloaderの冗長化について • Gummibootと冗長化 Initramfs 回りについて • Cryptsetup(DM-Crypt)のrootディスク暗号化 • /に対するdm-cacheの有効化 これから
  3. 3. 初めに 自宅NASの構成変更をしたい。 • dm-cryptを使ってディスク全体を暗号化したい • 生半可な破壊だとコロンビア号のHDDが復元された事例もあるし、 ディスク暗号化が正解。復号キーは「忘れる」 by @dankogai • https://twitter.com/dankogai/status/545830557804802048 • 鍵の管理はどうするのか、起動時に手入力はつらい • 復旧しやすく冗長性を確保したディスク構成にしたい • Bootloaderも冗長化しよう • Grub2でdm-cryptとmdを併用するとパーティション数が辛い • UEFIならもう少し楽出来るはず • Kernelのアップデートごとに手動で設定するのは辛い
  4. 4. 初めに - 構築したシステム概略図 UEFI System sda:HDD sdb:HDD sdc:HDD Sdd:HDD sde SSD sdf USB sda1 UEFI sda2 RAID sdb1 UEFI sdb2 RAID sdc1 UEFI sdc2 RAID sdd1 UEFI sdd2 RAID md0: RAID1 md1: RAID1 md0_crypt: dm-crypt md1_crypt: dm-crypt sde1 crypt sdf1 key crypt LVM:vg0 root dm-cache swap ssd archive
  5. 5. 初めに - 構築したシステム概略図 UEFI System sda:HDD sdb:HDD sdc:HDD Sdd:HDD sde SSD sdf USB sda1 UEFI sda2 RAID sdb1 UEFI sdb2 RAID sdc1 UEFI sdc2 RAID sdd1 UEFI sdd2 RAID md0: RAID1 md1: RAID1 md0_crypt: dm-crypt md1_crypt: dm-crypt sde1 crypt sdf1 key crypt LVM:vg0 root dm-cache swap ssd archive UEFI bootの冗長化 Gummibootを利用し、/bootパーティションを用意しない
  6. 6. 初めに - 構築したシステム概略図 UEFI System sda:HDD sdb:HDD sdc:HDD Sdd:HDD sde SSD sdf USB sda1 UEFI sda2 RAID sdb1 UEFI sdb2 RAID sdc1 UEFI sdc2 RAID sdd1 UEFI sdd2 RAID md0: RAID1 md1: RAID1 md0_crypt: dm-crypt md1_crypt: dm-crypt sde1 crypt sdf1 key crypt LVM:vg0 root dm-cache swap ssd archive Initramfs段階でのUSBメモリからの鍵情報取得 パスフレーズなしの起動を実装
  7. 7. 初めに - 構築したシステム概略図 UEFI System sda:HDD sdb:HDD sdc:HDD Sdd:HDD sde SSD sdf USB sda1 UEFI sda2 RAID sdb1 UEFI sdb2 RAID sdc1 UEFI sdc2 RAID sdd1 UEFI sdd2 RAID md0: RAID1 md1: RAID1 md0_crypt: dm-crypt md1_crypt: dm-crypt sde1 crypt sdf1 key crypt LVM:vg0 root dm-cache swap ssd archive dm-cacheが有効なルート領域
  8. 8. DEBIAN JESSIEを選んだ理由 元々LVM on dm-crypt on MDが出来るインストーラーを持ってる UEFIブートのGummibootがDebian jessieからパッケージ入り • Grub2でbootloader冗長化は難しい Linux Kernel version • Jessieだとlinux 3.16が使用できる。 • 今後backportsで3.18以上も使えるようになるかも • OverlayFSやearth-pt3ドライバなどが使いたい • Wheezy: Linux 3.2、CentOS7: linux-3.10 mdadm version • bad block management対応してほしい • mdadm-3.3以上が必要 • wheezy: mdadm-3.2、CentOS7: mdadm-3.3
  9. 9. INSTALL DEBIAN JESSIE テスト環境 • Virtualbox 4.3.20 on windows7 64bits • Debian iso: debian-jessie-DI-rc1-amd64-netinst • Disk構成 • HDD: sd[abcd] 8GB • SSD: sde • USBメモリ: sdf 256MB インストーラーに従い手動でディスク構成を指定する • パーティションを切り • MDを組み • 暗号化ディスクを作り • LVMを組む
  10. 10. HDD4本 SSD USB MD 2組 LVM LUKS
  11. 11. Grub2をどこにインストールすればいいのか分からないエラー
  12. 12. DEBIAN INSTALL BATTLEの始まり • 金庫(暗号化されたLVM上のLV)の中に • 鍵(vmlinuzとinitrdがいる/boot)が入っている状況 • インストーラーの範囲外 • 手動インストールしかない Debian Install Battleの始まり • インストーラーを再起動させ、resucure modeに入る • MDも自動的に組ませることが出来る • Mdとdm-cryptの組み合わせは非対応なので手動対応
  13. 13. DEBIAN INSTALL BATTLE 手動でGUMMIBOOTをインストールする Installerのrescure modeからシェルを握る 暗号化ディスクをOpenする • cryptsetup luksOpen /dev/md0 md0_crypt • cryptsetup luksOpen /dev/md1 md1_crupt • cryptsetup luksOpen /dev/sde1 sde1_crupt LVMのVGを有効化する • vgchange -ay システム環境に入り、Gummibootをセットアップ • apt-get install gummiboot # install gummiboot • gummiboot [--path=/boot/efi] install # install bootloaer to esp • update-gummiboot [$(uname –r)] # ブートの設定
  14. 14. GUMMIBOOTによる UEFIブート gummiboot [--path=/boot/efi] install/status/remove/update • gummibootx64.efi やディレクトリを追加する
  15. 15. GUMMIBOOT UEFI BOOT PARTITIONの構造 Gummiboot • Only EFIStub kernel • UEFIパーティションで完結 • ファイルコピーのみで実現 構造 • /$(cat /etc/machine-id)/$(uname –r)/ • vmlinuz, initrdの格納場所 • /EFI/ • Bootloader 本体 • UEFIアプリケーション • /loader • loader.conf : config file • entries : boot設定 Bootloader本体 Kernel一式 設定ファイル一式 Arch wiki Gummiboot https://wiki.archlinux.org/index.php/Gummiboot Debian wiki EFIStub https://wiki.debian.org/EFIStub
  16. 16. GUMMIBOOT BOOTLOADERの冗長化 vmlinuzやinitramfsのインストールについて • /usr/sbin/update-gummibootがhookされている • /etc/kernel/post{inst,rm}.dや/etc/initramfs/post-update.dから • /bootからvmlinuzやinitramfsをコピー&boot entry file 生成 • 設定ファイル: /etc/defaut/gummiboot • GUMIBOOT_EFI=“/boot/efi” • EFI Boot Partionのマウントポイント • 複数指定できない • GUMIBOOT_ROOT=“” • Kernel parameterのROOTオプションに渡される • GUMIBOOT_OPTIONS=“ro quiet” • Kernel parameterとしてそのまま渡される
  17. 17. GUMMIBOOT BOOTLOADERの冗長化 update-gummibootの複数パーティション対応 • Patch書きました。 • 同様の提案はDebian Bug Reportに上がってたがrejectされた cd /usr/sbin wget -O - https://gist.github.com/akihiro/cb7af7ec6865da577a68/raw/ | patch –p0 • /etc/default/gummibootのGUMMIBOOT_EFIを拡張 • ”:”区切りによる複数のパスを指定可能に GUMMIBOOT_EFI=“/boot/efi-sda1:/boot/efi-sdb1:/boot-sdc1:/boot/efi-sdd1” update-gummiboot-multiesp.patch https://gist.github.com/akihiro/cb7af7ec6865da577a68 Debian Bug report logs - #755978 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755978
  18. 18. CRYPTSETUP - PASSPHRASEレスなBOOT • Cryptsetupは/etc/crypttabによりboot時にマウント可能 • ただしrootのマウントに対してはハックを必要とする。 • keyfileを単に設定だけでは機能しない • 必要な事 • cryptsetup luksAddKey /dev/md0 md0.key • USBメモリをマウントする為のモジュール組み込み(initramfs) • /etc/initramfs-tools/moduleへの必要モジュールの追記 • /etc/crypttabへのkeyscriptオプション追加 • Keyscriptのinitramfsへの組み込み • update-initramfs -u Encrypted root filesystem on Debian Wheezy https://gist.github.com/martijnvermaat/2726386
  19. 19. DM-CACHE ROOTへのDM-CACHE適用 Debian jessieではLVMからdm-cacheを扱える • man 7 lvmcache 参照 • Cache用にSSDからLVを用意し、cachepoolを作成 • lvcreate --L 1G --n cache0meta vg /dev/mapper/sde1_crypt • lvcreate --L 6G --n cache0 vg /dev/mapper/sde1_crypt • lvconvert --type cachepool --poolmetadata vg/cache0meta vg/cache0 • Root用LVにcacheを有効化する • lvconvert --type cache --cachepool vg/cache0 vg/root • オンラインでcache化、非cache化が可能 • 戻す場合はlvremove vg/cache0で可能 ただしこのまま再起動するとrootを認識できず死ぬ
  20. 20. DM-CACHE INITRAMFS再構成 initramfsにdm-cacheマウントに必要なファイル一式を入れる • apt-get install thin-provisioning-tools • cd /etc/initramfs-tools/hooks • wget –O lvmcache https://gist.github.com/akihiro/2b5ae2c55b7569f3935e/raw/ • chmod +x lvmcache • update-initramfs –u オリジナルからの変更点 • PREREQ変数の変更 • 前:PREREQ=“lvm2” • 後:PREREQ=“mdadm cryptroot lvm2” Debian User Forums: Booting Debian Jessie from an lvmcache http://forums.debian.net/viewtopic.php?f=5&t=119644
  21. 21. FUTURE WORK UEFI ネイティブな環境下での検証が出来たが 実機でうまくいくのだろうか? • UEFIのファームウェアの出来に左右される • $esp/EFI/boot/bootx64.efiからブートしてくれるなら問題ない • UEFIのbootentryの登録が上手くいくなら問題ない

×