Bagaimana cara mengembalikan sistem setelah secara tidak sengaja menghapus semua kernel?

Jawaban:

93

Boot ke live CD (atau live USB), pasang beberapa sistem, chroot ke dalamnya dan instal kernel. Setelah instalasi kernel berhasil, unmount sistem file.

  1. Buka Terminal
  2. Pasang partisi Ubuntu: sudo mount /dev/sdXY /mnt
  3. Pasang beberapa partisi khusus:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (opsional) Saat Anda terhubung ke jaringan, gunakan server DNS dari lingkungan Live Anda (jika tidak nama host mungkin tidak dapat diselesaikan):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Chroot ke dalam /mnt:sudo chroot /mnt
  6. Instal kernel Linux: apt-get install linux-image-generic(tidak perlu sudo karena Anda root setelah chroot)
  7. Setelah instalasi kernel berhasil, keluar dari chroot dan unmount beberapa sistem file:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. Mulai ulang dan hapus CD atau USB: sudo reboot
Lekensteyn
sumber
Itu yang akan saya sarankan. Saya tidak bisa melihat mengapa itu tidak berhasil.
Oli
Ok, terima kasih sudah mengkonfirmasi. Saya telah menambahkan langkah-langkah finalisasi juga, unmount /mnt. Ubuntu biasanya menangani unmount / menyinkronkan sistem file, tetapi ini terlihat lebih bersih bagi saya.
Lekensteyn
1
@ MaheshKatta Anda harus memasang RAID terlebih dahulu. Jadi alih-alih langkah dua (di mana Anda memasang satu drive) Anda akan memetakan /dev/mdxxxdrive - dengan asumsi itu mdadm.
Oli
4
@James Edit /etc/resolv.conf(hapus jika itu adalah symlink) dan masukkan sesuatu seperti nameserver 8.8.8.8itu (server DNS publik Google). Ganti jika perlu.
Lekensteyn
3
Nvm. Sepertinya saya harus mengedit file dalam chroot itu sendiri. Mungkin Anda harus menambahkan jawabannya cp /etc/resolv.conf /mnt/etc/resolv.confsebelum masuk ke chroot. Itu berhasil bagi saya
Peter Raeves
56

Prosedur yang diperluas ini mencakup sebagian besar komplikasi yang dapat terjadi, termasuk masalah koneksi ke Internet di chroot, tidak mengetahui paket kernel mana yang harus diinstal (sebelum Ubuntu 12.10, tidak akan selalu demikian linux-image-generic), tidak mengetahui pada awalnya partisi mana atau bahkan drive fisik mana yang berisi sistem /file, dan memiliki /bootpartisi yang terpisah .

Saya belum menulis ini dengan mengacu pada salah satu prosedur lain di sini, meskipun Anda akan melihat beberapa kesamaan. Saya mendasarkannya, secara longgar, pada prosedur di sini (meskipun instruksi itu untuk sesuatu yang sangat berbeda, saya telah mengadaptasinya secara luas, dan hanya beberapa perintah, bukan prosa, yang disalin).

Anda menghapus semua paket kernel, dan Ubuntu tidak dapat boot tanpa kernel diinstal. Jadi solusinya adalah boot dari live CD / DVD / USB, chrootke sistem yang diinstal, dan instal kernel di dalamnya.

  1. Boot dari live CD / DVD Ubuntu atau USB flash drive langsung.

  2. Pilih Coba Ubuntu (bukan Instal Ubuntu ).

  3. Saat desktop muncul, pastikan Anda terhubung ke Internet. Jika tidak, sambungkan ke Internet. Salah satu cara untuk melihat apakah Anda terhubung ke Internet adalah dengan membuka browser web. Anda bahkan dapat mengikuti petunjuk lainnya dengan membawa jawaban Tanya Ubuntu ini di browser web Anda, dalam sistem live CD / DVD / USB. Saya sangat merekomendasikan melakukan itu.

  4. Buka jendela Terminal dengan Ctrl+ Alt+ T.

  5. Di jendela Terminal, jalankan perintah ini untuk mendaftar partisi Anda:

     sudo parted -l
    

    Anda akan melihat sesuatu seperti ini (tetapi tidak akan persis seperti ini):

    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sda: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type      File system     Flags
     1      1049kB  20.4GB  20.4GB  primary   ext4            boot
     2      20.4GB  21.5GB  1072MB  extended
     5      20.4GB  21.5GB  1072MB  logical   linux-swap(v1)
    
    
    Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0
    has been opened read-only.
    Error: Can't have a partition outside the disk!
    
  6. Periksa output yang Anda dapatkan, untuk menentukan nama perangkat dari partisi yang berisi sistem /file dari sistem Ubuntu yang diinstal pada hard drive (yang sedang Anda perbaiki).

    • Jika Anda hanya memiliki satu ext4partisi, itu saja.

    • Jika Anda memiliki lebih dari satu ext4partisi, itu mungkin yang pertama. Namun, jika yang pertama sangat kecil - kurang dari satu gigabyte - maka itu mungkin merupakan /bootpartisi yang terpisah (ingat itu juga).

      Harap dicatat bahwa ada atau tidaknya bootdaftar di bawah Flagsini tidak ada hubungannya dengan apakah suatu partisi adalah partisi yang terpisah atau tidak /boot. Sistem saya, yang informasinya tercantum di atas, tidak memiliki /bootpartisi terpisah .

    • Nama perangkat untuk partisi dimulai dengan nama perangkat untuk drive fisik, dinyatakan segera setelah Diskdi baris kedua. Kemudian cukup tambahkan nomor partisi di akhir itu. Jadi, nama perangkat untuk partisi yang berisi sistem file saya / adalah /dev/sda1. Berikut adalah dua baris di mana saya menemukan informasi itu:

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • Jika Anda memiliki lebih dari satu drive fisik, Anda akan mendapatkan lebih dari satu daftar seperti apa yang ditunjukkan di atas. Tetapi kecuali jika Anda memiliki sistem lain yang mirip Unix yang diinstal, Anda mungkin hanya akan memiliki satu drive yang berisi ext4partisi, setidaknya tanpa membuatnya secara sengaja di drive lain. Jika Anda memiliki banyak drive dengan ext4partisi, maka ext4partisi yang berisi /sistem file Anda mungkin ada di drive yang juga berisi linux-swappartisi.

    • Ini mungkin bahwa sistem Ubuntu Anda /filesystem pada partisi tipe lain dari ext4. Ketika ini terjadi, hampir selalu ext3, dan hampir selalu pada sistem yang cukup lama. Sangat jarang hal ini terjadi, kecuali jika Anda sendiri yang mengaturnya sendiri.

    Ingat nama perangkat partisi yang berisi /sistem file Anda (atau tuliskan). Jika berbeda dengan /dev/sda1, maka Anda akan menggantinya /dev/sda1dengan langkah-langkah di bawah ini.

    (Jika sepertinya Anda memiliki /bootpartisi yang terpisah , ingat nama perangkat untuk itu juga.)

  7. Pasang /filesystem ke /mnt, dan pasang /devfilesystemnya:

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. Periksa apakah sistem Ubuntu yang rusak yang Anda perbaiki memiliki /bootpartisi terpisah yang harus dipasang secara terpisah. (Jika Anda yakin tidak, Anda dapat melewati ini.)

    Untuk memeriksa, jalankan:

    ls /mnt/boot
    

    Jika ada output (seperti grub memtest86+.bin memtest86+_multiboot.bin, tetapi tidak harus persis seperti itu), maka sistem yang rusak /bootada di partisi yang sama /dan Anda tidak perlu me-mount apa pun untuk mengaksesnya.

    Tetapi jika tidak ada output, maka Anda harus me-mount sistem /bootfile:

    sudo mount BOOT-PARTITION /mnt/boot

    Ganti BOOT-PARTITIONdengan nama perangkat /bootpartisi (lihat langkah 6 di atas).

  9. chroot ke dalam sistem yang rusak, pasang sistem file virtual penting yang tersisa, dan tetapkan beberapa variabel lingkungan penting:

    sudo chroot /mnt
    mount -t proc none /proc
    mount -t sysfs none /sys
    mount -t devpts none /dev/pts
    export HOME=/root
    export LC_ALL=C
    
  10. Tentukan apakah akses Internet berfungsi dari dalam dengan chrootmenggunakan pingbeberapa host andal yang dikenal merespons secara normal terhadap ping:

    ping -c 5 www.google.com
    

    Anda harus melihat sesuatu seperti ini:

    PING www.l.google.com (74.125.131.147) 56(84) bytes of data.
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=1 ttl=44 time=61.3 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=2 ttl=44 time=62.3 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=3 ttl=44 time=61.8 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=4 ttl=44 time=63.8 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=5 ttl=44 time=66.6 ms
    
    --- www.l.google.com ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4006ms
    rtt min/avg/max/mdev = 61.367/63.212/66.608/1.897 ms
    
    • Jika sebagian besar terlihat seperti itu, dan angka sebelumnya % packet losskurang dari 100, maka koneksi internet di dalamnya chrootberfungsi:

      5 packets transmitted, 5 received, 0% packet loss, time 4006ms

      Ini berfungsi, sehingga Anda dapat melewati langkah 11 .

    • Jika sebagian besar terlihat seperti itu, dan nomor sebelumnya % packet lossadalah 100, koneksi perlu pemecahan masalah. Pastikan koneksi pada sistem live CD (misalnya, melalui browser web, atau dengan menjalankan perintah yang sama di chroottab / jendela Terminal yang terpisah ) tidak berfungsi. Pastikan Anda mengetik perintah dengan benar. Gunakan www.google.comjika Anda belum.

    • Jika output tidak terlihat seperti di atas sama sekali, tetapi sebaliknya mengatakan ping: unknown host www.google.com, maka jaringan belum berfungsi di chroot.

  11. Siapkan jaringan di Internet chroot. Lewati langkah ini kecuali Anda mendapat unknown hostkesalahan di langkah 10 di atas.

    Untuk menyiapkan jaringan, cadangan sistem yang rusak ini hostsfile, dan menyalin CD sistem hidup ini hostsdan resolv.conffile. (Anda tidak perlu mencadangkan versi sistem yang rusak resolv.conf, karena file itu secara otomatis dibuat ulang saat itu juga.)

    Buka tab Terminal baru ( Ctrl+ Shift+ T) atau, jika Anda suka, jendela Terminal baru ( Ctrl+ Shift+ N, atau hanya Ctrl+ Alt+ T). Jalankan perintah ini di dalamnya:

    sudo cp /mnt/etc/hosts /mnt/etc/hosts.old
    sudo cp /etc/hosts /mnt/etc/hosts
    sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
    exit
    

    ( exitPerintah di akhir menutup tab / jendela baru.)

    Ulangi langkah 10 di atas untuk memastikan akses Internet berfungsi sekarang dari dalam chroot. Itu harus.

  12. Cari tahu paket kernel mana yang harus diinstal. Biasanya, ini akan terjadi linux-image-generic. Tapi tidak selalu.

    Jika Anda tidak yakin akan menginstal yang mana, sebagian tergantung pada rilis Ubuntu mana yang telah Anda instal, dan sebagian pada informasi lainnya. Jika Anda tidak yakin rilis Ubuntu mana yang telah Anda instal, cari tahu dengan menjalankan perintah ini (di chroot, bukan di jendela / tab Terminal terpisah):

    lsb_release -r
    
    • Di Ubuntu 12.10 (rilis Ubuntu berikutnya, saat ini dalam pengembangan), akan selalu seperti itu linux-image-generic. (Lihat ini , ini , dan ini .)

    • Di Ubuntu 12,04 LTS, kemungkinan yang ada adalah linux-image-genericdan linux-image-generic-pae. (Tidak seperti versi sebelumnya, 12.04 tidak lagi memiliki kernel server dan desktop terpisah.)

      • Jika sistem Ubuntu yang diinstal (yang Anda perbaiki) adalah versi 64-bit, gunakan linux-image-generic. ( linux-image-generic-paehanya berlaku untuk sistem 32-bit.)

        Dimungkinkan untuk memiliki sistem Ubuntu 32-bit yang diinstal pada komputer 32-bit atau 64-bit. Selain itu, Anda mungkin menggunakan CD live 32-bit atau 64-bit untuk memperbaiki sistem yang diinstal 32-bit. Jadi, jika Anda tidak tahu apakah sistem Ubuntu yang diinstal adalah 32-bit atau 64-bit, periksa dengan menjalankan perintah ini (di chroot, bukan di jendela / tab Terminal terpisah):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        Output akan berupa 32atau 64.

        (Harap dicatat bahwa uname -mini bukan cara yang benar untuk menemukan informasi ini, karena bahkan ketika berjalan dalam chroot, yang akan memberitahu Anda arsitektur kernel yang berjalan , yang merupakan kernel CD sistem hidup dan tidak terpasang (rusak) sistem kernel.)

      • Jika sistem Ubuntu yang terinstal (yang Anda perbaiki) adalah versi 32-bit, kernel terbaik untuk digunakan akan tergantung pada berapa banyak RAM yang Anda miliki. Saya merekomendasi:

        • linux-image-generic jika Anda memiliki kurang dari 3 GB RAM
        • linux-image-generic-pae jika Anda memiliki 3 GB RAM atau lebih.

        (Beginilah installer Ubuntu memilih yang mana yang akan disiapkan, sejak installer memperoleh kemampuan untuk menginstal kernel PAE. Lihat resolusi untuk bug ini . Jika Anda ingin mengetahui apa itu PAE, lihat artikel Wikipedia ini . Jika Anda ingin pelajari tentang PAE di Ubuntu, lihat halaman wiki Ubuntu ini .)

        Jika Anda tidak tahu berapa banyak RAM yang Anda miliki, jalankan perintah ini untuk mencari tahu:

        grep MemTotal /proc/meminfo
        

        Itu tercantum dalam kilobyte . Untuk mengonversi ke gigabyte , bagilah dengan 1.048.576 (1024 2 ).

        • 3 gigs = 3.145.728 kB
    • Pada rilis Ubuntu sebelumnya 12,04, kemungkinan besar kemungkinan linux-image-generic, linux-image-generic-pae, dan linux-image-server.

      • Jika Anda menjalankan sistem Server Ubuntu, gunakan linux-image-server.
      • Jika tidak, ikuti saran di atas untuk sistem 12,04.
  13. Inilah saat yang telah Anda tunggu-tunggu! Instal kernel di sistem yang rusak.

    (Seperti sebelumnya, kecuali jika dinyatakan sebaliknya, perintah ini dijalankan di chroot, bukan di jendela / tab Terminal terpisah.)

    apt-get update
    apt-get -y install linux-image-generic

    Ganti linux-image-genericdengan paket kernel apa pun yang Anda putuskan untuk diinstal pada langkah 12 di atas, jika berbeda.

  14. Jika Anda harus melakukan langkah 11 untuk mengatur jaringan di chroot, kembalikan hostsfile yang lama . Jika Anda melewatkan langkah 11, lewati langkah ini juga.

    Untuk mengembalikannya, jalankan perintah ini:

    cp /etc/hosts.old /etc/hosts
    
  15. Lepas sistem file, exitdari chroot:

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. Matikan live CD / DVD / sistem USB, lepaskan live CD / DVD atau USB flash drive. Boot ke sistem yang diinstal pada hard drive, yang baru saja Anda perbaiki. Anda telah menginstal paket kernel di dalamnya (dan sebagai bagian dari instalasi, kernel yang disediakannya akan ditambahkan kembali ke menu boot GRUB2). Jika semuanya berfungsi dengan benar, sistem Anda harus boot tanpa masalah. (Saya pikir ini mungkin membutuhkan waktu lebih lama untuk boot dari biasanya, kali ini.)

PENOLAKAN: Saya tidak menguji prosedur di atas pada setiap sistem Ubuntu yang memungkinkan , jadi ada kemungkinan ada kesalahan di dalamnya yang belum saya identifikasi.

Di masa depan, saya sarankan selalu mencoba untuk tetap menginstal dua kernel. Ada baiknya memiliki dua jika salah satu dari mereka berhenti bekerja karena alasan apa pun (Anda dapat memilih yang lain di menu boot GRUB2). Selain itu, jika Anda bermaksud menyimpan dua kernel dan Anda secara tidak sengaja menghapus satu kernel lebih dari yang seharusnya dan reboot, Anda masih memiliki satu yang tersisa untuk boot.

Eliah Kagan
sumber
1
Ini mungkin penjelasan tertulis terbaik tentang bagaimana melakukan sesuatu yang kompleks di Linux yang pernah saya baca. Terima kasih
ZincX
Wow, ini sangat membantu! Terima kasih banyak
Rafał Cieślak
2
Terima kasih banyak, Eliah - setelah dengan bodohnya menghapus semua gambar linux saya, Anda menyimpan bacon saya. Satu-satunya masalah yang saya alami adalah pada langkah: sudo cp /etc/resolv.conf /mnt/etc/resolv.conf Saya mendapat "cp: tidak menulis melalui kesalahan symlink` /mnt/etc/resolv.conf 'yang bermasalah. Saya menemukan utas ini dan mengikuti instruksi oleh satu poster ke: "rm /mnt/etc/resolv.conf" sebelum "cp /etc/resolv.conf /mnt/etc/resolv.conf" untuk menyelesaikan masalah symlink yang menjuntai.
@ xcal400 /etc/resolv.confsaat ini dikelola oleh resolvconf, itu akan secara otomatis dihasilkan ketika menggunakan NetworkManager dan dapat dengan aman dihapus menggunakan rm /etc/resolv.confseperti yang Anda ketahui .
Lekensteyn
3
Yang ini harus menjadi jawaban yang diterima. Terima kasih!
Jean-Michel Garcia
0

Ketika saya menghapus kernel saya, saya menemukan solusi ini di Forum Ubuntu. Saya mengikuti setiap langkah dan sistem dipulihkan. Semoga ini bisa membantu Anda.

Chroot mungkin berfungsi, chroot berarti bahwa ketika Anda memulai sistem, Anda mengubah sistem file root. Misalnya Anda mulai dari CD langsung tetapi Anda mengubah root "/" ke tempat ubuntu Anda diinstal.

Katakanlah ubuntu Anda terinstal di / dev / sda2 maka Anda dapat mencoba perintah berikut:

Kode:

sudo mount /dev/sda2 /mnt
sudo cp /etc/resolv.conf /mnt/etc/
sudo cp /etc/hosts /mnt/etc/
sudo mount --bind /dev/ /mnt/dev
sudo chroot /mnt
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

sekarang Anda root "/" di / dev / sda2, coba instal kernel

apt-get update
apt-get install linux-image-2.6.32-26-generic
update-initramfs -cv -k all
update-grub

Saya harus melakukan sedikit tebakan di sini karena saya tidak pernah melakukan ini sebelumnya tetapi ini harus tentang hal itu. Tidak tahu apakah Anda mendapatkan peringatan kesalahan fstab (seperti tidak dapat menemukan root).

Sekarang Anda perlu membersihkan beberapa hal dan melepas partisi yang terpasang: Kode:

rm /etc/resolv.conf
rm /etc/hosts
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
umount /proc # if this doesn't work try umount -lf /proc
umount /sys
umount /dev/pts
exit
sudo umount /mnt

Dan Anda dapat reboot untuk melihat apakah itu berhasil.

URL untuk utas: http://art.ubuntuforums.org/showthread.php?t=1688928

Melvin
sumber
Mengapa Anda mengganti /etc/hostsdan menghapus /sbin/initctl? Itu ada di sana karena suatu alasan.
Lekensteyn
Ini tampaknya pada akhirnya didasarkan pada LiveCDCustomization ; beberapa langkah tidak diperlukan untuk memperbaiki sistem yang sudah diinstal. Secara khusus, tidak perlu melakukan apa-apa dengan /sbin/initctlatau dbus-uuidgenatau dpkg-divert. Anda mungkin perlu mengganti /etc/hostsuntuk terhubung ke Internet, tetapi tidak biasanya, dan jika Anda melakukannya, Anda harus mengembalikan yang asli. Pada sistem yang diinstal (daripada CD langsung yang melakukan booting lalu membongkar sistem file squashfs), Anda tidak harus menjalankan update-initramfsatau bahkan update-grubsetelah menginstal kernel.
Eliah Kagan
Juga, karena prosedur ini tidak menginstal metapackage kernel, kernel mungkin tidak diperbarui dengan benar nanti, kecuali metapackage diinstal. Selain itu, linux-image-2.6.32-26-generictidak akan menjadi kernel yang tepat bagi kebanyakan orang untuk menginstal.
Eliah Kagan
0

Setelah saya menghapus kernel lama dari Trusty14.04 kemarin (FTR: Saya tidak menghapus dua yang terbaru!) Sistem saya tidak bisa boot lagi. GRUB menunjukkan

Error: File not found
Error: You need to load the kernel first

Tidak tahu kenapa.

Saya kemudian mengikuti instruksi luar biasa Eliah Kagan untuk menginstal linux-image-genericdari CD langsung. Itu memang menginstal 150 MB kernel baru, tetapi sayangnya itu tidak menyelesaikan masalah.

Untungnya, saya menemukan halaman ini . The Boot-Repairalat sudah benar, sistem saya berjalan lagi.

leftaroundabout
sumber
0

Saya hanya ingin menambahkan pengalaman yang saya lalui hari ini dalam meningkatkan ke Willy. Saya membersihkan sedikit dan saya menemukan diri saya hanya dengan memtest. google membuat saya mengerti bahwa saya telah menghapus kernel. Salah satu kendala yang saya miliki adalah jaringan yang lambat dan mengunduh ISO penuh bukanlah pilihan. Jadi saya menggunakan CD Ubuntu Minimal (hanya 40MB) dan boot di atasnya. Setelah mendeteksi opsi perangkat keras (yang membantu saya terhubung ke nirkabel) saya masuk ke opsi shell. Saya mengikuti instruksi @Lekensteyn dan saya berhasil. beberapa hal: Anda harus menyalin resolv.confsebelum chroot atau DNS Anda akan kacau dan karena pengguna yang masuk ada root, tidak perlu untuk sudo di mana pun.

Saya tahu ini lama tapi saya pikir menambahkan jawaban ini akan menambah nilai bagi mereka yang akan menghadapi masalah.

Stefano Mtangoo
sumber