第 173 回東京エリア Debian 勉強会

grml-debootstrap を用いたUSB 起動メモリの作成
NOKUBI Takatsugu (野首 貴嗣)
knok@debian.org

2019-04-20

自己紹介

NOKUBI Takatsugu (野首 貴嗣)
knok@debian.org / knok@daionet.gr.jp
Twitter: @knok
Debian developer since 2002
bo 時代からのマシンを運用し続けているアジェンダUSB メモリを使う動機
grml-debootstrap 概要
セットアップ準備
設定
ブートローダーの設定

USB メ モ
リを使う
動機クリーンな環境を構築できる

内臓ストレージに影響なし
USB メモリ以外の手法
chroot 環境 (debootstrap)
daemon 類の扱いが面倒

コンテナ (LXC/LXD/Docker 等)
完全仮想環境 (VirtualBox, KVM 等)
物理デバイスを扱いたい時大変ポータブルな環境

物理マシンの環境を汚さない
大抵はライセンスされた proprietary OS が入っている
リカバリー領域、診断ツールなど

一つのメディアを複数のデバイスで使える
複数のデバイスを用意すれば異なる環境を用意できる
物理デバイスすべてを扱える
仮想環境と比較してNAS の起動デバイスとして (Microserver)

grmldebootstrap

grml-debootstrap

GRML Live Linux の一部
http://grml.org/
システム管理者向け Live Linux 環境
FAI に対応パッケージメンテナンス: Grml Team
関連ツール: grml-rescueboot, grml2usb
ソースコード:https://github.com/grml/grml-debootstrap

セット アップ準備

選定基準

用途と容量
デスクトップ用途なら 32GB もあれば十分ストレージを使わないサーバー用途なら 16GB 程度で十分速度
耐久性
安物はヘビーなアクセスが蓄積するとすぐ壊れる

パーティショニング

EFI に対応する
EFI 領域を分ける必要あり
GPT を使うオプション: MBR にも対応するなら 2048 セクタ目からパーティションを開始する

方針: スワップパーティションは作らない
root ファイルシステムの選択
ext4
f2fs - 最新の grub でしか対応していない点に注意実行例$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1
Command (? for help): nPartition number (1-128, default 1):
First sector (34-31358942, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-31358942, default = 31358942) or {+-}size{KMGTP}: +256M
Current type is ’Linux filesystem’
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to ’EFI System’
Command (? for help): nPartition number (2-128, default 2):
First sector (34-31358942, default = 526336) or {+-}size{KMGTP}:
Last sector (526336-31358942, default = 31358942) or {+-}size{KMGTP}:
Current type is ’Linux filesystem’
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to ’Linux filesystem’
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTINGPARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

インストールファイルシステム作成$ sudo mkfs.vfat -F32 /dev/sda1
mkfs.fat 4.1 (2017-01-24)
sudo mkfs -t f2fs /dev/sda2
F2FS-tools: mkfs.f2fs Ver: 1.7.0 (2016-07-28)

Info: Debug level = 0
Info: Label =Info: Trim is enabled
Info: Segments per section = 1
Info: Sections per zone = 1
Info: sector size = 512
Info: total sectors = 30832607 (15054 MB)
Info: zone aligned segment0 blkaddr: 256
Info: format version with"Linux version 4.18.0-0.bpo.1-amd64 (debian-kernel@lists.debian.org) (gcc ve
Info: Discarding device
Info: This device doesn’t support BLKSECDISCARD
Info: This device doesn’t support BLKDISCARD
Info: Overprovision ratio = 1.640%
Info: Overprovision segments = 249 (GC reserved = 129)
Info: format successful

マウントとセットアップ–efi オプションは EFI 環境で起動していないと動作しない点に注意$ sudo grml-debootstrap -m http://deb.debian.org/debian -r stretch -t /dev/sda* EFI support detected.
* grml-debootstrap [0.78] - Please recheck configuration before execution:
Target:Install grub:
Install efi:
Using release:
Using hostname:
Using mirror:
Using arch:
Config files:/dev/sda2/dev/sda/dev/sda1
stretchxps13
http://deb.debian.org/debian
amd64/etc/debootstrap

Important! Continuing will delete all data from /dev/sda2!
* Is this ok for you? [y/N] y* EFI partition /dev/sda1 seems to have a FAT filesystem, not modifying.
* Running mkfs.f2fs on /dev/sda2
F2FS-tools: mkfs.f2fs Ver: 1.7.0 (2016-07-28)
Info: Debug level = 0
Info: Label =Info: Trim is enabled

手作業

EFI パーティションの/EFI/BOOT 以下に BOOTX64.EFI という名称でファイルを配置# mount /dev/sda1 /mnt
# cd /mnt/EFI# mkdir BOOT
# cp /boot/efi/EFI/debian/grubx64.efi BOOT/BOOTX64.EFI# umount /mnt

同様に grub-efi-ia32 を用いて BOOT/BOOTx32.EFI を用意す
れば 32bit UEFI 対応もできる
MBR に書き込めば EFI/MBR 両対応も可能

動作確認

VirtualBox による動作確認
disk グループに追加
sudo adduser user disk
ログインし直すRaw disk に対応する vmdk の作成$ vboxmanage internalcommands createrawvmdk -filename \~/usb.vmdk -rawdisk /dev/sda

VirtualBox で仮想マシンを作成
ストレージに先程作成した usb.vmdk を指定
UEFI を有効化

起動参考文献
起動ストレージ
fstab, grub.cfg に UUID で記述

Networkif addr でインターフェース名を確認して dhclientTimezone
dpkg-reconfigure tzdata

Hardware Clock/etc/adjtime の末尾修正
LOCAL で RTC をローカル扱いにKeymapdpkg-reconfigure keyboard-configuration
https://wiki.debian.org/Keyboard
お好みで XKBOPTIONS=”ctrl:swapcaps”

参考文献

grml-debootstrap を紹介
インストーラを使わずストレージに Debian 環境を構築

USB メモリを使う動機
複数のデバイスで同じ環境を利用できる
メディアを分けることで異なる用途に使える起動マシンの環境を汚さない

UEFI 環境向けにデフォルトのブートローダーを配置
VirtualBox を動作テストに使える
細かい調整、パッケージの変更などもできる

参考文献

参考文献

参考文献

BIOS, UEFI 両方で起動可能な debian インストール USB
メディアを作る http://pman0214.github.io/blog/
debian-install-bios-efi.html
32bit UEFI 搭載の 2-in-1 PC に ubuntu14.04 をインストールした記録 https://qiita.com/shirotamago/
items/a4b0c8863a492abe50ad
Boot your USB Drive in VirtualBox
http://agnipulse.com/2009/07/
boot-your-usb-drive-in-virtualbox/

ファイルシステムについて
F2FS はどうか?
寿命は伸びるかも?(未検証)
USB メモリで TRIM は発行できるか
デバイス依存, hdparm -I で確認

stretch の grub2 は f2fs をサポートしていない/boot を別に作ることで対応可能

パフォーマンス
F2FS Benchmarks From USB Flash Storage (Phoronix)
https://www.phoronix.com/scan.php?page=
article&item=linux_f2fs_usb3&num=1
一長一短?