質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

6613閲覧

pxe boot で /dev/root does not exist となり、インストールできない

teityura

総合スコア84

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/07/26 17:55

編集2020/07/30 21:06

環境

【インストールターゲット】
筐体: NUC10i5FNK
メモリ: 64GB
SSD: 1TB(M.2 NVMe接続)

【pxe boot server】
kvm で作成した VM
xinetd, dhcpd, tftp, httpd が動作している

事象

自宅で、PXEブートサーバを構築し、
pxe boot + kickstart で CentOS7 をインストールしていたところ、
画像の状態になってしまい、インストールに失敗しました。

下記CentOSを落としてきて、httpでLAN内に公開し、
UEFI用のブートローダー({shim,grub}x64.efi)をTFTPでLAN内に公開し、
特に変更をせず、そのまま利用してます。
ISO: CentOS-7-x86_64-DVD-2003.iso

エラーメッセージ

ata3: SATA link down (SStatus 4 SControl 300) ... dracut-initqueue[768]: Warning: dracut-initqueue timeout - starting timeout scripts dracut-initqueue[768]: Warning: dracut-initqueue timeout - starting timeout scripts dracut-initqueue[768]: Warning: dracut-initqueue timeout - starting timeout scripts Starting Dracut Emergency Shell... Warning: /dev/root does not exist ...

エラー画像

sata link down
間1
間2
/dev/root does not exist

Grub Config

UEFIベースで、下記のような grub.cfg を準備しました。

# ブートローダー, グラフィカル・メニュー を配置 cp -pr /mnt/iso/Packages/shim-x64-15-2.el7.centos.x86_64.rpm ~/src/ cp -pr /mnt/iso/Packages/grub2-efi-x64-2.02-0.81.el7.centos.x86_64.rpm ~/src/ rpm2cpio shim-x64-15-2.el7.centos.x86_64.rpm | cpio -dimv rpm2cpio grub2-efi-x64-2.02-0.81.el7.centos.x86_64.rpm | cpio -dimv mkdir /var/lib/tftpboot/uefi cp ./boot/efi/EFI/centos/{shim,grub}x64.efi /var/lib/tftpboot/uefi/ chmod 644 /var/lib/tftpboot/uefi/{shim,grub}x64.efi # GRUBメニュー を準備 cat << 'EOF' > /var/lib/tftpboot/uefi/grub.cfg set timeout=60 menuentry 'Install CentOS 7' { linuxefi images/centos7/vmlinuz ip=dhcp inst.repo=http://192.168.1.220/centos7 inst.ks=http://192.168.1.220/centos7/ks.cfg initrdefi images/centos7/initrd.img } EOF
ディレクトリ構成

下記のディレクトリ構成になっています。

/var/lib/tftpboot/images: total 0 drwxr-xr-x 2 root root 39 Jul 25 16:30 centos7 /var/lib/tftpboot/images/centos7: total 60504 -rw-r--r-- 1 root root 55187100 Jul 25 16:30 initrd.img -rwxr-xr-x 1 root root 6762688 Jul 25 16:30 vmlinuz /var/lib/tftpboot/pxelinux: total 180 -rw-r--r-- 1 root root 26759 Jul 25 16:30 pxelinux.0 drwxr-xr-x 2 root root 21 Jul 25 16:30 pxelinux.cfg -rw-r--r-- 1 root root 153104 Jul 25 16:30 vesamenu.c32 /var/lib/tftpboot/pxelinux/pxelinux.cfg: total 4 -rw-r--r-- 1 root root 485 Jul 25 16:30 default /var/lib/tftpboot/uefi: total 2252 -rw-r--r-- 1 root root 211 Jul 25 16:31 grub.cfg -rw-r--r-- 1 root root 1090976 Jul 25 16:31 grubx64.efi -rw-r--r-- 1 root root 1205248 Jul 25 16:31 shimx64.efi

試したこと1

下記を参考に、マウントするファイルシステムのパスを確認しましたが、問題なさそうです。
Qiita: dracut-initqueue timeout って?

また、kickstart の デバイス名を、
sda, nvme0, nvme0n1 等に変えてみましたが、直りませんでした。

疑問, 実現したいこと

NVMeで利用する場合、ドライバか何か追加する必要があるのでしょうか。

どこから切り分けていけばいいか、助言いただけると嬉しいです。

kikstart の内容

文字数制限に引っかかるので削除しました。

試したこと2

  1. inst.ks を消してみました
  2. vmlinuz,initrd.img の権限を変更してみました
  3. httpd の アクセスログを見てみましたが、httpdへのアクセスはないようです。

dhcp の range を 192.168.1.230 ~ 192.168.1.240 にしています。
(192.168.1.230:??? -> 192.168.1.220.80 へ アクセスがあるはずだが、来なかった)
4. pxe boot 中の インストール対象 -> pxe サーバ への
パケットをキャプチャしてみました。

RRQ "images/centos7/initrd.img" octet blksize 1024 tsize 0
のあたりで失敗しているのかもしれません。

# Grub メニューのキックスタート(inst.ks)を消してみました [root@pxe ~]# cat << 'EOF' > /var/lib/tftpboot/uefi/grub.cfg set timeout=60 menuentry 'Install CentOS 7' { linuxefi images/centos7/vmlinuz ip=dhcp inst.repo=http://192.168.1.220/centos7 initrdefi images/centos7/initrd.img } EOF # ブートローダー? 初期RAMディスク? への # ファイルへのアクセス権限が足りないのかと思い、見直しました [root@pxe ~]# l /var/lib/tftpboot/images/centos7/ total 60504 drwxr-xr-x 2 root root 39 Jul 25 16:30 . drwxr-xr-x 3 root root 21 Jul 25 16:30 .. -rw-r--r-- 1 root root 55187100 Jul 25 16:30 initrd.img -rwxr-xr-x 1 root root 6762688 Jul 25 16:30 vmlinuz # とりあえず 777 にしてみました [root@pxe ~]# chmod 777 /var/lib/tftpboot/images/centos7/{vmlinuz,initrd.img} [root@pxe ~]# l /var/lib/tftpboot/images/centos7/ total 60504 drwxr-xr-x 2 root root 39 Jul 25 16:30 . drwxr-xr-x 3 root root 21 Jul 25 16:30 .. -rwxrwxrwx 1 root root 55187100 Jul 25 16:30 initrd.img -rwxrwxrwx 1 root root 6762688 Jul 25 16:30 vmlinuz # http で 公開しているディレクトリ [root@pxe httpd]# l /var/pxe/centos7/ total 332 drwxr-xr-x 8 root root 234 Jul 25 16:34 . drwxr-xr-x 3 root root 21 Jul 25 16:33 .. -rw-r--r-- 1 root root 14 Jul 25 16:33 CentOS_BuildTag drwxr-xr-x 3 root root 35 Jul 25 16:33 EFI -rw-r--r-- 1 root root 227 Jul 25 16:33 EULA -rw-r--r-- 1 root root 18009 Jul 25 16:33 GPL drwxr-xr-x 3 root root 57 Jul 25 16:33 images drwxr-xr-x 2 root root 198 Jul 25 16:33 isolinux -rw-r--r-- 1 root root 2033 Jul 25 17:00 ks.cfg drwxr-xr-x 2 root root 43 Jul 25 16:33 LiveOS drwxr-xr-x 2 root root 225280 Jul 25 16:33 Packages drwxr-xr-x 2 root root 4096 Jul 25 16:33 repodata -rw-r--r-- 1 root root 1690 Jul 25 16:33 RPM-GPG-KEY-CentOS-7 -rw-r--r-- 1 root root 1690 Jul 25 16:33 RPM-GPG-KEY-CentOS-Testing-7 -r--r--r-- 1 root root 2883 Jul 25 16:33 TRANS.TBL # httpd の公開範囲 [root@pxe httpd]# cat /etc/httpd/conf.d/pxeboot.conf Alias /centos7 /var/pxe/centos7 <Directory /var/pxe/centos7> Options Indexes FollowSymLinks Require ip 127.0.0.1 192.168.1.0/24 </Directory> # 192.168.1.53 ... ブラウザを開いた普段使いのPC # ブラウザ で http://192.168.1.220/centos7/ を開きました [root@pxe ~]# cd /var/log/httpd [root@pxe httpd]# tail -f access_log 192.168.1.53 - - [26/Jul/2020:11:13:05 +0900] "GET /icons/text.gif HTTP/1.1" 200 229 "http://192.168.1.220/centos7/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"

パケットのやり取り

文字数制限に引っかかるので、画像で載せました。
tcpdump1
tcpdump2

httpサーバの構成

http_centos7

試してみたこと3

grub.cfgで
devfs=nomount を付けたり、消したり、
inst.repo=http://192.168.1.220/centos7
inst.repo=http://ftp.riken.jp/Linux/centos/7/os/x86_64/
に変えたりしてみましたが、やはりダメなようでした。

dracutプロンプト

cat /proc/cmdline
less -N /run/initramfs/rdsosreport.txt
等を確認してみました。

squashfs.img のダウンロードにコケる前のログを見てみたら、
(関連あるか分かりませんが、)iscsid がエラーを吐いているのを見つけました。
cat /proc/cmdline
dracut_log1
dracut_log2

不安に思ってることなど

インストール先の機器で、M.2SSD(NVMe接続)を利用しているのですが、
・イメージにNVMeを有効にするような命令を追記が必要なのでしょうか。
・kickstart の デバイス名は (nvme0とかnvme0n1じゃなくて)sda で問題ないでしょうか。
(デバイス名については、squashfs.img の入手に成功したあとに分かりますかね)

試してみたこと4

  1. grep -e eth -e eno -e dhclient -e IPv6 /run/initramfs/rdsosreport.txt

を実行したところ、何もヒットしませんでした。

  1. 同じCentOS7をUSBブートしたところ、

OS自体はインストールできましたが、eth0を認識していませんでした。
lo, wlp0s20f3(wifiデバイス) のみ認識していました。

  1. UbuntuServer20をUSBブートしたところ、

eno1(ethernetデバイス)をちゃんと認識していました。

  1. USBブートに成功した UbuntuSerbver20の

casper/{vmlinuz,initrd}で UbuntuSerbver20, CentOS7 を
pxebootしてみたところ、両方同じところでつまりました。
(今度は、eno1を認識しているみたいでした)
ubuntu-initrd-1
ubuntu-initrd-2

これらの結果からすると、initrd.img に
NIC(ethernet)を利用するためのドライバが不足している状態と考えられるのでしょうか。

関連ありそうな記事を見つけましたが、pxe boot だと手順が少し違いそうです。
Linuxで認識しないNICのドライバをインストールしてみた

試してみたこと5

centosのinitrdでe1000eを強制ロードさせるようにしました。
NICを認識したものの /dev/root does not exist となり、起動できませんでした。
強制ロード](5efc9f0c1eeb8e429f0058f592f95b74.jpeg)

ubuntuのinitramfsを展開し、e1000e.koを入れ替えて、再構成しました。
/root/dev failed となり、起動できませんでした。
rootpath: filename: が空なのが気になります。
initramfs-1
initramfs-2

centosのinitramfsでドライバを更新(e1000e-3.8.4をmake install)し、再構成してみました。
Failed to start Swith Root となり、起動できませんでした。
こちらは、NICを認識していますが、デバイスが見えなくなっています。
make install fail

長くなってきてしまったので、一旦解決済みとして、
課題を整理してもう少し色々試してみようかと思います。

何度も回答いただき、ありがとうございました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2020/07/27 07:16

画像 1つ目、2つ目の間のメッセージがわからないのですが、Webサーバーから squashfs.img などのインストールイメージが取得できていないように思います。 Webサーバー(http://192.168.1.220/)のアクセスログ、エラーログは?
teityura

2020/07/27 12:50

回答ありがとうございます。 画像追加しました。 httpdのアクセスログ, エラーログ見てみましたが、 そもそも、アクセスが来ていないようです。 squashfs.img は 上の場合、 vmlinuz,initrd.img のようなファイルのことでしょうか。
teityura

2020/08/29 07:16

結局、CentOS8.0, 8.1 がダメで、 CentOS8.2ではNICを認識したので、そこで妥協することにしました。 ありがとうございました。
guest

回答1

0

ベストアンサー

grub.cfg → vmlinuz, initrd.img はロードできていると思います。
Webサーバーも問題なさそうです。

「dracut-initqueue[XXX]: RTNETLINK answers: File exists」の後に
curl コマンド(initrd.img に入っている)で squashfs.img をダウンロードするのですが、画面に curl の出力もエラーも何も表示されていないので、inst.repo= が正しく渡っていないのではないでしょうか。
dracut:/# プロンプトで、cat /proc/cmdline で引数を確認ください。

ちなみに、手元の検証環境の /var/log/httpd/access_log です。

192.168.123.253 - - [27/Jul/2020:23:10:52 +0900] "GET /cdrom/.treeinfo HTTP/1.1" 200 353 "-" "curl/7.29.0" 192.168.123.253 - - [27/Jul/2020:23:10:52 +0900] "GET /cdrom/LiveOS/squashfs.img HTTP/1.1" 200 514818048 "-" "curl/7.29.0" 192.168.123.253 - - [27/Jul/2020:23:10:54 +0900] "GET /cdrom/images/updates.img HTTP/1.1" 404 222 "-" "curl/7.29.0" 192.168.123.253 - - [27/Jul/2020:23:10:54 +0900] "GET /cdrom/images/product.img HTTP/1.1" 404 222 "-" "curl/7.29.0" 192.168.123.253 - - [27/Jul/2020:23:11:09 +0900] "GET /cdrom/.treeinfo HTTP/1.1" 200 353 "-" "urlgrabber/3.10" 192.168.123.253 - - [27/Jul/2020:23:11:09 +0900] "GET /cdrom/repodata/repomd.xml HTTP/1.1" 200 3734 "-" "CentOS (anaconda)/7 yum/3.4.3" 192.168.123.253 - - [27/Jul/2020:23:11:09 +0900] "GET /cdrom/.treeinfo HTTP/1.1" 200 353 "-" "urlgrabber/3.10" 192.168.123.253 - - [27/Jul/2020:23:11:09 +0900] "GET /cdrom/repodata/834d4fa06ff0e24b31d599cfe988b46443b23cc479b969abf7753e7ed3d47b76-primary.xml.gz HTTP/1.1" 200 408681 "-" "CentOS (anaconda)/7 yum/3.4.3" 192.168.123.253 - - [27/Jul/2020:23:11:09 +0900] "GET /cdrom/repodata/d4de4d1e2d2597c177bb095da8f1ad794d69f76e8ac7ab1ba6340fdd0969e936-c7-minimal-x86_64-comps.xml.gz HTTP/1.1" 200 3539 "-" "CentOS (anaconda)/7 yum/3.4.3" 192.168.123.253 - - [27/Jul/2020:23:11:09 +0900] "GET /cdrom/repodata/e2957c12ac923e1f4743872fcbae0defd6cf2468ecad2005205c928d9d71806b-primary.sqlite.bz2 HTTP/1.1" 200 849845 "-" "CentOS (anaconda)/7 yum/3.4.3" 192.168.123.253 - - [27/Jul/2020:23:11:10 +0900] "GET /cdrom//repodata/repomd.xml HTTP/1.1" 200 3734 "-" "urlgrabber/3.10"

P.S.
squashfs.img は stage2 と呼ばれるインストールイメージです。
ネットワークインストールの場合もこのファイルがロードされた後、GUI インストーラーが起動します。


(2020/07/28 09:14 追記
inst.repo= は渡っているようですね。
ネットワークまわりはどうでしょうか。
tftp で vmlinuz, initrd.img を取得するところまでは物理ネットワークデバイスの持つ機能で繋がっていますが、Linux kernel が起動した後はドライバが必要です。
画面に、有線ネットワークインターフェース名(eno1, eth0 など)や、IPv6 などの文字列が見当たらない
ことから、ドライバが対応していないのかもしれません。
/run/initramfs/rdsosreport.txt に eno1, eth0, dhclient, IPv6 などの文字列はありますでしょうか。
また、dracut:/# プロンプトで、lsmod でドライバ(おそらく e1000e)がロードされているか、ip addr, ping, curl などで通信できるか確認ください。

iscsid がエラーを吐いているのを見つけました。

iscsi のエラーは無関係と思います。

・イメージにNVMeを有効にするような命令を追記が必要なのでしょうか。

NUC10i3FNK に Fedora 32 をインストールしていますが、特に必要なかったです。
RHEL/CentOS 7 のリリースノート、インストールガイドは確認していませんが、「nvme nvme0: allocated 32 MiB host memory buffer.」と出ているので、認識していると思います。

・kickstart の デバイス名は (nvme0とかnvme0n1じゃなくて)sda で問題ないでしょうか。
(デバイス名については、squashfs.img の入手に成功したあとに分かりますかね)

Fedora32 では、デバイス名は /dev/nvme0n1、パーティションは /dev/nvme0n1p1 (p2, p3, ...) となっています。

PXE ブートが必須でなければ、USB ブートも試してみては?
ネットワークドライバが未対応であれば、USB ブートでもダメそうですが。


(2020/07/29 10:57) 追記
CentOS 7 では e1000e ドライバがロードされず有線ネットワークが有効にならないようですね。
Wi-Fi が有効なら、そちらでネットワークインストールできないでしょうか?

e10001e ドライバのバージョンを確認すると、Fedora 32 も CentOS7 も 3.2.6-k で同じようです。
CentOS 7 では自動認識しないだけで対応はしているのかもしれません。

(NUC10i3FNK の場合) [fodora32]$ lspci | grep Ether 00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (10) I219-V [fodora32]$ cat /sys/devices/pci0000:00/0000:00:1f.6/modalias pci:v00008086d00000D4Fsv00008086sd00002081bc02sc00i00 [fodora32]$ modprobe -c | grep pci:v00008086d00000D4F alias pci:v00008086d00000D4Fsv*sd*bc*sc*i* e1000e e1000e が見つかる [centos7]$ modprobe -c | grep pci:v00008086d00000D4F 見つからない

dracut:/# プロンプトで modprobe e1000e でロードできないでしょうか?
もし、ロードできてネットワーク疎通できるようなら、grub.cfg か initrd.img を細工して e1000e を強制ロードするようにすれば可能性はあります。

ただ、そこまで労力をかけるより、USBストレージや DVDドライブを用意するとか、他のディストリビューションにした方がいいのでは?


(2020/07/30 17:10) 追記

initrd で強制的に e1000e ドライバをロードする手順です。

1. initrd.img を展開 [tftp-server]# cd /var/lib/tftpboot/images/centos7/ [tftp-server]# mkdir root [tftp-server]# cd root/ [tftp-server]# xzcat ../initrd.img | cpio -imdu 2. e1000e ドライバの強制ロード設定 [tftp-server]# mkdir ./etc/modules-load.d/ [tftp-server]# echo e1000e > ./etc/modules-load.d/e1000e 3. initrd-e1000e.img 作成 [tftp-server]# find . -print0 | cpio -o --null -H newc | gzip > ../initrd-e1000e.img 4. grub.cfg を編集し、initrd-e1000e.img に差し替え

投稿2020/07/27 14:54

編集2020/07/30 08:10
TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityura

2020/07/29 17:09

色々と助言いただき、ありがとうございます。 (boot時の動作について、少し詳しくなったように思います) > dracut:/# プロンプトで modprobe e1000e でロードできないでしょうか? できました。 nuc3台を持っており、複数台で色々なOSをインストールして、 環境を構築し、潰し、繰り返していきたいと思っているので、 なんとかならないか、もう少し調べてみたりしようと思います。 でも、pxe boot の先にいけなくて時間も勿体ないので、 他のディストリビューションで試してみようと思います。
TaichiYanagiya

2020/07/31 13:04

> centosのinitrdでe1000eを強制ロードさせるようにしました。 > NICを認識したものの /dev/root does not exist となり、起動できませんでした。 ダメでしたか。 ドライバの modalias に NIC の型番が入っていないとダメなのかもしれません。 > centosのinitramfsでドライバを更新(e1000e-3.8.4をmake install)し、再構成してみました。 > Failed to start Swith Root となり、起動できませんでした。 > こちらは、NICを認識していますが、デバイスが見えなくなっています。 eno1 を認識して、squashfs.img をロードできていませんか? (→Webサーバーのログ) stage2 へ chroot できていないようなので、ロードに失敗しているのかもしれません。 一歩進んだように思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問