web-dev-qa-db-ja.com

起動プロセス-DevsdX名の変更

2.6.36カーネルのSlack13.1マシンを持っていました。次に、カーネルを.12.1。に更新しました。

このマシンは接続されています:3つのパーティション(/ dev/sda1-> Linux OSファイル...、/ dev/sda2->データ、/ dev/sda3->その他のデータ)を備えたブータブルディスク、「ダミー」物(/ dev/sdb1)とUSBポートを保存するためだけのSSD。

事実、マシンに接続されたSBを含むデータ(LiveUSBではない)でLinuxを起動しようとすると、起動プロセス中にsdaデバイスをUSBに割り当てる何かが発生します。 カーネルパニック:のため、Linuxパーティションを「ブータブルディスク」にマウントすることはできません。

VFS: Mounted root (vfat filesystem) readonly on device 8:1.
devtmpfs: error mounting -2
[...]
Kernel panic - not syncing: no init found. Try passing init=..

私が使用しているブートローダーは[〜#〜] lilo [〜#〜]です。ブートプロセスにデバイス名を変更しないように強制したり、特定のデバイスにデバイス名を事前に割り当てたりしないようにする方法があるかどうかはわかりません。これはその構成です:

# Linux bootable partition config begins
image = /boot/vmlinuz
root=/dev/sda1    
append="panic=120"
label=3.12.20-smp
read-only 

/ etc/fstab:

/dev/sda1        /                ext4        rw               1   1

USBデバイスパーティションはsda1と見なされるため、明らかにinitプロセスやアプリケーションが含まれていないため、カーネルパニックが発生します。

Root = "LABEL = myLabel"またはroot = "LABEL = current"を試してみましたが、運がありませんでした...すべてのパーティションではなく、ルートノードでラベルを検索するためだと思います:S

何が起こっているのかについて何か提案はありますか?それを修正することは可能ですか?前もって感謝します!

1
aloplop85

問題は、ディスク名が順番に作成されることです。カーネルによって検出される最初のディスクは/dev/sdaになり、2番目は/dev/sdbなどになります。

問題の解決策は、システムの起動が完了するまで、USBディスク(USBドライブを含む)の使用(つまり、検出)を無効にすることです。これは、カーネル自体にUSBストレージドライバーを含めず、モジュールとしてビルドするようにカーネルを構成することで実行できます。そうすれば、起動時に「通常の」ディスクのみが検出され、ルートファイルシステムがマウントされた後でのみ、usb_storage.koモジュールをロードできるようになります。

これは、カーネルを自分でビルドし、initrd(初期ramdisk)を使用していないことを前提としています。

0
wurtel

開発者名でデバイスを識別することを忘れてください。 UUIDを使用すれば、問題は発生しません。

blkidコマンドを使用して、デバイスのUUIDを識別できます。

ちなみに、LILOがUUIDをサポートしているかどうかはわかりません。 GRUBに切り替わらない場合。

2
YoMismo

Linuxでのこのデバイス番号付けは、そのOSの最悪の問題の1つです。他のすべての合理的な* nixは、ディスクのアドレス指定にコントローラー/ターゲット/ lunのようなものを使用します。

私はかつて、BIOSでboot-device-orderを変更することでPCでその問題を解決しました(USBを最後に置きます)。

LinuxはBIOS設定を気にしないことが多いので、それがすべての状況で機能するかどうかはわかりません。

1
Nils