FEHLER: Root-Gerät erfolgreich gemountet, aber / sbin / init existiert nicht

7

Ich habe Linux Mint und Manjaro Linux auf meinem Computer installiert. Ich habe nur die Linux Mint auf dem MBR installiert. Für Manjaro habe ich eine /boot/efiPartition erstellt, die Installation auf MBR wurde jedoch nicht aktiviert.

Also kontrolliere ich grubvon Minze. Wenn ich jetzt versuche, Manjaro zu booten, zeigt es:

ERROR: resume: no device specified for hibernation: performing fsck on
dev/sda11  /dev/sda11: clean 1727/915712 files, .... blocks

WARNING: The root device is not configured to be mounted read-write!It
may be fsck'd again later

:mounting /dev/sda11 on real boot running cleanup hook [udev]

ERROR: Root device mounted successfully, but /sbin/init does not exist.

sh:can't access tty; job control turned off

[rootfs /]#

Nach der Shell-Eingabeaufforderung kann ich nichts schreiben. Es hängt oder manchmal zeigt es mir ständig Nachrichten wie:

usb 3-3: device not accepting address 2, error -62

und so weiter...

Ich habe versucht, init=/usr/lib/systemd/systemdGrub hinzuzufügen , wie ich in Google gesehen habe, aber immer noch das gleiche.

Ich muss beachten, dass ich für die Manjaro-Installation eine separate Partition für /und für /usrund für verwende /var. Das hat vielleicht einen Einfluss? Wie ich hier gesehen habe .

Aber das Problem ist, dass ich nichts schreiben kann, es hängt.

Ich habe hier auch einen Kommentar zu einem Blog-Beitrag gefunden , der besagt:

„Wenn Sie / usr als separate Partition behalten, müssen Sie die folgenden Anforderungen erfüllen:“ - Fügen Sie den Shutdown-Hook hinzu. Beim Herunterfahren wird auf eine gespeicherte Kopie des initramfs umgeschaltet, und / usr (und root) können ordnungsgemäß vom VFS abgemeldet werden.

“- Fügen Sie den fsck-Hook hinzu und markieren Sie / usr mit einem Kennwort von 0 in / etc / fstab. Obwohl dies für alle empfohlen wird, ist es obligatorisch, wenn Ihre / usr-Partition beim Booten überprüft werden soll. Ohne diesen Hook wird / usr niemals gefickt.

“- Fügen Sie den usr-Haken hinzu. Dadurch wird die Partition / usr nach dem Mounten von root gemountet. Vor 0.9.0 würde das Mounten von / usr automatisch erfolgen, wenn es in der Datei / etc / fstab des echten Roots gefunden würde. “

Und vergessen Sie niemals, mkinitcpio -p linux jedes Mal auszuführen, nachdem Sie Änderungen an mkinitcpio.conf vorgenommen haben, um die neuen Bilder tatsächlich zu erstellen und sie an den richtigen Ort zu bringen.

Das klingt vielversprechend, da sich meine /usrtatsächlich auf einer separaten Partition befindet. Was sind diese "Haken" und wie füge ich sie hinzu?

parted -l::

Model: ATA TOSHIBA MQ01ABD0 (scsi)
Disk /dev/sda: 750GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name                  Flags
 1      1049kB  1075MB  1074MB  ntfs            Basic data partition  hidden, diag
 2      1075MB  1347MB  273MB   fat32           Basic data partition  boot
 3      1347MB  1482MB  134MB   ntfs            Basic data partition  msftres
 4      1482MB  80,1GB  78,6GB  ntfs            Basic data partition  msftdata
 5      80,1GB  80,4GB  262MB   ext4
 6      80,4GB  90,4GB  10,0GB  ext4                                  msftdata
 7      93,0GB  102GB   9000MB  ext4                                  msftdata
 9      102GB   106GB   3999MB  linux-swap(v1)
10      106GB   106GB   250MB   fat32                                 boot
11      106GB   121GB   15,0GB  ext4                                  msftdata
12      121GB   151GB   30,0GB  ext4                                  msftdata
13      151GB   165GB   14,0GB  ext4                                  msftdata
14      165GB   206GB   40,9GB  ext4                                  msftdata
 8      206GB   743GB   537GB   ext4                                  msftdata
15      743GB   747GB   4000MB  linux-swap(v1)                        msftdata

grub::

menuentry 'Linux Mint 17 Cinnamon 64-bit, 3.13.0-24-generic (/dev/sda5)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt5'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt5 --hint-efi=hd0,gpt5 --hint-baremetal=ahci0,gpt5  19af2e09-8946-4ca2-9655-75921f3609a5
    else
      search --no-floppy --fs-uuid --set=root 19af2e09-8946-4ca2-9655-75921f3609a5
    fi
    linux   /vmlinuz-3.13.0-24-generic root=UUID=9356f543-f391-4ba5-9dcc-e8484d6935e0 ro   quiet splash $vt_handoff
    initrd  /initrd.img-3.13.0-24-generic
}
menuentry 'Linux Mint 17 Cinnamon 64-bit, 3.13.0-24-generic (/dev/sda5) -- recovery mode' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt5'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt5 --hint-efi=hd0,gpt5 --hint-baremetal=ahci0,gpt5  19af2e09-8946-4ca2-9655-75921f3609a5
    else
      search --no-floppy --fs-uuid --set=root 19af2e09-8946-4ca2-9655-75921f3609a5
    fi
    echo    'Loading Linux 3.13.0-24-generic ...'
    linux   /vmlinuz-3.13.0-24-generic root=UUID=9356f543-f391-4ba5-9dcc-e8484d6935e0 ro recovery nomodeset 
    echo    'Loading initial ramdisk ...'
    initrd  /initrd.img-3.13.0-24-generic
}


menuentry 'Manjaro Linux (0.8.10) (on /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-95ed019d-9269-4869-9f99-a03f002a53c6' {
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt11'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt11 --hint-efi=hd0,gpt11 --hint-baremetal=ahci0,gpt11  95ed019d-9269-4869-9f99-a03f002a53c6
    else
      search --no-floppy --fs-uuid --set=root 95ed019d-9269-4869-9f99-a03f002a53c6
    fi
    linux /boot/vmlinuz-312-x86_64 root=/dev/sda11
    initrd /boot/initramfs-312-x86_64.img
}
submenu 'Advanced options for Manjaro Linux (0.8.10) (on /dev/sda11)' $menuentry_id_option 'osprober-gnulinux-advanced-95ed019d-9269-4869-9f99-a03f002a53c6' {
    menuentry 'Manjaro Linux (0.8.10) (on /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-312-x86_64--95ed019d-9269-4869-9f99-a03f002a53c6' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt11'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt11 --hint-efi=hd0,gpt11 --hint-baremetal=ahci0,gpt11  95ed019d-9269-4869-9f99-a03f002a53c6
        else
          search --no-floppy --fs-uuid --set=root 95ed019d-9269-4869-9f99-a03f002a53c6
        fi
        linux /boot/vmlinuz-312-x86_64 root=/dev/sda11
        initrd /boot/initramfs-312-x86_64.img
    }
}
George
quelle
Dies ist ziemlich schwer zu debuggen, da Sie ein relativ komplexes Setup haben. Bitte bearbeiten Sie Ihre Frage und fügen Sie die Ausgabe sudo parted -lund den Inhalt Ihrer /boot/grub/grub.cfgDatei (oder zumindest den Manjaro-Eintrag) hinzu.
Terdon
OK, und sind Sie sicher, dass es /dev/sda11tatsächlich das Root-Dateisystem von Manjaro enthält? Haben Sie /etc/fstabdas Manjaro-System richtig eingerichtet , um die anderen benötigten Partitionen zu mounten? Können Sie bestätigen , dass es eine /sbin/initauf /dev/sda11?
Terdon
@terdon: Erstens habe ich keinen Zugang zu Manjaro, nur zu Mint. Ich bin jetzt mit Live-CD in Manjaro und wie ich sehen kann, gibt es ein / sbin / init. Die / etc / fstab enthält nur / dev / mapper / root-image und dev / sda9 Swap (aber ich bin mit Live-CD)
George
Sie müssen das Laufwerk in Mint mounten. Lauf mkdir foo && sudo mount /dev/sda11 foovon Mint. Überprüfen Sie dann, ob der Inhalt von ~/foowie ein /Verzeichnis aussieht , stellen Sie sicher, dass es ein Verzeichnis gibt, ~/foo/sbin/initund überprüfen Sie ~ / foo / etc / fstab`, um sicherzustellen, dass die Partitionen in Manjaro korrekt geladen sind.
Terdon
1
@terdon In ArchLinux /sbinist jetzt ein Symlink zu /usr/bin. @ George Dieser Blog-Kommentar verweist auf diesen Teil des Wikis . In Ihrem Fall kann das Problem der letzte Aufzählungspunkt sein. Sie müssen /usrvon der Init-Ramdisk gemountet werden.
Leiaz

Antworten:

7

Wie @Leiaz in den Kommentaren sehr richtig hervorhob, ist /sbinArch (und im weiteren Sinne Manjaro) nun ein Symlink zu /usr/bin. Dies bedeutet, dass es nicht existiert , wenn /usres nicht gemountet ist /usr/sbin/init. Sie müssen daher sicherstellen, dass diese /usrvon der ursprünglichen Ramdisk gemountet wird. Das bedeutet das Arch-Wiki-Zitat in Ihrem OP:

Wenn Sie / usr als separate Partition behalten, müssen Sie die folgenden Anforderungen erfüllen:

  • Aktivieren Sie mkinitcpio-generate-shutdown-ramfs.service oder fügen Sie den Shutdown-Hook hinzu.

  • Fügen Sie den fsck-Hook hinzu und markieren Sie / usr mit einem Kennwort von 0 in / etc / fstab. Obwohl dies für alle empfohlen wird, ist es obligatorisch, wenn Ihre / usr-Partition beim Booten überprüft werden soll. Ohne diesen Hook wird / usr niemals gefickt.

  • Fügen Sie den usr-Haken hinzu. Dadurch wird die Partition / usr nach dem Mounten von root gemountet. Vor 0.9.0 würde das Mounten von / usr automatisch erfolgen, wenn es in der Datei / etc / fstab des echten Roots gefunden würde.

Sie müssen also eine neue Init-Datei mit den richtigen Hooks 1 generieren . Diese werden durch Ändern der HOOKS=""Zeile in hinzugefügt /etc/mkinitcpio.conf. Damit

  1. Starten Sie Mint und hängen Sie das Manjaro- /Verzeichnis ein:

    mkdir manjaro_root && sudo mount /dev/sda11 manjaro_root
    

    Jetzt wird Manjaros Wurzel bei montiert ~/manjaro_root.

  2. Bearbeiten Sie die mkinitcpio.confDatei mit Ihrem Lieblingseditor (ich verwende nanoals Beispiel nicht mehr):

    sudo nano ~/manjaro_root/etc/mkinitcpio.conf
    

    Suchen Sie die HOOKSLinie und stellen Sie sicher, dass sie die entsprechenden Haken enthält

    HOOKS="shutdown usr fsck"
    

    Wichtig ": Entfernen Sie keine der bereits vorhandenen Haken. Fügen Sie einfach die oben genannten zu den dort vorhandenen hinzu. Beispielsweise könnte das Endergebnis so aussehen

    HOOKS="base udev autodetect sata filesystems shutdown usr fsck"
    
  3. Markieren Sie /usrmit einem passno von 0 in /etc/fstab. Öffnen manjaro_root/etc/fstabSie dazu die /usrZeile und suchen Sie sie . In diesem Beispiel /dev/sda12gehe ich davon aus, dass es sich um das handelt , das sich auf Ihrem System befindet. Die "Pass" -Nummer ist das letzte Feld eines /etc/fstabEintrags. Sie müssen also sicherstellen, dass die Linie so aussieht

    /dev/sda12  /usr  ext4  rw,errors=remount-ro     0      0
                                                            ^
                             This is the important one -----|
    
  4. Erstellen Sie das neue Init-Image. Dazu müssen Sie auch das Manjaro- /usrVerzeichnis mounten .

    sudo mount /dev/sda12 ~/manjaro_root/usr
    

    Ich habe nicht viel Erfahrung mit Arch, daher wird dies möglicherweise nicht benötigt (Sie können möglicherweise mkinitcpioohne a laufen chroot), aber um auf der sicheren Seite zu sein, richten Sie eine chrootUmgebung ein:

    sudo mount --bind /dev ~/manjaro_root/dev && 
    sudo mount --bind /dev/pts ~/manjaro_root/dev/pts && 
    sudo mount --bind /proc ~/manjaro_root/proc && 
    sudo mount --bind /sys ~/manjaro_root/sys &&
    sudo chroot ~/manjaro_root
    

    Sie befinden sich jetzt in einer Chroot-Umgebung, die denkt, dass dies ~/manjaro_root/tatsächlich der Fall ist /. Sie können jetzt Ihr neues Init-Image erstellen

    mkinitcpio -p linux
    
  5. Verlasse die chroot

    exit
    
  6. Aktualisieren Sie Ihre grub.cfg(erneut, dies wird möglicherweise nicht benötigt):

    sudo update-grub
    

Starten Sie nun neu und versuchen Sie erneut, Manjaro zu starten.


1 "Hooks" sind kleine Skripte, die angeben, mkinitcpiowas dem von ihm generierten Init-Image hinzugefügt werden soll.

terdon
quelle
: Wenn ich "mkinitcpio -p linux" eingebe, erhalte ich "FEHLER: Voreinstellung nicht gefunden /etc/mkinitcpio.d/linux.preset
George
@ George Gibt es ein Preset in /etc/mkinitcpio.d/? linuxist die Standardeinstellung unter Archlinux, vielleicht gibt Manjaro ihm einen anderen Namen.
Leiaz
@terdon: Zuallererst funktioniert es gut! Ich musste 'linux312' (den Kernel) anstelle von 'linux' verwenden. Es gibt mir immer noch die "WARNUNG: Das Root-Gerät ...", die ich in meinen ersten Zeilen von mir habe post aber ich denke das ist ok? Und zum Schluss kannst du mich auf einige Bücher oder Tutorials verweisen, um solche Sachen zu lernen? :). Ich möchte in der Lage sein, diese Dinge auch zu tun :) Und ich schätze Ihre Hilfe wirklich. Danke
George
Huh. Ich dachte, der springende Punkt /sbinwar, dass es sich nicht auf derselben Partition wie befinden musste /usr. Ich frage mich, warum Arch beschlossen hat, sie zusammenzuführen.
Nate Eldredge
@terdon: Etwas letztes! Ich muss das alles für jedes Kernel-Update tun? Und der Grund, warum ich all dies tun musste, war, dass ich separate Partitionen für root und usr hatte.
George
2

In Mint können Sie root in Ihre Manjaro-Installation ändern , um initramfs neu zu generieren.

Hängen Sie Ihr Manjaro-Stammverzeichnis in das Verzeichnis Ihrer Wahl ein ( ~/foo). Mounten Sie Ihre /usrPartition unter ~/foo/usr, mounten Sie auch boot, wenn es separat ist. Mount proc sys dev:

# mount -t proc proc ~/foo/proc/
# mount --rbind /sys ~/foo/sys/
# mount --rbind /dev ~/foo/dev/

Und Wurzel wechseln: chroot ~/foo /bin/bash

Wie im Wiki erklärt : "Hooks sind kleine Skripte, die beschreiben, was dem Bild hinzugefügt wird". Bearbeiten /etc/mkinitcpio.conf, fügen Sie die usr fsckund shutdownHooks zum HOOKEintrag hinzu, wie im Wiki und in den Kommentaren angegeben. Initramfs neu generieren: mkinitcpio -p linux(wird geschrieben in /boot)

Beenden Sie die Partitionen chroot, unmount proc, sys, dev und Manjaro und versuchen Sie einen Neustart.

Leiaz
quelle
: Vielen Dank für Ihre Hilfe. Terdon gab mir viele Details, um das Ergebnis zu erzielen :). (Upvoted)
George
0

Es wurde nur ungefähr 6 Stunden damit verschwendet, ein USB-Startgerät für Linux Mint zu erstellen, alle meine Daten von 2 Partitionen zu sichern und verschiedene Rettungsversuche zu versuchen, nachdem die gefürchtete Meldung sbin / init nicht gefunden wurde ...

Dies geschah nach einem kleinen Update - das System wurde nicht neu gestartet. Es scheint, dass der gesamte sbin-Ordner auf mysteriöse Weise gelöscht wurde und nicht wiederhergestellt werden konnte. Der einzige sinnvolle Rat, den ich finden konnte, war "Neuinstallation".

Die Lösung (weniger als 5 Minuten !!) war wie folgt:

  1. Booten von der ursprünglichen Live-Installationsdiskette (in diesem Fall Cinnamon Mint 17.1),
  2. Öffnen Sie einen Datei-Explorer als Root (entweder klicken Sie mit der rechten Maustaste auf einen Ordner und wählen Sie "Als Root öffnen", öffnen Sie alternativ ein Terminal und geben Sie "sudo nemo" ein).
  3. Suchen Sie den Ordner sbin der Live-Installation
  4. Hängen Sie die defekte Mint-Partition ein (klicken Sie auf das Symbol).
  5. Ändern Sie die Berechtigungen für den Ordner sbin (Rechtsklick, Eigenschaften, Berechtigungen, Andere, Dateizugriff, Lesen und Schreiben - und dann auf "Berechtigungen auf eingeschlossene Dateien anwenden" klicken).
  6. Kopieren Sie den gesamten sbin-Ordner in das installierte Stammverzeichnis (/). (Hier befinden sich die Ordner "bin", "boot", "home", "usr" usw. des Systems.)
  7. Starten Sie neu
Mikef
quelle