Linux のインストール開始時にディスクの最初のパーティションが見つかりません。

Linux のインストール開始時にディスクの最初のパーティションが見つかりません。

x86-64システムのインストールハードドライブイメージがありますが、openSUSEそのイメージにアクセスできなくなりました。このRAWディスクを使用して起動しようとしていますquemu。たとえば、qemu-system-x86_64 -m 4096 -curses -hda srv.sda -enable-kvm仮想マシンを起動すると、以下を使用してqemu-system-x86_64 -m 4096 -curses -drive id=disk,file=srv.sda,if=none,format=raw -device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 -enable-kvmLinuxカーネルと初期RAMディスクを指定できるGRUB 2.02シェルになります。

grub> linux (hd0,msdos1)/boot/vmlinuz
grub> initrd (hd0,msdos1)/boot/initrd
grub> boot

これで起動プロセスが開始され、常にここで終了します。

              [    0.234732] NET: Registered protocol family 10
              [    0.235188] lo: Disabled Privacy Extensions
              [    0.235592] lib80211: common routines for IEEE802.11 drivers
              [    0.236014] registered taskstats version 1
              [    0.236439]   Magic number: 1:617:774
              [    0.236774] mem zero: hash matches
              [    0.237151] rtc_cmos 00:01: setting system clock to 2021-04-22 07:46:24 UTC (
              1619077584)
              [    0.237802] Freeing unused kernel memory: 896k freed
              [    0.238330] Write protecting the kernel read-only data: 10240k
              [    0.238762] Freeing unused kernel memory: 1616k freed
              [    0.239578] Freeing unused kernel memory: 748k freed
              doing fast boot
              Creating device nodes with udev
              [    0.255337] udev: starting version 157
              mount: devpts already mounted or /dev/pts busy
              mount: according to mtab, devpts is already mounted on /dev/pts
              Boot logging started on /dev/char/../tty1(/dev/console) at Thu Apr 22 10:46:24 2
              021
              resume device  not found (ignoring)
              Waiting for device /dev/sda1 to appear: [    1.072809] input: ImExPS/2 Generic E
              xplorer Mouse as /devices/platform/i8042/serio1/input/input1
              ..............................Could not find /dev/sda1.
              Want me to fall back to /dev/sda1? (Y/n)

qemuディスクの最初で唯一のパーティションをLinuxで使用できるようにディスク設定を変更できますか?たとえば、GRUBはおよび/boot/vmlinuzを正常に読み取ったため、これにアクセスできるように見えます/boot/initrd

編集1:初期RAMディスクを再生成し、ata_piixカーネルモジュールを含めた後、qemu-system-x86_64起動プロセスは次のようになります。

              [    0.244118] rtc_cmos 00:01: setting system clock to 2021-04-27 15:31:52 UTC (
              1619537512)
              [    0.244762] Freeing unused kernel memory: 896k freed
              [    0.245284] Write protecting the kernel read-only data: 10240k
              [    0.245716] Freeing unused kernel memory: 1616k freed
              [    0.246529] Freeing unused kernel memory: 748k freed
              doing fast boot
              [    0.266568] SCSI subsystem initialized
              [    0.267653] megasas: 00.00.04.17.1-rc1 Thu. Oct. 29, 11:41:51 PST 2009
              [    0.278467] scsi0 : ata_piix
              [    0.278833] scsi1 : ata_piix
              [    0.279164] ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xc060 irq 14
              [    0.279562] ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xc068 irq 15
              Creating device nodes with udev
              [    0.444780] udev: starting version 157
              mount: devpts already mounted or /dev/pts busy
              mount: according to mtab, devpts is already mounted on /dev/pts
              Boot logging started on /dev/char/../tty1(/dev/console) at Tue Apr 27 18:31:52 2
              021
              resume device  not found (ignoring)
              Waiting for device /dev/sda1 to appear: [    1.080811] input: ImExPS/2 Generic E
              xplorer Mouse as /devices/platform/i8042/serio1/input/input1
              ..............................Could not find /dev/sda1.
              Want me to fall back to sda1? (Y/n)

上記のようにata_piixモジュールがロードされているようですが、/dev/sda1まだ見つかりません。

編集2:/etc/fstab環境を変更し、 に交換し、chroot初期RAMディスクを再作成し、GRUBシェルでLinuxカーネルと初期RAMディスクを指定してシステム起動を試みました。/dev/sda1 / reiserfs acl,user_xattr 1 1UUID=dafc3c3a-1469-44b1-b85c-deb904aac291 / reiserfs acl,user_xattr 1 1

grub> linux (hd0,msdos1)/boot/vmlinuz root=UUID=dafc3c3a-1469-44b1-b85c-deb904aac291
grub> initrd (hd0,msdos1)/boot/initrd
grub> boot

残念ながら、システムは起動しません。また、mkinitrd出力を追加します。

# mkinitrd -v -k vmlinuz-2.6.34.10-0.6-default -i initrd-2.6.34.10-0.6-default -d /

Kernel image:   /boot/vmlinuz-2.6.34.10-0.6-default
Initrd image:   /boot/initrd-2.6.34.10-0.6-default
[MODULES]       02-start.sh: reiserfs thermal megaraid_sas ata_piix ata_generic processor fan
[MODULES]       02-start.sh:
[MODULES]       03-rtc.sh: rtc_cmos
[MODULES]       03-storage.sh: reiserfs
[MODULES]       11-usb.sh: usbcore
[MODULES]       11-usb.sh: ohci_hcd
[MODULES]       11-usb.sh: uhci-hcd
[MODULES]       11-usb.sh: ehci_hcd
[MODULES]       11-usb.sh: usbhid
[MODULES]       'modinfo -k "2.6.34.10-0.6-default" -F supported'  returned with an error.
Kernel Modules: reiserfs thermal_sys thermal scsi_mod megaraid_sas libata ata_piix ata_generic processor fan usbcore pcmcia_core pcmcia mmc_core ssb ohci-hcd ehci-
hcd uhci-hcd usbhid
[MOUNT] Root:   /
Features:       usb resume.userspace resume.kernel
Bootsplash:     openSUSE (640x480)
Shared libs:    /lib/udev/collect_lvm is a script
/lib/udev/findkeyboards is a script
/lib/udev/idedma.sh is a script
/lib/udev/iwlwifi-led.sh is a script
/lib/udev/keyboard-force-release.sh is a script
/lib/udev/kpartx_id is a script
/lib/udev/udev-add-printer is a script
/lib/udev/write_cd_rules is a script
/lib/udev/write_net_rules is a script
/lib/mkinitrd/bin/ipconfig.sh is a script
/sbin/ifup is a script
/lib/mkinitrd/bin/ipconfig.sh is a script
/lib/mkinitrd/bin/linuxrc is a script
/usr/bin/on_ac_power is a script
lib64/ld-2.11.2.so lib64/libacl.so.1.1.0 lib64/libattr.so.1.1.0 lib64/libblkid.so.1.1.0 lib64/libcap.so.2.16 lib64/libcom_err.so.2.1 lib64/libcrypto.so.1.0.0 lib64
/libc-2.11.2.so lib64/libdevmapper.so.1.02 lib64/libdl-2.11.2.so lib64/libgcrypt.so.11.5.2 lib64/libgpg-error.so.0.5.0 lib64/libkeyutils-1.3.so lib64/liblzo2.so.2.
0.0 lib64/libm-2.11.2.so lib64/libncurses.so.5.7 lib64/libpcre.so.0.0.1 lib64/libpthread-2.11.2.so lib64/libreadline.so.6.1 lib64/libresolv-2.11.2.so lib64/librt-2
.11.2.so lib64/libselinux.so.1 lib64/libsepol.so.1 lib64/libssl.so.1.0.0 lib64/libudev.so.0.8.2 lib64/libutil-2.11.2.so lib64/libuuid.so.1.3.0 lib64/libz.so.1.2.3
usr/lib64/libatasmart.so.4.0.3 usr/lib64/libcups.so.2 usr/lib64/libdal-0.3.so.0.0.0 usr/lib64/libdirect-1.2.so.9.0.0 usr/lib64/libdirectfb-1.2.so.9.0.0 usr/lib64/l
ibfusion-1.2.so.9.0.0 usr/lib64/libglib-2.0.so.0.2400.1 usr/lib64/libgssapi_krb5.so.2.2 usr/lib64/libk5crypto.so.3.1 usr/lib64/libkrb5.so.3.3 usr/lib64/libkrb5supp
ort.so.0.1 usr/lib64/libparted.so.0.0.1 usr/lib64/libreiserfs-0.3.so.0.0.0 usr/lib64/libsplashycnf.so.1.0.0 usr/lib64/libsplashy.so.1.0.0 usr/lib64/libusb-0.1.so.4
.4.4 usr/lib64/libusb-1.0.so.0.0.0 lib64/libnss_dns-2.11.2.so lib64/libnss_dns.so.2 lib64/libnss_files-2.11.2.so lib64/libnss_files.so.2 lib64/libgcc_s.so.1
37516 blocks
Perl-Bootloader: 2021-05-03 18:57:38 ERROR: UDEVMAPPING: dmdev /dev/dm-0 doesn't have defined DM_NAME in udev
#

DM_NAMEの変数にエラーがありますが、udev新しい初期RAMディスクファイルが作成されます(明示的ata_piixに有効なファイルを追加するなど)。また、別のルートデバイス(オプション)を試してみました-dmkinitrdsda1

ベストアンサー1

私の最初の推測は、元のシステムのストレージコントローラがqemuが提供するものとは異なるため、initrdファイルに仮想ストレージコントローラを実行するために必要な正しいモジュールが含まれていないことです。

デフォルトのストレージコントローラは、qemu-system-x86_64AHCIではなくクラシックIntel PIIX3 IDEコントローラのようです。ata_piixAHCIを最小限の基準として使用する合理的に近代的な物理システムの初期化には、不要なカーネルモジュールが必要です。

したがって、カーネルはディスクをまったく表示できず、起動プロセスはinitrdから実際のルートファイルシステムに切り替えることができません。

GRUBはBIOSルーチンを使用してディスクにアクセスするため、ディスクに精通しています。 BIOS は qemu から提供されるため、BIOS は明らかに操作を実行するのに適したルーチンを持っています。

仮想マシンのコマンドプロンプトにアクセスできる場合は、次のコマンドを試してください。

dmesg | grep -e piix -e ahci -e " sd"

ディスク検出に関するすべてのメッセージを表示する必要があります。何も表示されない場合(仮想)、ストレージコントローラが検出されないため、仮想ディスクを検出できません。


この問題を解決するには、通常のシステムでディスクイメージにアクセスする必要があります。 (/dev/loop0システムがすでにディスクイメージを使用している場合は、代わりに無料のループデバイスを使用してください。)

losetup -P /dev/loop0 srv.sda

/dev/loop0p1次に、通常のシステムの適切な一時的な場所に設置します。

mkdir /mnt/opensuse
mount /dev/loop0p1 /mnt/opensuse

ライブLinuxメディアから物理システムを起動するときに実行できる操作と同様に、必要な仮想ファイルシステムとchrootをディスクイメージのファイルシステムに追加します。

mount --rbind /dev /mnt/opensuse/dev
mount --bind /proc /mnt/opensuse/proc
mount --bind /sys /mnt/opensuse/sys
chroot /mnt/opensuse

これで、ディスクイメージからinitrd / initramfsファイルを再生成できます。イメージにOpenSUSEシステムバージョンを指定していないが、クラシックコマンドが使用するツールでも、実際にmkinitrd新しいバージョンで使用できる新しいツール(おそらく?)の互換性エイリアスでもあります。dracut

このバージョンのOpenSUSEでinitrdファイルを生成するためにどのツールを使用しても、ツールにはinitrdに特定のカーネルモジュールを強制的に含めるオプションがあります。オプションを見つけるには、ツールのマニュアルページを読み、それを使用してモジュールをata_piix含む新しいinitrdを作成します。 (安全のために最初に元のinitrdファイルを別々に保管してください。)

initrdイメージの正しい場所に/boot新しいファイルを正常に作成したら、exitchroot環境から離れて、umount以前に行ったすべてのインストール作業を実行しますlosetup -d /dev/loop0。 。

おすすめ記事