LRI: Thiết bị root được gắn thành công, nhưng / sbin / init không tồn tại


7

Tôi đã cài đặt Linux Mint và Manjaro Linux trên máy tính của mình. Tôi chỉ cài đặt Linux mint trên MBR. Đối với Manjaro, tôi đã tạo một /boot/efiphân vùng, nhưng tôi chưa kiểm tra để cài đặt vào MBR.

Vì vậy, tôi đang kiểm soát grubtừ bạc hà. Bây giờ, khi tôi cố gắng khởi động Manjaro, nó hiển thị:

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 /]#

Sau dấu nhắc shell, tôi không thể viết bất cứ điều gì. Nó bị treo hoặc đôi khi nó hiển thị cho tôi các tin nhắn liên tục như:

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

và như thế...

Tôi đã cố gắng thêm init=/usr/lib/systemd/systemdvào grub, như tôi thấy trong google, nhưng vẫn như vậy.

Tôi phải lưu ý rằng để cài đặt Manjaro tôi đang sử dụng một phân vùng riêng cho /và cho /usrvà cho /var. Điều này có thể có ảnh hưởng? Như tôi đã thấy ở đây .

Nhưng vấn đề là tôi không thể viết bất cứ điều gì, nó bị treo.

Tôi cũng tìm thấy một bình luận trên một bài đăng blog ở đây nói rằng:

Nếu bạn giữ / usr như một phân vùng riêng biệt, bạn phải tuân thủ các yêu cầu sau: Nâng cấp - Thêm móc tắt máy. Quá trình tắt máy sẽ xoay vòng tới một bản sao đã lưu của initramfs và cho phép / usr (và root) được ngắt kết nối chính xác khỏi VFS.

Nâng cấp - Thêm móc fsck, đánh dấu / usr với mật khẩu 0 in / etc / fstab. Mặc dù được khuyến nghị cho mọi người, nhưng bắt buộc nếu bạn muốn phân vùng / usr của mình được khởi động khi khởi động. Không có cái móc này, / usr sẽ không bao giờ là fsck'd.

Nâng cấp - Thêm móc usr. Điều này sẽ gắn kết phân vùng / usr sau khi root được gắn kết. Trước 0.9.0, việc gắn / usr sẽ tự động nếu nó được tìm thấy trong / root / fstab thực sự của root

Và đừng bao giờ quên chạy mkinitcpio -p linux mỗi lần sau khi bạn thay đổi mkinitcpio.conf để thực sự tạo ra những hình ảnh mới và đặt chúng đúng chỗ.

Điều đó nghe có vẻ hứa hẹn vì tôi /usrthực sự nằm trên một phân vùng riêng. Những "cái móc" này là gì và làm cách nào để thêm chúng?

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
    }
}

Điều này khá khó để gỡ lỗi vì bạn có một thiết lập tương đối phức tạp. Vui lòng chỉnh sửa câu hỏi của bạn và thêm đầu ra sudo parted -lvà nội dung của /boot/grub/grub.cfgtệp của bạn (hoặc ít nhất là mục Manjaro).
terdon

OK, và bạn có chắc rằng /dev/sda11thực sự có chứa hệ thống tập tin gốc của manjaro? Bạn đã thiết lập chính xác /etc/fstabtrên hệ thống manjaro để gắn kết các phân vùng khác mà bạn cần chưa? Bạn có thể xác nhận rằng có một /sbin/inittrên /dev/sda11?
terdon

@terdon: Trước hết, tôi không có quyền truy cập vào manjaro, chỉ với mint. Bây giờ tôi có cd trực tiếp trong manjaro và như tôi có thể thấy có / sbin / init. / Etc / fstab chỉ chứa / dev / mapper / root-image và dev / sda9 hoán đổi (nhưng tôi với cd trực tiếp)
George

Bạn cần phải gắn ổ đĩa trong Mint. Chạy mkdir foo && sudo mount /dev/sda11 footừ Mint. Sau đó kiểm tra xem nội dung ~/footrông giống như một /thư mục, đảm bảo có một ~/foo/sbin/initvà kiểm tra ~ / foo / etc / fstab` để đảm bảo rằng các phân vùng được tải chính xác khi ở Manjaro.
terdon

1
@terdon Trong ArchLinux /sbinhiện là một liên kết tượng trưng đến /usr/bin. @George Đó là bình luận blog tham khảo một phần của wiki . Trong trường hợp của bạn, vấn đề có thể là điểm đạn cuối cùng. Bạn cần /usrđược gắn bởi init ramdisk.
Leiaz

Câu trả lời:


7

Như @Leiaz đã chỉ ra rất chính xác trong các bình luận, /sbintrong Arch (và bằng cách mở rộng, Manjaro) giờ đây là một liên kết tượng trưng /usr/bin. Điều này có nghĩa là trừ khi /usrđược gắn kết, /usr/sbin/initsẽ không tồn tại. Do đó, bạn cần chắc chắn rằng nó /usrđược gắn bởi ramdisk ban đầu. Đó là những gì trích dẫn Arch wiki trong OP của bạn có nghĩa là:

Nếu bạn giữ / usr làm phân vùng riêng, bạn phải tuân thủ các yêu cầu sau:

  • Kích hoạt mkinitcpio-created-shutdown-ramfs.service hoặc thêm móc tắt máy.

  • Thêm hook fsck, mark / usr với passno là 0 in / etc / fstab. Mặc dù được khuyến nghị cho mọi người, nhưng bắt buộc nếu bạn muốn phân vùng / usr của mình được khởi động khi khởi động. Không có cái móc này, / usr sẽ không bao giờ là fsck'd.

  • Thêm móc usr. Điều này sẽ gắn kết phân vùng / usr sau khi root được gắn kết. Trước 0.9.0, việc gắn / usr sẽ tự động nếu nó được tìm thấy trong root / etc / fstab thực sự.

Vì vậy, bạn cần tạo một tệp init mới với các hook đúng 1 . Chúng được thêm vào bằng cách thay đổi HOOKS=""dòng trong /etc/mkinitcpio.conf. Vì thế

  1. Khởi động vào Mint và gắn /thư mục Manjaro :

    mkdir manjaro_root && sudo mount /dev/sda11 manjaro_root
    

    Bây giờ, root của Manjaro sẽ được gắn vào ~/manjaro_root.

  2. Chỉnh sửa mkinitcpio.conftệp bằng trình chỉnh sửa yêu thích của bạn (Tôi đang sử dụng nanolàm ví dụ, không còn nữa):

    sudo nano ~/manjaro_root/etc/mkinitcpio.conf
    

    Tìm HOOKSdòng và đảm bảo nó chứa các móc liên quan

    HOOKS="shutdown usr fsck"
    

    Quan trọng ": không xóa bất kỳ hook nào đã có. Chỉ cần thêm ở trên vào những cái đó. Ví dụ, kết quả cuối cùng có thể trông giống như

    HOOKS="base udev autodetect sata filesystems shutdown usr fsck"
    
  3. Đánh dấu /usrvới một passno 0 in /etc/fstab. Để làm điều này, mở manjaro_root/etc/fstabvà tìm /usrdòng. Trong ví dụ này, tôi sẽ giả sử nó /dev/sda12nhưng sử dụng bất kỳ cái nào trong hệ thống của bạn. Số "vượt qua" là trường cuối cùng của một /etc/fstabmục. Vì vậy, bạn cần chắc chắn rằng dòng này trông như thế nào

    /dev/sda12  /usr  ext4  rw,errors=remount-ro     0      0
                                                            ^
                             This is the important one -----|
    
  4. Tạo hình ảnh init mới. Để làm điều này, bạn cũng sẽ phải gắn /usrthư mục của Manjaro .

    sudo mount /dev/sda12 ~/manjaro_root/usr
    

    Tôi không có nhiều kinh nghiệm với Arch vì vậy điều này có thể không cần ong (bạn có thể chạy mkinitcpiomà không cần a chroot) nhưng để ở bên an toàn, hãy thiết lập một chrootmôi trường:

    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
    

    Bây giờ bạn sẽ ở trong một môi trường chroot nghĩ rằng đó ~/manjaro_root/là thực sự /. Bây giờ bạn có thể tiếp tục và tạo hình ảnh init mới của bạn

    mkinitcpio -p linux
    
  5. Thoát khỏi chroot

    exit
    
  6. Cập nhật grub.cfg(một lần nữa, điều này có thể không thực sự cần thiết):

    sudo update-grub
    

Bây giờ khởi động lại và thử khởi động lại vào Manjaro.


1 "Móc" là các tập lệnh nhỏ cho biết mkinitcpionhững gì cần được thêm vào hình ảnh init mà nó tạo ra.


: Khi tôi nhập "mkinitcpio -p linux", nó sẽ cho tôi "LRI: Không tìm thấy cài đặt trước /etc/mkinitcpio.d/linux.preset
George

@George Có cài đặt trước /etc/mkinitcpio.d/nào không? linuxlà mặc định trên Archlinux, có lẽ Manjaro đặt cho nó một cái tên khác.
Leiaz

@terdon: Trước hết, nó hoạt động tốt! Tôi đã phải sử dụng 'linux312' (kernel) thay vì 'linux'. Nó vẫn cho tôi "CẢNH BÁO: Thiết bị gốc ..." Tôi có trong những dòng đầu tiên của mình nhưng tôi nghĩ rằng điều này là ổn? Và cuối cùng, bạn có thể chỉ cho tôi một số cuốn sách hoặc hướng dẫn để tìm hiểu loại công cụ này? :). Tôi cũng muốn có thể làm những việc này :) Và tôi thực sự đánh giá cao sự giúp đỡ của bạn. Cảm ơn
George

Huh. Tôi nghĩ rằng toàn bộ vấn đề /sbinlà nó không phải nằm trên cùng một phân vùng /usr. Tôi tự hỏi tại sao Arch quyết định hợp nhất chúng?
Nate Eldredge

@terdon: Một cái gì đó cuối cùng! Tôi cần phải làm tất cả điều này cho mỗi bản cập nhật kernel? Và lý do đầu tiên phải làm tất cả những điều này là tôi có các phân vùng riêng cho root và usr?
George

2

Từ Mint, bạn có thể thay đổi root để cài đặt Manjaro, để tạo lại initramfs.

Gắn gốc Manjaro của bạn trong thư mục bạn chọn ( ~/foo). Gắn kết /usrphân vùng của bạn tại ~/foo/usr, cũng gắn kết khởi động nếu nó là riêng biệt. Mount Proc sys dev:

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

Và thay đổi root: chroot ~/foo /bin/bash

Như đã giải thích trong wiki : "Móc là các tập lệnh nhỏ mô tả những gì sẽ được thêm vào hình ảnh". Chỉnh sửa /etc/mkinitcpio.conf, thêm usr fsckshutdownmóc vào HOOKmục, như được chỉ ra trong wiki và bình luận. Tái tạo initramfs: mkinitcpio -p linux(nó sẽ được viết bằng /boot)

Thoát khỏi các phân vùng chroot, unmount Proc, sys, dev và Manjaro và thử khởi động lại.


: Cảm ơn sự giúp đỡ của bạn.terdon đã cho tôi nhiều chi tiết để đạt được kết quả :). (Được nâng cấp)
George

0

Chỉ lãng phí khoảng 6 giờ để tạo một thiết bị khởi động USB cho Linux Mint, sao lưu tất cả dữ liệu của tôi từ 2 phân vùng và thử nhiều nỗ lực cứu hộ khác nhau sau khi nhận được thông báo không tìm thấy sbin / init đáng sợ ...

Điều này xảy ra sau một bản cập nhật nhỏ - hệ thống sẽ không khởi động lại. Có vẻ như toàn bộ thư mục sbin đã bị xóa một cách bí ẩn và không thể phục hồi. Lời khuyên có ý nghĩa duy nhất tôi có thể tìm thấy là 'cài đặt lại'.

Cách khắc phục, (chưa đầy 5 phút !!) như sau:

  1. khởi động từ đĩa cài đặt trực tiếp ban đầu (Cinnamon Mint 17.1 trong trường hợp này),
  2. mở trình thám hiểm tệp dưới dạng root (nhấp chuột phải vào thư mục và chọn 'open as root', thay vào đó mở một thiết bị đầu cuối và gõ 'sudo nemo'
  3. định vị thư mục sbin cài đặt trực tiếp
  4. gắn kết phân vùng Mint bị lỗi (nhấp vào biểu tượng)
  5. thay đổi quyền áp dụng cho thư mục sbin (nhấp chuột phải, Thuộc tính, Quyền, Khác, Truy cập tệp, đọc và ghi - sau đó nhấp vào 'Áp dụng quyền đối với tệp được đính kèm')
  6. sao chép toàn bộ thư mục sbin vào thư mục gốc đã cài đặt (/). (Đây là nơi đặt các thư mục hệ thống 'bin', 'boot', 'home', 'usr', v.v.)
  7. Khởi động lại
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.