diary/Kojima/2019-06-02
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[diary/Kojima]]
○initrd の仕組み
Plamo-7.1で採用したinitrdは、正式には initramfs と呼ばれ...
カーネルと共にブートローダ(grub)によってメモリに読み込ん...
root filesystem をマウントするために必要なモジュール類を
カーネルに組み込むために使われます。
最初に生まれた initrd は、INITialize RamDisk の名前通り、
あらかじめ loopback 機能等を用いてファイルの形で作成した
ファイルシステムをRAMディスク上に展開するスタイルでした。
その後、あらかじめファイルシステムを用意しなくても利用...
ramfs が開発され、そこに任意サイズのcpioアーカイブを展...
ファイルシステムとして利用できるようになりました。
この第2世代の仕組みは initramfs という名称なものの、
grubのパラメータ等では initrd= ... という書式が定着して...
initramfs 用のファイルでも、名称は initrd.img-XXXX を使...
慣習になっています。そのため、本稿でも initrd/initramfs...
initrd を使っています。
initrdは、LiveCD等でも使われるものの、
主な用途はroot filesystem(fs)をマウントするために必要な
モジュール類のロードです。
Linuxも従っているUnixの伝統的な流儀では、
起動されたカーネルはCPUや周辺機器の初期化等、必要な処理を...
root fsをマウントし、
そこにある init コマンドに以後の処理を委ねるようになって...
この処理の流れを大きく変えずに済むように、
initrd にはカーネルから処理を引き継ぐinitコマンドが用意さ...
そのinitコマンドが必要とするツールやライブラリ一式を組み...
シンプルなroot filesystemになるように設計されています。
Plamo-7.1で採用しているinitrdは以下のような構造になってい...
$ ls
bin/ dev/ etc/ init* lib/ lib64@ proc/ run/ sbin...
ここにある init はシェルスクリプトで、
udevd を起動して接続されている周辺機器を確認し、
必要なモジュール類をカーネルに読み込ませてから、
カーネルパラメータの root=... で指定された真のroot fsをマ...
最終的に、switch_rootコマンドでroot fsを切り替える、とい...
後述する mkinitramfs が利用できるように、initrd用のinit...
/usr/share/mkinitramfs/init.in に収められているので、
動作を確認したい方はこのファイルをご参照下さい。
この init はシェルスクリプトなので、動かすためにはshell(b...
また、周辺機器の認識用の udevd、
必要なモジュールをロードする modprobe、
root fsをマウントするためのmount等が必要で、
さらにそれらが利用する各種ライブラリ等も必要となり、
それら一式が/binや/lib以下のディレクトリに収められていま...
$ ls bin
basename* cp* insmod@ kmod* ls* mkdir* mount* ...
cat* dd* killall* ln* lsmod@ mknod* readlin...
$ ls lib
firmware/ libcap.so.2* libm...
ld-linux-x86-64.so.2* libdevmapper-event.so.1.02* libm...
libacl.so.1* libdevmapper.so.1.02* libn...
libattr.so.1 libdl.so.2* libp...
libblkid.so.1* libkmod.so.2* libr...
libc.so.6* liblzma.so.5* libr...
$ ls sbin
blkid* lvdisplay@ lvscan@ pvchange@ pvscan@ ...
dmsetup* lvextend@ mdadm* pvck@ switch_roo...
lvchange@ lvm* mdmon* pvcreate@ udevadm* ...
lvcreate@ lvrename@ modprobe* pvdisplay@ udevd* ...
これらのファイルを含むため、Plamo-7.1の initrd は、圧縮状...
展開すると30MB程度のサイズになります。
initrd は小さい方が読み込み時間が短くてすみ、起動速度も...
かっては busybox 等を使ってサイズを削減する取り組みが行...
しかしながら、昨今のハードウェア環境ではそれほどサイズ...
最近では標準のglibc一式を使って、実環境と互換性を持たせ...
このinitrdにはカーネルのドライバ・モジュールが含まれてい...
カーネルを更新する際にはinitrdも合わせて更新する必要があ...
そこで、Plamo-7.1では initrd を作成するための /sbin/mkini...
/sbin/mkinitramfs は、
LFS方面で開発されたシェルスクリプトをPlamo用に調整したも...
必要なディレクトリ構造やデバイスファイルを作り、
システム環境から各種コマンドやライブラリをコピーした上で、
root fsをマウントする際に必要となりそうなモジュール類をコ...
cpioアーカイブにまとめた上で圧縮する、という処理を行いま...
具体的にどのようなファイル/モジュールをコピーするのかを...
/sbin/mkinitramfs をご覧ください。
mkinitramfs は initrd 上にデバイスファイルを作成するため、
実行にはroot権限が必要となります。
$ ls /lib/modules/
4.19.35/ 4.19.35-plamo64/ 5.1.5-plamo64/
$ sudo /sbin/mkinitramfs 5.1.5-plamo64
[sudo] kojima のパスワード:
Creating initrd.img-5.1.5-plamo64... .
...
$ ls -lh initrd.img-5.1.5-plamo64
-rw-r--r-- 1 root root 20M 6月 1日 12:48 initrd.img-5...
こうして作成したinitrdをカーネルと同じディレクトリ(/boot)...
/sbin/grub-mkconfig を実行すれば、
このinitrdを利用するgrub.cfgが作成されます。
以下の例では、test.cfg として試作しています。
$ sudo /sbin/grub-mkconfig -o test.cfg
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-5.1.5-plamo64
Found initrd image: /boot/initrd.img-5.1.5-plamo64
Linux イメージを見つけました: /boot/vmlinuz-4.19.35_plam...
Found initrd image: /boot/initrd.img-4.19.35_plamo64
Found Windows Boot Manager on /dev/sda2@/efi/Microsoft/B...
Found Plamo Linux release 7.0 on /dev/sda6
Found Plamo Linux release 7.0 on /dev/sda7
Found Plamo Linux release 7.0 on /dev/sdb3
完了
作成した設定ファイルを、MBR起動の場合は /boot/grub/grub.c...
UEFI起動の場合はESP(EFI System Partition)を/boot/efi にマ...
/boot/efi/grub/grub.cfg にコピーすれば、
新しく登録したカーネルやinitrdを起動することができます。
なお、grub-mkconfigはカーネルとinitrdを
バージョン番号(上記例では 5.1.5-plamo64)で対応づけるので、
両者が一致している必要があります。
特にPlamo環境では、"-"(ハイフン)と"_"(アンダースコア)を混...
#comment
終了行:
[[diary/Kojima]]
○initrd の仕組み
Plamo-7.1で採用したinitrdは、正式には initramfs と呼ばれ...
カーネルと共にブートローダ(grub)によってメモリに読み込ん...
root filesystem をマウントするために必要なモジュール類を
カーネルに組み込むために使われます。
最初に生まれた initrd は、INITialize RamDisk の名前通り、
あらかじめ loopback 機能等を用いてファイルの形で作成した
ファイルシステムをRAMディスク上に展開するスタイルでした。
その後、あらかじめファイルシステムを用意しなくても利用...
ramfs が開発され、そこに任意サイズのcpioアーカイブを展...
ファイルシステムとして利用できるようになりました。
この第2世代の仕組みは initramfs という名称なものの、
grubのパラメータ等では initrd= ... という書式が定着して...
initramfs 用のファイルでも、名称は initrd.img-XXXX を使...
慣習になっています。そのため、本稿でも initrd/initramfs...
initrd を使っています。
initrdは、LiveCD等でも使われるものの、
主な用途はroot filesystem(fs)をマウントするために必要な
モジュール類のロードです。
Linuxも従っているUnixの伝統的な流儀では、
起動されたカーネルはCPUや周辺機器の初期化等、必要な処理を...
root fsをマウントし、
そこにある init コマンドに以後の処理を委ねるようになって...
この処理の流れを大きく変えずに済むように、
initrd にはカーネルから処理を引き継ぐinitコマンドが用意さ...
そのinitコマンドが必要とするツールやライブラリ一式を組み...
シンプルなroot filesystemになるように設計されています。
Plamo-7.1で採用しているinitrdは以下のような構造になってい...
$ ls
bin/ dev/ etc/ init* lib/ lib64@ proc/ run/ sbin...
ここにある init はシェルスクリプトで、
udevd を起動して接続されている周辺機器を確認し、
必要なモジュール類をカーネルに読み込ませてから、
カーネルパラメータの root=... で指定された真のroot fsをマ...
最終的に、switch_rootコマンドでroot fsを切り替える、とい...
後述する mkinitramfs が利用できるように、initrd用のinit...
/usr/share/mkinitramfs/init.in に収められているので、
動作を確認したい方はこのファイルをご参照下さい。
この init はシェルスクリプトなので、動かすためにはshell(b...
また、周辺機器の認識用の udevd、
必要なモジュールをロードする modprobe、
root fsをマウントするためのmount等が必要で、
さらにそれらが利用する各種ライブラリ等も必要となり、
それら一式が/binや/lib以下のディレクトリに収められていま...
$ ls bin
basename* cp* insmod@ kmod* ls* mkdir* mount* ...
cat* dd* killall* ln* lsmod@ mknod* readlin...
$ ls lib
firmware/ libcap.so.2* libm...
ld-linux-x86-64.so.2* libdevmapper-event.so.1.02* libm...
libacl.so.1* libdevmapper.so.1.02* libn...
libattr.so.1 libdl.so.2* libp...
libblkid.so.1* libkmod.so.2* libr...
libc.so.6* liblzma.so.5* libr...
$ ls sbin
blkid* lvdisplay@ lvscan@ pvchange@ pvscan@ ...
dmsetup* lvextend@ mdadm* pvck@ switch_roo...
lvchange@ lvm* mdmon* pvcreate@ udevadm* ...
lvcreate@ lvrename@ modprobe* pvdisplay@ udevd* ...
これらのファイルを含むため、Plamo-7.1の initrd は、圧縮状...
展開すると30MB程度のサイズになります。
initrd は小さい方が読み込み時間が短くてすみ、起動速度も...
かっては busybox 等を使ってサイズを削減する取り組みが行...
しかしながら、昨今のハードウェア環境ではそれほどサイズ...
最近では標準のglibc一式を使って、実環境と互換性を持たせ...
このinitrdにはカーネルのドライバ・モジュールが含まれてい...
カーネルを更新する際にはinitrdも合わせて更新する必要があ...
そこで、Plamo-7.1では initrd を作成するための /sbin/mkini...
/sbin/mkinitramfs は、
LFS方面で開発されたシェルスクリプトをPlamo用に調整したも...
必要なディレクトリ構造やデバイスファイルを作り、
システム環境から各種コマンドやライブラリをコピーした上で、
root fsをマウントする際に必要となりそうなモジュール類をコ...
cpioアーカイブにまとめた上で圧縮する、という処理を行いま...
具体的にどのようなファイル/モジュールをコピーするのかを...
/sbin/mkinitramfs をご覧ください。
mkinitramfs は initrd 上にデバイスファイルを作成するため、
実行にはroot権限が必要となります。
$ ls /lib/modules/
4.19.35/ 4.19.35-plamo64/ 5.1.5-plamo64/
$ sudo /sbin/mkinitramfs 5.1.5-plamo64
[sudo] kojima のパスワード:
Creating initrd.img-5.1.5-plamo64... .
...
$ ls -lh initrd.img-5.1.5-plamo64
-rw-r--r-- 1 root root 20M 6月 1日 12:48 initrd.img-5...
こうして作成したinitrdをカーネルと同じディレクトリ(/boot)...
/sbin/grub-mkconfig を実行すれば、
このinitrdを利用するgrub.cfgが作成されます。
以下の例では、test.cfg として試作しています。
$ sudo /sbin/grub-mkconfig -o test.cfg
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-5.1.5-plamo64
Found initrd image: /boot/initrd.img-5.1.5-plamo64
Linux イメージを見つけました: /boot/vmlinuz-4.19.35_plam...
Found initrd image: /boot/initrd.img-4.19.35_plamo64
Found Windows Boot Manager on /dev/sda2@/efi/Microsoft/B...
Found Plamo Linux release 7.0 on /dev/sda6
Found Plamo Linux release 7.0 on /dev/sda7
Found Plamo Linux release 7.0 on /dev/sdb3
完了
作成した設定ファイルを、MBR起動の場合は /boot/grub/grub.c...
UEFI起動の場合はESP(EFI System Partition)を/boot/efi にマ...
/boot/efi/grub/grub.cfg にコピーすれば、
新しく登録したカーネルやinitrdを起動することができます。
なお、grub-mkconfigはカーネルとinitrdを
バージョン番号(上記例では 5.1.5-plamo64)で対応づけるので、
両者が一致している必要があります。
特にPlamo環境では、"-"(ハイフン)と"_"(アンダースコア)を混...
#comment
ページ名: