SlideShare a Scribd company logo
initramfs: 仕組みとツール
(initramfs-tools, dracut, etc.)
        for TokyoDebian勉強会, 2011/4/16




                    @tyamadajp
initramfsとは?
・Linuxが実システム起動前に
 稼動させるpreboot環境

・起動に必要(例:/のデバイス
 認識)なドライバロード等をする

・とはいえ、普通のLinux環境なので
 様々な事に活用可能(されている)
initramfsとは?(具体的に)
・単にLinux環境をcpioで固めて、
 gzip等で圧縮したもの

・この内容がramfs上に展開され、
 中の/initが起動時に呼ばれる

・initの中身は色々
 → Debianではシェル(busybox)
   スクリプト → 拡張が簡単!
        ※nashとかいう酷い物体を使う可哀想な
         環境も世にはありました・・・
典型的な/initの流れ
1./proc/cmdlineから引数を読む
2.LAN/disk等のデバイスを有効化
3.MD/LVM/cryptfsなどの論理構成を
  さらに積み上げる
4.root=...で指定のデバイスを
  マウント
5.そこが/になるようmount+chroot
6.最後にinit=...での指定を起動
initramfsの中身
・普通のLinux環境を、「cpio -o -H
 newc」で固めるだけ(圧縮は任意

・が、普通に作ると巨大に・・・
 →レスキュー系では40MB gzipとか

・メモリ消費は一時の話だからOK。
 でも、起動が遅くなるのはマズー

→結局、busyboxやスクリプトで
 コンパクトにまとめる努力が必要
initramfs-tools and dracut
・カスタマイズ等、「まっとうな」
 initramfsを構築するツール
・イメージの生成処理と起動時の
 フック呼び出しを整理している
 →これがないと、手製initramfsに
  なって管理が面倒
 →生成時に独自ツールを含めたり、
  特殊なブート処理をさせられる

  ※最後はcpioするだけなので、initrd builderは
   他にも世にたくさんありますが、この2つはお勧め
initramfs-tools
・Debianでの定番
=特徴=
・機能分解/拡張ポイントが豊富で
 柔軟に高機能なinitramfsを生成
・多様なブート環境を作れる。また、
 update-initramfsと組み合わせて
 ほぼシステムを自動管理

例:カーネルを更新した→自動でu-i
例:mdadm/lvm/cryptsetup等を入れた
  →自動的にinitrdに組み込まれる
活用1:レスキュー能力強化
・kernel break=<stage> で各起動
 段階のpreboot環境のshに抜ける
  ・<stage>=top/modules/premount/mount/
       mountroot/bottom/init/...
  ・自由定義可能なので、探すならmaybe_breakでgrep
・この時、復旧用コマンドがあると
 便利。netboot環境とセットが○

=方法=
入れたいコマンドをコピーする
スクリプトをフックフォルダに入れる
活用1:/etc/initramfs-tools/hook/
 $ cat cttyhack
①#!/bin/sh

 case "$1" in
 prereqs) echo ""; exit 0;;           ②
 esac

 . /usr/share/initramfs-tools/hook-functions
 copy_exec /usr/local/bin/cttyhack /usr/bin
 copy_exec /usr/bin/setsid         /usr/bin

 exit 0
 ③                     ④
 →initramfs環境でjob control有効化
活用2:起動処理の拡張
・スクリプトを登録すると、主要な
 起動ポイントで呼び出してくれる
 ・init-top→init-premount→(local|nfs)-top
   →(local|nfs)-premount→(local|nfs)-bottom
    →init-bottom
  ・完全把握したい時は grep -r run_script


=方法=
/etc/initramfs-tools/scripts/*/に
スクリプトを置くだけ
活用2:起動処理の拡張(具体例)
例:scripts/init-bottom/rootaufs

・root deviceにtmpfsを重ねて
 rootfsをすり替える
・システムは同じように上がるが
 書き込みは全部tmpfsに行く
・悪い予感がするアップグレードに
・ファイル一切無変更でDVD/USBに
 コピるだけで稼動
        ※見てないけどたぶんDebianLiveと同じ
rootaufs(1)
#!/bin/sh
case "$1" in
prereqs) exit 0;;
esac
. /scripts/functions

for p in    `cat /proc/cmdline`; do
     case   "$p" in
     *=*)   eval $p;;
     *)     eval $p=1;;
     esac   2> /dev/null
done
test -n "$aufs" || exit 0
maybe_break aufs
rootaufs(2)
modprobe -q aufs || panic "[AUFS] Failed to..."
mkdir -p /ro /rw /aufs

rw_type=$(IFS=:; set -- $aufs;          echo "$1")
rw_opts=$(IFS=:; set -- $aufs;          echo "$2")
rw_path=$(IFS=:; set -- $aufs; shift 2; echo "$*")

case "$rw_type" in
nfs)
   nfsmount          -o   ${rw_opts:=rw} 
   ${rw_path:=none} /rw   || panic "[AUFS] Failed..."
   ;;
*)
   mount -t $rw_type -o   ${rw_opts:=rw} 
   ${rw_path:=none} /rw   || panic "[AUFS] Failed ..."
   ;;
esac
rootaufs(3)
## allocate space for xino
mkdir -p /rw/.aufs
mount -t tmpfs xino /rw/.aufs
## unionize /aufs = /ro + /rw
mount --move $rootmnt /ro
mount -t aufs -o dirs=/rw:/ro=ro,
xino=/rw/.aufs/.xino none /aufs || panic "..."
## switch to root-as-aufs
mkdir -p /aufs/ro /aufs/rw
mount --move /ro /aufs/ro
mount --move /rw /aufs/rw
mount --move /aufs $rootmnt
...
イメージ作成時の処理内容/mkinitramfs
1.miniroot用の空フォルダを作る

2.$base/hooks/* を呼ぶ(中でコピーしたりする)
 ※$base={/usr/share,/etc} 以下同様

3.$base/{init,scripts,conf.d} をコピー

4.$base/modules の指定モジュールをコピー

5.必須コマンドや基本モジュールセットをコピー

6.最後に cpio + ${COMPRESS:=gzip} で生成

他にもupdate-grub連携など生cpio+gzipにはない
細かい処理
dracut - RedHatによるパク^H^H回答
・RedHat系は従来イマイチだったが、
 これで自分的には名誉挽回
・ファイル名以外はi-tとほぼ同様

  動作設定:/etc/dracut.conf
イメージ生成:
 /usr/share/dracut/modules.d/*/
 {check,install,installkernel}
起動時フック:
 上のinstall*の中でスクリプト等を
 inst_*シェル関数で登録する
dracut構成(続)
・/init
 →/usr/share/dracut/modules.d/99base/initに

・起動時ブレークポイント(rdbreak=*)
 →cmdline/pre-udev/pre-trigger/initqueue/
  pre-mount/mount/pre-pivot

・起動時フック
 →emergency/cmdline/pre-udev/pre-trigger/
  pre-mount/pre-pivot
initramfs-tools vs dracut(1)
・同じ。でも初期状態が(Debian|Redhat)的

=比較(初期状態で)=
使い勝手:i-t > dracut
・i-tはシステム側と管理者側のファイルを
 自動集約するので分けて保持しやすい
・dracutは一箇所しか見ず、dracut.confでは
 指定するだけなので勝手が落ちる
・i-tは起動時フックしたければ、スクリプト
 書いてhooks/に置くだけ
・dracutはモジュールを登録して、その
 モジュールにスクリプトをコピーさせる
initramfs-tools vs dracut(2)
=比較=
モジュール度の高さ:dracut > i-t
・i-tはhooks/*とscripts/<stage>/*と分散し
 セットで管理しにくい
・dracutはmodules.d/<mod>/*に集中配置で、
 関係ファイルの把握が楽

処理の読みやすさ:dracut>i-t
・i-tはupdate-grub連携などDebian的機能も
 埋め込まれてるので、見通しが落ちる
・i-tの方が便利だが、単独の独自initramfs
 開発ツールとしてはdracut?
おまけ:initramfs TIPS
・initramfsはカーネルにも埋め込めるので、
 initrd=非対応でも使える
 →埋込はarch依存のもある(ようだ)が、
  see CONFIG_INITRAMFS_SOURCE
 →埋込initramfsにinitrd=がマージされる

・initramfsは複数ロードできる、上書き用
 initramfsを0+の後に連結でOK
 →ローダによるがinitrd=foo,bar,bazなど

・これ絡みのLinuxの互換性維持の努力に涙
 →initrd=<non-initramfs-image>の扱い
 →rootwait=やrootdelay=の扱い方とか

More Related Content

PDF
Physical Memory Management.pdf
Adrian Huang
 
PDF
initramfsについて
Kazuhiro Nishiyama
 
PDF
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
Adrian Huang
 
PPTX
Linuxのsemaphoreとmutexを見る 
wata2ki
 
PDF
[KubeCon NA 2020] containerd: Rootless Containers 2020
Akihiro Suda
 
PDF
Physical Memory Models.pdf
Adrian Huang
 
PDF
Linux女子部 systemd徹底入門
Etsuji Nakai
 
PDF
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Anne Nicolas
 
Physical Memory Management.pdf
Adrian Huang
 
initramfsについて
Kazuhiro Nishiyama
 
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
Adrian Huang
 
Linuxのsemaphoreとmutexを見る 
wata2ki
 
[KubeCon NA 2020] containerd: Rootless Containers 2020
Akihiro Suda
 
Physical Memory Models.pdf
Adrian Huang
 
Linux女子部 systemd徹底入門
Etsuji Nakai
 
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Anne Nicolas
 

What's hot (20)

PDF
Memory Management with Page Folios
Adrian Huang
 
PDF
LISA2019 Linux Systems Performance
Brendan Gregg
 
PPTX
Linux Network Stack
Adrien Mahieux
 
PDF
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
PDF
Memory Mapping Implementation (mmap) in Linux Kernel
Adrian Huang
 
PDF
[KubeConEU] Building images efficiently and securely on Kubernetes with BuildKit
Akihiro Suda
 
PPTX
Slab Allocator in Linux Kernel
Adrian Huang
 
PDF
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
 
PDF
LinuxのFull ticklessを試してみた
Hiraku Toyooka
 
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
 
PDF
20分でわかるgVisor入門
Shuji Yamada
 
PDF
Constexpr 中3女子テクニック
Genya Murakami
 
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
PDF
semaphore & mutex.pdf
Adrian Huang
 
PDF
Geep networking stack-linuxkernel
Kiran Divekar
 
PPT
Glibc malloc internal
Motohiro KOSAKI
 
PDF
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
 
PDF
OCIランタイムの筆頭「runc」を俯瞰する
Kohei Tokunaga
 
PPTX
Ceph アーキテクチャ概説
Emma Haruka Iwao
 
PDF
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
 
Memory Management with Page Folios
Adrian Huang
 
LISA2019 Linux Systems Performance
Brendan Gregg
 
Linux Network Stack
Adrien Mahieux
 
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
Memory Mapping Implementation (mmap) in Linux Kernel
Adrian Huang
 
[KubeConEU] Building images efficiently and securely on Kubernetes with BuildKit
Akihiro Suda
 
Slab Allocator in Linux Kernel
Adrian Huang
 
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
 
LinuxのFull ticklessを試してみた
Hiraku Toyooka
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
 
20分でわかるgVisor入門
Shuji Yamada
 
Constexpr 中3女子テクニック
Genya Murakami
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
semaphore & mutex.pdf
Adrian Huang
 
Geep networking stack-linuxkernel
Kiran Divekar
 
Glibc malloc internal
Motohiro KOSAKI
 
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
 
OCIランタイムの筆頭「runc」を俯瞰する
Kohei Tokunaga
 
Ceph アーキテクチャ概説
Emma Haruka Iwao
 
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
 
Ad

Similar to Introduction to Initramfs - Initramfs-tools and Dracut (20)

PDF
Infinite Debian - Platform for mass-producing system every second
Taisuke Yamada
 
PDF
Mincs 日本語版
Masami Hiramatsu
 
PDF
IaaSクラウドを支える基礎技術 演習編_v1_0
Etsuji Nakai
 
PPTX
無印Pentium debian install memo
Yukiyoshi Yoshimoto
 
PDF
MINCS – containers in the shell script
Masami Hiramatsu
 
PDF
20170124 linux basic_1
YUSUKE MORIZUMI
 
PPTX
Preseeding Debian
Emma Haruka Iwao
 
PDF
Ext4 filesystem(1)
Yoshihiro Yunomae
 
PDF
InfiniBand on Debian
Taisuke Yamada
 
PPTX
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
Preferred Networks
 
PDF
Btrfsの基礎 part1 機能編
fj_staoru_takeuchi
 
PDF
Kernel ext4
Kai Sasaki
 
PPTX
initとプロセス再起動
Takashi Takizawa
 
PPTX
2015年度の自宅NAS環境
Hiroaki Mizuguchi
 
PDF
ZFS on Linux @ZFS Day 2011.10
Kazuhisa Hara
 
PDF
バックアップに一番いいファイルシステムを頼む
Kenichiro MATOHARA
 
PDF
AndroidとSELinux
android sola
 
PDF
qemuのriscv64にDebianを入れてみた
Kazuhiro Nishiyama
 
PDF
LinuxでZFSを使ってみた
nvsofts
 
PDF
Android組み込み開発テキスト pandaboard es編
OESF Education
 
Infinite Debian - Platform for mass-producing system every second
Taisuke Yamada
 
Mincs 日本語版
Masami Hiramatsu
 
IaaSクラウドを支える基礎技術 演習編_v1_0
Etsuji Nakai
 
無印Pentium debian install memo
Yukiyoshi Yoshimoto
 
MINCS – containers in the shell script
Masami Hiramatsu
 
20170124 linux basic_1
YUSUKE MORIZUMI
 
Preseeding Debian
Emma Haruka Iwao
 
Ext4 filesystem(1)
Yoshihiro Yunomae
 
InfiniBand on Debian
Taisuke Yamada
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
Preferred Networks
 
Btrfsの基礎 part1 機能編
fj_staoru_takeuchi
 
Kernel ext4
Kai Sasaki
 
initとプロセス再起動
Takashi Takizawa
 
2015年度の自宅NAS環境
Hiroaki Mizuguchi
 
ZFS on Linux @ZFS Day 2011.10
Kazuhisa Hara
 
バックアップに一番いいファイルシステムを頼む
Kenichiro MATOHARA
 
AndroidとSELinux
android sola
 
qemuのriscv64にDebianを入れてみた
Kazuhiro Nishiyama
 
LinuxでZFSを使ってみた
nvsofts
 
Android組み込み開発テキスト pandaboard es編
OESF Education
 
Ad

More from Taisuke Yamada (20)

PDF
ウェブパフォーマンス計測の落とし穴
Taisuke Yamada
 
PDF
DIY Akamai Globe in 50 Minutes
Taisuke Yamada
 
PDF
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
Taisuke Yamada
 
PDF
Quick QUIC Technical Update (2017)
Taisuke Yamada
 
PDF
IoT Deep Dive - Be an IoT Developer for an Hour
Taisuke Yamada
 
PDF
Pythonではじめるソフトウェア無線
Taisuke Yamada
 
PDF
Getting Started with SDR in Python
Taisuke Yamada
 
PDF
VSCode Remoteでも画像コピペがしたいです!
Taisuke Yamada
 
PDF
Hacking Ruby with Python
Taisuke Yamada
 
PDF
Invitation to Kernel Parameter and Code Exploration
Taisuke Yamada
 
PDF
Charity Items from Debian JP Project
Taisuke Yamada
 
PDF
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
Taisuke Yamada
 
PDF
Hadoop book-2nd-ch3-update
Taisuke Yamada
 
PDF
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
Taisuke Yamada
 
PDF
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
Taisuke Yamada
 
PDF
201012 cacert-at-tokyodebian
Taisuke Yamada
 
PDF
Nilfs usage-report-and-comparison-at-tokyodebian
Taisuke Yamada
 
PDF
Casual Web-browsing with gPXE and SYSLINUX
Taisuke Yamada
 
PDF
Embed Shogiboard - my first mediawiki extension -
Taisuke Yamada
 
PDF
The Web That Wasn't - WikiBana #10 LT
Taisuke Yamada
 
ウェブパフォーマンス計測の落とし穴
Taisuke Yamada
 
DIY Akamai Globe in 50 Minutes
Taisuke Yamada
 
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
Taisuke Yamada
 
Quick QUIC Technical Update (2017)
Taisuke Yamada
 
IoT Deep Dive - Be an IoT Developer for an Hour
Taisuke Yamada
 
Pythonではじめるソフトウェア無線
Taisuke Yamada
 
Getting Started with SDR in Python
Taisuke Yamada
 
VSCode Remoteでも画像コピペがしたいです!
Taisuke Yamada
 
Hacking Ruby with Python
Taisuke Yamada
 
Invitation to Kernel Parameter and Code Exploration
Taisuke Yamada
 
Charity Items from Debian JP Project
Taisuke Yamada
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
Taisuke Yamada
 
Hadoop book-2nd-ch3-update
Taisuke Yamada
 
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
Taisuke Yamada
 
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
Taisuke Yamada
 
201012 cacert-at-tokyodebian
Taisuke Yamada
 
Nilfs usage-report-and-comparison-at-tokyodebian
Taisuke Yamada
 
Casual Web-browsing with gPXE and SYSLINUX
Taisuke Yamada
 
Embed Shogiboard - my first mediawiki extension -
Taisuke Yamada
 
The Web That Wasn't - WikiBana #10 LT
Taisuke Yamada
 

Recently uploaded (9)

PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 

Introduction to Initramfs - Initramfs-tools and Dracut