誤ってすべてのカーネルを削除した後にシステムを復元する方法は?


69

古いカーネルを削除しようとしていましたが、Ubuntu 11.04ラップトップのカーネルをすべて削除していたはずです。USBブートまたは別のシステムにハードドライブをマウントすることでこれを修正する方法はありますか?


回答:


93

ライブCD(またはライブUSB)で起動し、いくつかのシステムをマウントし、そこにchrootして、カーネルをインストールします。カーネルのインストールが成功したら、ファイルシステムをアンマウントします。

  1. ターミナルを開く
  2. Ubuntuパーティションをマウントします。 sudo mount /dev/sdXY /mnt
  3. いくつかの特別なパーティションをマウントします。

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (オプション)ネットワークに接続している場合、Live環境のDNSサーバーを使用します(そうでない場合、ホスト名を解決できない可能性があります)。

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. にルート/mntsudo chroot /mnt
  6. Linuxカーネルをインストールします:apt-get install linux-image-generic(chrootの後にrootであるため、sudoは不要です)
  7. カーネルのインストールが成功したら、chrootを取得していくつかのファイルシステムをアンマウントします。

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. 再起動してCDまたはUSBを取り外します。 sudo reboot

それは私が提案したであろうことです。なぜ機能しないのかわかりません。
オリ

はい、確認していただきありがとうございます。ファイナライズ手順も追加して、アンマウントし/mntます。Ubuntuは通常、ファイルシステムのアンマウント/同期を処理しますが、これは私にはきれいに見えます。
レーケンシュタイン

1
@MaheshKatta最初にRAIDをマウントする必要があります。したがって、ステップ2(単一のドライブをマウントする)の代わりに、/dev/mdxxxドライブをマッピングします-mdadmであると仮定します。
オリ

4
@James編集/etc/resolv.conf(シンボリックリンクの場合は削除)とそのようなnameserver 8.8.8.8もの(GoogleパブリックDNSサーバー)を配置します。必要に応じて交換してください。
Lekensteyn

3
Nvm。chroot自体でファイルを編集しなければならなかったようです。たぶん、cp /etc/resolv.conf /mnt/etc/resolv.confchrootに入る前に答えに追加する必要があります。とにかくそれは私のために働いた
ピーターレイブス

56

この拡張された手順chroot、インストールするカーネルパッケージがわからない(Ubuntu 12.10以前では常にそうとは限らないlinux-image-generic)、最初にどのパーティション、またはどの物理ドライブに/ファイルシステムが含まれ、個別の/bootパーティションがあります。

いくつかの類似点に気づくでしょうが、ここでは他の手順を参照してこれを書いていません。私はここの手順に大まかに基づいてそれを行いました(これらの手順はまったく異なるものを対象としていますが、広範囲に適応しており、散文ではなく一部のコマンドのみがコピーされています)。

すべてのカーネルパッケージを削除したため、カーネルがインストールされていないとUbuntuは起動できません。したがって、解決策は、ライブCD / DVD / USB chrootからインストールされたシステムにブートし、そこにカーネルをインストールすることです。

  1. UbuntuライブCD / DVDまたはライブUSBフラッシュドライブから起動します。

  2. Ubuntuを試すUbuntu をインストールしない)選択します

  3. デスクトップが表示されたら、インターネットに接続していることを確認してください。そうでない場合は、インターネットに接続します。インターネットに接続しているかどうかを確認する1つの方法は、Webブラウザーを開くことです。ライブのCD / DVD / USBシステムのWebブラウザーでこのAsk Ubuntuの回答を表示して、残りの指示に従うこともできます。それを強くお勧めします。

  4. Ctrl+ Alt+でターミナルウィンドウを開きますT

  5. ターミナルウィンドウで、次のコマンドを実行してパーティションを一覧表示します。

     sudo parted -l
    

    あなたはこのようなものが表示されます(が、それはできません正確に次のように):

    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. 取得した出力を調べて、ハードドライブ(修復している)にインストールされているUbuntuシステムの/ファイルシステムを含むパーティションのデバイス名を判断します。

    • ext4パーティションが1つしかない場合は、それが1つです。

    • 複数のext4パーティションがある場合は、おそらく最初のパーティションです。ただし、最初の/bootパーティションが非常に小さい(ギガバイト未満)場合は、別のパーティションになる可能性があります(そのパーティションも覚えておいてください)。

      bootFlagsにリストされているかどうかは、パーティションが別の/bootパーティションであるかどうかとはほとんど関係がないことに注意してください。上記の情報がリストされている私のシステムには、別個のパーティションがありませ/boot

    • パーティションのデバイス名は、物理ドライブのデバイス名で始まり、直後Diskの2行目に記載されています。次に、パーティション番号を末尾に追加します。したがって、私の /ファイルシステムを含むパーティションのデバイス名は/dev/sda1です。その情報を見つけた2行を次に示します。

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • 複数の物理ドライブがある場合、上記のようなリストが複数表示されます。しかし、別のUnixライクなシステムがインストールされていない限りext4、少なくとも別のドライブに意図的にパーティションを作成していなければ、おそらくパーティションを含むドライブは1つしかありません。ext4パーティションのある複数のドライブがある場合、ファイルシステムext4を含むパーティション/はおそらくパーティションを含むドライブにありますlinux-swap

    • それはだ可能あなたのUbuntuシステムのことを/、ファイルシステム以外のタイプのパーティション上にありますext4。これが発生した場合、ほぼ常にext3であり、ほぼ常に非常に古いシステムです。自分で意図的にこのように設定しない限り、これが当てはまることは非常にまれです。

    /ファイルシステムを含むパーティションのデバイス名を覚えておいてください(または書き留めてください)。と異なる場合は、以下の手順で/dev/sda1置き換え/dev/sda1ます。

    (別の/bootパーティションがあるように見える場合は、そのデバイス名も覚えておいてください。)

  7. マウント/のファイルシステムを/mnt、そのマウント/devファイルシステムを:

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. 修復している破損したUbuntuシステムに、個別/bootにマウントする必要がある個別のパーティションがあるかどうかを確認します。(そうでないことが確かな場合は、これをスキップできます。)

    確認するには、次を実行します。

    ls /mnt/boot
    

    出力がある場合(のようなものgrub memtest86+.bin memtest86+_multiboot.binですが、必ずしも正確ではありません)、壊れたシステム/bootはそのパーティションと同じパーティションにあり/、アクセスするために何もマウントする必要はありません。

    ただし、出力がない場合は、/bootファイルシステムをマウントする必要があります。

    sudo mount BOOT-PARTITION /mnt/boot

    パーティションのBOOT-PARTITIONデバイス名に置き換えます/boot(上記の手順6を参照)。

  9. chroot 壊れたシステムに残りの重要な仮想ファイルシステムをマウントし、いくつかの重要な環境変数を設定します。

    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. インターネットアクセスは内から動作するかどうかを決定chrootすることによってpingpingに正常に応答することが知られているいくつかの信頼できるホストをする。

    ping -c 5 www.google.com
    

    次のように表示されます。

    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
    
    • それがほとんどそのように見え、前の数% packet lossが100未満である場合、インターネット接続chrootは機能しています:

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

      動作しているので、ステップ11スキップできます。

    • それがほとんどそのように見え、前の数% packet lossが100である場合、接続はトラブルシューティングを必要とします。ライブCDシステム上の接続が(たとえば、Webブラウザーを介して、または別の、chroot編集されていない[ターミナル]タブ/ウィンドウで同じコマンドを実行して)動作することを確認します。コマンドを正しく入力していることを確認してください。行ったwww.google.comことがない場合に使用します。

    • 出力が上記のようにまったく見えず、代わりにと表示されるping: unknown host www.google.com場合、ネットワークはでまだ機能していませんchroot

  11. でネットワークを設定しchrootます。上記の手順10でエラーが発生した場合を除き、この手順をスキップしますunknown host

    ネットワークを設定するには、破損したシステムのhostsファイルをバックアップし、ライブCDシステムhostsresolv.confファイルをコピーします。(壊れたシステムのバージョンのをバックアップする必要はありません。resolv.confそのファイルはその場で自動的に再生成されるためです。)

    新しいターミナルタブCtrl+ Shift+ T)を開くか、必要に応じて、新しいターミナルウィンドウCtrl+ Shift+ N、または単にCtrl+ Alt+ T)を開きます。次のコマンドを実行します:

    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
    

    exit最後のコマンドは、新しいタブ/ウィンドウを閉じます。)

    上記の手順10を繰り返して、インターネットアクセスが内から動作することを確認しますchroot。そうすべき。

  12. どのカーネルパッケージをインストールする必要があるかを判断します。通常、これはになりますlinux-image-generic。しかしいつもではない。

    どちらをインストールするかわからない場合は、インストールしたUbuntuリリースに一部依存し、その他の情報に一部依存します。インストールしたUbuntuリリースがわからない場合はchroot、次のコマンドを実行して確認します(別のターミナルウィンドウ/タブではなく、)。

    lsb_release -r
    
    • Ubuntu 12.10(次のUbuntuリリース、現在開発中)では、常にになりますlinux-image-generic。(これこれ、およびこれを参照してください。)

    • Ubuntu 12.04 LTSでは、可能性が高いのはlinux-image-genericおよびlinux-image-generic-paeです。(以前のバージョンとは異なり、12.04には個別のサーバーカーネルとデスクトップカーネルはありません。)

      • (修正する)インストール済みのUbuntuシステムが64ビットバージョンの場合は、を使用しますlinux-image-generic。(linux-image-generic-pae32ビットシステムにのみ適用されます。)

        32ビットまたは64ビットのコンピューターに32ビットUbuntuシステムをインストールすることは可能です。さらに、32ビットまたは64ビットのライブCDを使用して、インストールされている32ビットシステムを修正している場合があります。したがって、インストールされているUbuntuシステムが32ビットか64ビットかわからない場合は、このコマンドを実行して確認します(別のターミナルウィンドウ/タブchrootはなく、で):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        出力はまたはのいずれ32かになります64

        (この情報を見つける正しい方法でuname -mないことに注意してください。なぜなら、で実行されても、実行中のカーネルのchrootアーキテクチャを教えてくれます。これは、インストールされた(壊れた)システムのカーネルではなく、ライブCDシステムのカーネルです)

      • インストールしているUbuntuシステム(修正対象)が32ビットバージョンである場合、使用する最適なカーネルは、搭載しているRAMの量によって異なります。私はお勧め:

        • linux-image-generic RAMが3 GB未満の場合
        • linux-image-generic-pae 3 GB以上のRAMがある場合。

        (これはUbuntuのインストーラはインストーラがPAEカーネルをインストールする機能を獲得して以来、設定するかを選択する方法である。参照の解像度このバグを。あなたはPAEが何であるかを知りたい場合は、参照このWikipediaの記事を。あなたがしたい場合はUbuntuのPAEについては、このUbuntu wikiページを参照してください

        RAMの容量がわからない場合は、次のコマンドを実行して確認してください。

        grep MemTotal /proc/meminfo
        

        それはキロバイトでリストされていますギガバイトに変換するには、1,048,576(1024 2)で除算します。

        • 3ギグ= 3,145,728 kB
    • Ubuntuのリリースでは前に 12.04、おそらく可能性があるlinux-image-genericlinux-image-generic-paelinux-image-server

      • Ubuntu Serverシステムを実行している場合は、を使用しますlinux-image-server
      • それ以外の場合は、12.04システムについて上記のアドバイスに従ってください。
  13. これはあなたが待っていた瞬間です!壊れたシステムにカーネルをインストールします。

    (以前と同様に、特に明記されていない限り、これらのコマンドはchroot別のターミナルウィンドウ/タブではなく、で実行されます。)

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

    linux-image-generic異なる場合は、上記の手順12でインストールすることにした他のカーネルパッケージと置き換えます。

  14. でネットワークをセットアップするために手順11を実行する必要があった場合chroot、古いhostsファイルを復元します。手順11をスキップした場合は、この手順もスキップしてください。

    復元するには、次のコマンドを実行します。

    cp /etc/hosts.old /etc/hosts
    
  15. 、ファイルシステムをアンマウントexitのうち、INGのchroot

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. ライブCD / DVD / USBシステムをシャットダウンし、ライブCD / DVDまたはUSBフラッシュドライブを取り外します。修復したばかりのハードドライブにインストールされたシステムを起動します。カーネルパッケージをインストールしました(インストールの一部として、カーネルパッケージが提供するカーネルがGRUB2ブートメニューに追加されます)。すべてが正常に機能した場合、システムは問題なく起動するはずです。(今回は、通常よりも起動に少し時間がかかる可能性があると思います。)

免責事項:上記の手順をすべての可能な Ubuntuシステムでテストしたわけではないため、特定していない間違いがある可能性があります。

将来的には、常に2つのカーネルをインストールしたままにしておくことをお勧めします。何らかの理由でそのうちの1つが機能しなくなった場合に備えて、2つにすることをお勧めします(GRUB2ブートメニューでもう1つを選択できます)。さらに、2つのカーネルを保持する予定で、意図したよりも1つ多くのカーネルを誤ってアンインストールして再起動した場合、ブートするためのカーネルが残っています。


1
これは、私が今まで読んだLinuxで複雑なことを行う方法を説明するのに最適です。ありがとう
-ZincX

うわー、これはとても助かります!どうもありがとう!
ラファウチエラク

2
Eliahに感謝します-私のLinuxイメージをすべて愚かに削除した後、あなたは私のベーコンを保存しました。私が抱えていた唯一の問題は、sudo cp /etc/resolv.conf /mnt/etc/resolv.confのステップでした。私はこのスレッドを見つけて、「cp /etc/resolv.conf /mnt/etc/resolv.conf」の前に「rm /mnt/etc/resolv.conf」というポスターを作成して指示に従いました。

/etc/resolv.conf現在、@ xcal400 はによって管理されてresolvconfおり、NetworkManagerを使用すると自動的に生成され、見つけたとおりに安全に削除できrm /etc/resolv.confます。
-Lekensteyn

3
これは受け入れられた答えであるはずです。ありがとう!
ジャン=ミシェルガルシア

0

カーネルを削除したとき、Ubuntuフォーラムでこのソリューションを見つけました。すべての手順を実行し、システムが回復しました。それがあなたを助けることを願っています。

chrootは機能する場合があります。chrootは、システムを起動するときにルートファイルシステムを変更することを意味します。たとえば、ライブCDから開始したが、ルート「/」をubuntuがインストールされている場所に変更します。

あなたのubuntuが/ dev / sda2にインストールされているとすると、次のコマンドを試すことができます:

コード:

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

ルート「/」が/ dev / sda2にあるので、カーネルをインストールしてみてください

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

私は以前にこれを行う必要がなかったので、ここで少し推測をしなければなりませんでしたが、これはそれについてでなければなりません。何らかのfstabエラー警告が表示されるかどうかわかりません(ルートが見つからないなど)。

次に、いくつかのものをクリーンアップし、マウントされたパーティションをアンマウントする必要があります。コード:

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

また、再起動して、動作するかどうかを確認できます。

スレッドのURL:http : //art.ubuntuforums.org/showthread.php?t=1688928


なぜ交換/etc/hostsして削除し/sbin/initctlますか?それには理由があります。
レーケンシュタイン

これは最終的にLiveCDCustomizationに基づいているようです。すでにインストールされているシステムの修復には、いくつかの手順は必要ありません。特に、と何もする必要はありません/sbin/initctlか、dbus-uuidgenまたはdpkg-divert。あなたは可能性が交換する必要があり/etc/hosts、通常はインターネットに接続するためではなく、あなたがしなければ、あなたは元を戻す必要があります。インストールされたシステムでは(起動してsquashfsファイルシステムをアンパックするライブCDではなく)、カーネルをインストールした後update-initramfsでも実行する必要はありませんupdate-grub
エリアケイガン

また、この手順ではカーネルメタパッケージがインストールされないため、メタパッケージがインストールされない限り、カーネルは後で適切に更新されない可能性があります。さらに、linux-image-2.6.32-26-genericほとんどの人がインストールするのに適切なカーネルではありません。
エリアケイガン

0

昨日Trusty14.04から古いカーネルを削除した後(FTR:最新の2つを削除しませんでした!)、システムはもう起動しませんでした。GRUBショー

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

理由はわかりません。

その後、Eliah Kaganの優れた指示に従ってlinux-image-generic、ライブCDからインストールしました。150 MBの新しいカーネルをインストールしましたが、残念ながら問題は解決しませんでした。

幸いなことに、私はこのページを見つけました。Boot-Repairこのツールは、右、私のシステムは再びそれを実行してしまいました。


0

今日、ウィリーへのアップグレードで経験したことを加えたかっただけです。私は少し掃除をしましたが、memtestしかありませんでした。googleを使用して、カーネルを削除したことを理解しました。私が抱えていた制約の1つは低速ネットワークであったため、完全なISOをダウンロードすることはオプションではありませんでした。そのため、Ubuntu Minimal CD(40MBのみ)を使用して起動しました。ハードウェアオプション(ワイヤレスへの接続に役立ちました)を検出した後、シェルオプションに入りました。@Lekensteynの指示に従い、成功しました。ただし、resolv.confchrootを実行する前にコピーする必要があります。そうしないと、DNSがねじ込まれ、ログインしているユーザーがsudoを必要としないため、どこにもルートがありません。

私はその古いことを知っていますが、この答えを追加すると、問題が発生する場合に価値が追加されると考えました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.