タグ付けされた質問 「initrd」

initrdは、Linuxカーネルの起動プロセス中に一時ファイルシステムをメモリにロードする方法です。

6
initrdに「カーネル」というディレクトリが1つしかないのはなぜですか?
debian live-buildを使用して、ブート可能なシステムで動作します。プロセスの終わりまでに、squashfsファイル、いくつかのGRUBモジュールと設定ファイル、initrd.imgファイルなど、ライブシステムの起動に使用される一般的なファイルを取得します。 これらのファイルを使用して問題なく起動でき、initrdを介してカーネルに渡すことができます。 initrd=/path/to/my/initrd.img ブートローダーのコマンドラインで。しかし、次のようにinitrdイメージの内容を調べようとすると: $file initrd.img initrd.img: ASCII cpio archive (SVR4 with no CRC) $mkdir initTree && cd initTree $cpio -idv < ../initrd.img 私が得るファイルツリーは次のようになります: $tree --charset=ASCII . `-- kernel `-- x86 `-- microcode `-- GenuineIntel.bin 実際のファイルシステムツリーはどこにありますか?典型的な/ bin、/ etc、/ sbin ...には、ブート中に使用される実際のファイルが含まれていますか?
28 linux  debian  initrd  cpio 

1
debianのmkinitcpio.confと同等のものは何ですか?
構築に使用したフックinitrd.imgが私のdebianで正しいことを確認したいの/etc/mkinitcpio.confですが、Archlinuxのようなファイルを見つけることができません。debianでこのファイルに相当するものは何ですか?そのファイルを編集しましたか?
15 initramfs  initrd 

3
ブート時にカーネル全体がメモリにロードされていますか?
初期のRAMディスクの機能について説明しているこの人気のあるIBM文書(Webでかなり頻繁に参照されています)を読みます。 しかし、これがどのように機能するかを概念化する際に壁にぶつかりました。 ドキュメントでは、それは言います GRUBなどのブートローダーは、ロードされるカーネルを特定し、このカーネルイメージと関連するinitrdをメモリにコピーします 私はすでに混乱しています:カーネル全体をメモリにコピーしますか、それともその一部ですか?カーネル全体がメモリ内にある場合、なぜ初期RAMディスクが必要なのでしょうか? initrdの目的は、小さな汎用カーネルイメージを作成できるようにすることであり、カーネルイメージがロードされる前にinitrdが正しいモジュールをインストールすることだと思いました。しかし、カーネル全体がすでにメモリにある場合、なぜinitrdが必要なのでしょうか? それは私を混乱させる別のことももたらします-カーネルにロードされるモジュールはどこにありますか?すべてのカーネルモジュールはinitrd内に格納されていますか?

3
Linuxはどのように「initrd」イメージをロードしますか?
起動プロセスを理解しようとしてきましたが、頭に浮かぶことが1つだけあります。 Linuxカーネルがブートされ、ルートファイルシステム(/)がマウントされるとすぐに、プログラムを実行し、追加の機能を提供するためにカーネルモジュールを統合できます。ルートファイルシステムをマウントするには、特定の条件を満たす必要があります。カーネルは、ルートファイルシステムが配置されているデバイス(特にSCSIドライバー)にアクセスするために、対応するドライバーを必要とします。カーネルには、ファイルシステムの読み取りに必要なコード(ext2、reiserfs、romfsなど)も含まれている必要があります。ルートファイルシステムがすでに暗号化されていることも考えられます。この場合、ファイルシステムをマウントするにはパスワードが必要です。 初期RAMディスク(initdiskまたはinitrdとも呼ばれる)は、上記の問題を正確に解決します。Linuxカーネルは、実際のルートファイルシステムがマウントされる前に、RAMディスクに小さなファイルシステムをロードし、そこでプログラムを実行するオプションを提供します。initrdのロードは、ブートローダー(GRUB、LILOなど)によって処理されます。ブートローダーに必要なのは、ブートメディアからデータをロードするBIOSルーチンだけです。ブートローダーがカーネルをロードできる場合、初期ramdiskもロードできます。特別なドライバーは必要ありません。 / bootが別のパーティションではなく、/パーティションに存在する場合、「initrd」イメージとカーネルイメージにアクセスするために、ブートローダーがSCSIドライバーを必要とするべきではないでしょうか?イメージに直接アクセスできる場合、なぜSCSIドライバーが必要なのですか?
13 linux  kernel  boot  initrd 

1
最初のramdiskがこんなに大きいのはなぜですか?
カーネルバージョンに付属するUbuntu 11.10を実行しています3.0.0-14。3.1.0ブランチからカーネルをダウンロードして構築しました。新しいカーネルをインストールした後、/boot/initrd.img-3.1.0ファイルが巨大であることがわかりました。私/boot/initrd.img-3.0.0-14-genericは約13MBですが、それは114MB です。私は明らかにむやみになっているむくみを取り除きたいです。 新しいカーネルを構築する際、元のカーネルの構成を保持する/boot/config-3.0.0-14-genericため.configに、ビルドディレクトリにをコピーしました。実行しmake oldconfig、すべての新しいオプションのデフォルトを選択して、カーネルを構築しました。 各initrd cpioアーカイブ内のファイルサイズを見ると、3.1.0 ramdiskでは、3.0.0-14よりもすべての.koモジュールのサイズが大きいことがわかります。構成ファイルで不要なデバッグフラグがチェックされていると想定しましたが、3.0.0-14構成ファイルでまだ有効になっていないものはありません。 私/boot/config-3.0.0-14-genericはここにいます:http : //pastebin.com/UjH7nEqd そして、私/boot/config-3.0.1はここにいます:http : //pastebin.com/HyT0M2k1 誰もが不必要な膨張がどこから来ているのか説明できますか?

5
initrdを使用せずにLVMにルートを配置することは可能ですか?
Gentooベースシステムをセットアップしたところです(つまり、ブートしてログインし、それで何かをできるようになりました)。私のルートパーティションはLVM2仮想グループにあります(/bootパーティションが分離されています)。起動するには、以下のパラメーターをカーネルに渡す必要があります。 root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm どうやら、rootをマウントする前に、最初のramdiskを使用して何かを実行しているようです(LVMを読み込んでいると思います)。initrdが必要ないように、このコードをカーネル自体に配置する方法はありますか?そうでない場合、どのようにinitrdを自分で作成できますか? initrdを使用せずに、LVM以外のルート用にカーネルをコンパイルしてみて、完全に機能したことを付け加えると便利かもしれません。それから私はすべてをLVMの下に置こうとしましたが、マシンをブートすることができませんでした(LVMを処理できないと思います)。次に、このgenkernelツールと--lvmオプションを使用し、現在使用している動作中のカーネルとinitrdを作成します。 ここでgenkernel、できればinitrdを使用せずにすべてをスキップして自分で実行したいので、マシンの起動が多少速くなります(柔軟性は必要ありません)。
12 kernel  boot  root  initrd  lvm 

3
Linuxカーネルがinitrdを正しく検出しない
Linuxカーネルをコンパイルしていて、QEMUでデバッグしたいと思っていました。コマンドを実行して、起動するファイルを作成しました $ qemu-img create -f raw disk.img 200M $ mkfs.ext2 -F disk.img # mkdir /mnt/rootfs # mount -o loop disk.img /mnt/rootfs 次に、私はそうしqemu -kernel bzImage -initrd disk.img、以下の画面が表示されました: Kernel panic - not syncing: VFS: unable to mount root fs on unknown block 私は何を間違ったのですか?それを修正するために何ができますか?

1
Ubuntuカーネルに強制的にマウント/を失敗させ、initramfsレスキューシェルにドロップするにはどうすればよいですか?
私はinitramfsレスキュー環境をカスタマイズしようとしていますが、シングルユーザーモードではなく、カーネルがマウントに失敗してレスキューシェルにドロップするように強制したいと思います。/(initramfs) どうやってやるの? 注:initramfs-toolsカスタマイズ手順を実行する方法を知っていますが、結果を確認できる必要があります。

1
Ramdiskとinitrdは同じですか?
RAMディスク上のカーネルのドキュメントを介して読み出しながら ramfs-rootfsの-initramfs.txt iはRAMディスクのような疑問を持ったのinitrdがで後に記載されている機能と同じある説明差-間-たinitrdアンドのinitramfs。 誰かがこれについて私を明確にできますか? それが同じである場合、多くの欠点があることを読みましたが、それでも私のfedora PCには、 initrd-2.6.29.4-167.fc11.i686.PAE.img 私のブートフォルダ。上記のinitrdとは違いますか? UPDATE_EDIT: の中 の記事、私ものようなコマンドを見ました # update-initramfs -u all update-initramfs: Generating /boot/initrd.img-2.6.18-5-amd64 では、このinitramfsはどのようにinitrd.imgにリンクされていますか?
10 linux  boot  initrd 

2
自分のinitrdをビルドするときに/ devディレクトリを作成する方法は?
私はinitrdについて何かを学ぼうとしています。私はこのチュートリアルに従って自分のinitrdをゼロから構築し、それにbusyboxをインストールしました。次に、isolinuxを使用して.isoを作成し、virtualboxでテストできるようにしました。それはうまくいきます! 私はbusyboxからの基本的なコマンドを持っているので、ファイルシステムをマウントしたいと思いました。しかし、チュートリアルに従って作成した一部のファイルを除いて、/ devディレクトリはほとんど空です(sdaなし)。私はudevについて学び、これが私が必要としていることだと思います。しかし、私はこれをどう進めるかわかりません。 udevから最新のソースコードを取得してコンパイルし、initrdに追加する必要がありますか?そして、私のinitスクリプトで/ bin / udevまたはそのようなものを呼び出しますか?または、/ devディレクトリにデータを追加する他の/より良い方法はありますか? 編集:追加情報と私がすでに行ったことに関する更新。 私は仮想ボックスですべてをテストします。私は仮想ボックスにubuntuミニマルをインストールし、initrdから.isoを作成して、virtualboxのisoから起動しました。 私はvmlinuzを使用し、/lib/modulesそれはdebian-businesscard.isoに存在し、以前にリンクしたチュートリアルに従って作成したinitrdにそれらをコピーしました。 カーネルは CONFIG_DEVTMPFS=y /devtty0〜tty63など、一部のデバイスはに表示されますが、sda / hdaは表示されません。 蘭lspci -k私の現在実行中のOSで仮想ボックスでは使用されているモジュールを確認してください。モジュールとしてSATA Controller使用すると言いahciます。 私は実行するとmodprobe -v ahci、それの後に、それはのようなものを返します。それは「ata_some_stuff未知のシンボル」について多くのことを不平を言うSCSI Subsystem initialized、ATA-6: VBOX HARDDISKとDirect-Access ATA VBOX HARDDISK。ただし、まだハードドライブデバイスが見つかりません/dev。 私の現在の/init/スクリプトは次のとおりです: #!/bin/ash mount -t devtmpfs none /dev mount -t proc /proc /proc mount -t sysfs none /sys modprobe -v ahci echo …
9 udev  initrd 


2
Ubuntu:mdデバイスは起動時にどのように組み立てられますか?
mdUbuntuの起動時にデバイスはどのように組み立てられますか?で/etc/mdadm/mdadm.conf、本当にここでは関係要因? 私mdadm.confは健全で、レスキューCD環境にいる間に確認しました。実行mdadm -A --scanすると、必要に応じてデバイス名が検出され、割り当てられます。にmdadm.confはAUTO -all、配列の組み立てからすべての自動性を取り出すためのものが含まれています。 私がする必要があるのは、起動時にmd概説さmdadm.confれているようにデバイスを自動組み立てできるようにすること、または組み立てるときにsuper-minor0.9アレイの値と1.2アレイのname(どうやら<hostname>:<super-minor>)を尊重し、なしで正しいことを行うことmdadm.confです。私はどのパズルのピースが欠けていますか? 次の問題があります。mdRAID1(md0とmd1)を備えた2つのデバイスとRAID6(md2)を備えた1 つのデバイスがあります。目的のデバイス名でそれらを参照しています。md0メタデータバージョン0.9があり、他の2つはバージョン1.2です。md0へのマップ/と他の2つは、ブートには関係ありません。 ブートドライブはGPTパーティションです。その上に接着剤「BIOSブートパーティション」(sda1)があります。grub-install --no-floppy /dev/sda成功を報告します。 md0 == sda3 + sdb3 md1 == sda2 + sdb2 md2 == sdc + sdd + sde + sdf + sdg + sdh sda1そしてsdb1、各「BIOSブートパーティション」です GRUB2は幸せです/boot/grub/devicemap、私はそれを与えたと私は追加part_gpt、raid、mdraid09およびext2GRUB2にプリロードをモジュールに。 まだレスキュー環境にルートボリュームが残っているので、すべてをマウントして、そこにchroot編集しました。 mkdir /target mount /dev/md0 /target mount -o bind /dev /target/dev mount -o bind …
8 linux  ubuntu  grub2  mdadm  initrd 

1
UbuntuでRAIDアレイを自動的に構築するだけで使用する方法は?
Ubuntu 16.06システムがあり/、SSDプライマリパーティションにあり/home、4つのSSDデバイスにmd RAID0があります。ファイル/etc/mdadm/mdadm.confは自動的に生成さmkconfれ、デバイスもアレイも含まれません。私が持っUUID=<uuid for fs> /home ext4 defaultsている/etc/fstab、それはRAIDを組み立てるのに十分です。システムは正常に起動し、RAIDを正しく組み立てて、期待どおりにマウントします。ただし、パッケージをアップグレードupdate-initramfsすると、常に警告が表示されます W: mdadm: /etc/mdadm/mdadm.conf defines no arrays. /etc/fstabファイルシステムUUID のみを含む全自動RAIDアセンブリを使用し続け/home、警告メッセージを回避するにはどうすればよいupdate-initramfsですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.