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-kvm
Linuxカーネルと初期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 1
UUID=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
に有効なファイルを追加するなど)。また、別のルートデバイス(オプション)を試してみました-d
。mkinitrd
sda1
答え1
私の最初の推測は、元のシステムのストレージコントローラがqemuが提供するものとは異なるため、initrdファイルに仮想ストレージコントローラを実行するために必要な正しいモジュールが含まれていないことです。
デフォルトのストレージコントローラは、qemu-system-x86_64
AHCIではなくクラシックIntel PIIX3 IDEコントローラのようです。ata_piix
AHCIを最小限の基準として使用する合理的に近代的な物理システムの初期化には、不要なカーネルモジュールが必要です。
したがって、カーネルはディスクをまったく表示できず、起動プロセスは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
新しいファイルを正常に作成したら、exit
chroot環境から離れて、umount
以前に行ったすべてのインストール作業を実行しますlosetup -d /dev/loop0
。 。
答え2
initrdファイルを再作成するのは正しいmkinitrd
方法ですが、最終的なターゲットオペレーティングシステムが使用するものにできるだけ近いシステムで実行する必要があります。mkinitrd
これは、カーネルとシステムで多くの自動検出を実行するためです。走る具体的には、initrdファイルで使用可能なカーネルモジュールに関するものです。以前のシステムとは明らかに非常に異なるホストOSでinitrdファイルを再生成し、不完全またはmkinitrd
一貫性のないinitrdを構築しました。
このような場合の最善のアプローチは、一般的に次のように始めることです。オリジナルディストリビューションインストールCD / DVD / ISOには、通常、この状況でinitrdファイルを再生成するのに役立つ「回復モード」があります。あなたの場合、ターゲットOSはopenSuSE 11.3のようですので、次のことができます。ISOを入手してくださいqemu
、ターゲットOSを調整したい仮想マシン(-hda
または-device ahci
必要に応じて一部のSCSI / SAS)を使用して起動し、そのシステムの最初の起動メニューで利用可能な「Rescue System」オプションを選択します。 ISOを見つけてログインroot
し、そこから実行します。
~# mount /dev/sda1 /mnt
~# cd /mnt
/mnt# mount --rbind /dev dev && mount --make-rslave dev
/mnt# mount -t proc proc proc
/mnt# mount -t sysfs sysfs sys
/mnt# chroot .
<chrooted># mkinitrd
...
<chrooted># exit
/mnt# umount dev/pts dev/shm dev proc sys
/mnt# cd ..
/# umount mnt
initrd ファイルを再作成します。
qemu
オプションのない単純なカーネルは、物理ターゲットシステムで実行されている実際のネイティブカーネル(openSuSE 11.3のカーネル)で起動した後にmkinitrd
正しく機能します。
もちろん、上記の作業の後、poweroff
ISOイメージなしで同じ仮想マシンで再実行されます。qemu
試したように、まったく異なるオペレーティングシステムでinitrdファイルを再作成することは完全に可能ですが、正確に知っておく必要があります。みんなこれ必須実行される(不可避)不完全/一貫性のない自動検出を無視するためにドライバを使用しますmkinitrd
。
あなたの場合、あなたが再生成したinitrdファイルにsd_mod
実際にディスクデバイスを提供するために必要なドライバが欠落していることがわかりました。/dev/sd*
コピーされない理由はおそらく所有者initrdファイルを再生成したオペレーティングシステムには、ドライバがロードsd_mod.ko
可能なモジュールとして含まれていませんが、ドライバをカーネルイメージ自体にコンパイルします。ide-disk.ko
これは、IDE対応項目()が約15年前までの基本モジュール(つまりコンパイル)ではなかったかのように、このモジュールは現在基本モジュールであり、10年前はまったく基本モジュールではなかったためです。しばしば完全に無視されます。
したがって、ホストオペレーティングシステムで行ったのと同じ操作を繰り返して指定すると、すべての設定がsd_mod
完了ata_piix
する可能性があります。ただし、この場合、たとえば元のインストールCD / DVD / ISOが利用できない場合は、mkinitrd -A
ホストオペレーティングシステムのchroot環境内で実行する方が安全な代替手段になる可能性があります。このパラメータは、mkinitrd
単に可能なすべてのドライバを含むことを示します。 。もちろん、これを行うには、initrdファイルを含むファイルシステムにさらに多くのディスク容量が必要ですが、ターゲットオペレーティングシステムのディスクから起動したら、単純な(パラメータなし)方法を使用してinitrdを再作成できますmkinitrd
。新しいハードウェアシステム用のinitrdファイル。
答え3
私が投稿したUUIDコメントに基づいています。
ディスク(ディスク/イメージ)へのアクセス権があると仮定すると、上記の@telcoMが提供した指示に従ってホストシステムにインストールできます。そこでは、走って得ることblkid
ができますUUID
/etc/fstab
その後、ディスクイメージを更新できます。こんなラインがあると思います。
/dev/sda1 / ext4 defaults 1 1
その行をコメントアウトし、たとえば次のように置き換え/dev/sda1
ます。UUID=###
UUID=aaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa / ext4 defaults 1 1
可能であれば、 grub linux ラインで同様の操作を行います。
grub> linux (hd0,msdos1)/boot/vmlinuz root=UUID=###