Як відновити систему після випадкового видалення всіх ядер?


69

Я намагався видалити старі ядра, але я повинен був видалити всі ядра з мого ноутбука Ubuntu 11.04. Чи є можливість це виправити за допомогою завантажувача USB або встановлення жорсткого диска на іншій системі?


Відповіді:


93

Завантажте на живий компакт-диск (або живий USB), змонтуйте деякі системи, вставте в нього і встановіть ядро. Після успішної установки ядра відключіть файлові системи.

  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. (необов’язково) Коли ви підключені до мережі, використовуйте DNS-сервери зі свого прямого середовища (інакше імена хостів, можливо, не можуть бути вирішені):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Chroot в /mnt:sudo chroot /mnt
  6. Встановіть ядро ​​Linux: apt-get install linux-image-generic(Судо не потрібно, оскільки ви root після chroot)
  7. Після успішної установки ядра вийдіть з chroot і відключіть деякі файлові системи:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. Перезавантажте та видаліть компакт-диск чи USB: sudo reboot

Це я б запропонував. Я не бачу, чому це не спрацює.
Олі

Добре, дякую за підтвердження. Я також додав етапи завершення, відключення /mnt. Ubuntu зазвичай піклується про відключення / синхронізацію файлових систем, але це виглядає більш чистою для мене.
Лекенштейн

1
@MaheshKatta Спочатку потрібно буде встановити RAID. Тож замість другого кроку (де ви /dev/mdxxxзмонтуєте один привід) ви будете відображати накопичувач, припускаючи, що це mdadm.
Олі

4
@James Edit /etc/resolv.conf(видаліть її, якщо вона є симпосиланням) і покладіть щось на зразок nameserver 8.8.8.8(загальнодоступний сервер DNS Google). Замініть його при необхідності.
Лекенштейн

3
Нвм. Схоже, мені довелося редагувати файл у chroot. Можливо, вам слід додати відповідь, cp /etc/resolv.conf /mnt/etc/resolv.confперш ніж переходити до chroot. Це працювало для мене в будь-якому випадку
Пітер Рейвз,

56

Ця розширена процедура пояснює більшість ускладнень, які можуть виникнути, включаючи проблеми підключення до Інтернету в chroot, не знаючи, який пакет ядер встановити (до Ubuntu 12.10, це не завжди буде linux-image-generic), не знаючи на початку, який розділ чи навіть який фізичний диск містить /файлову систему та має окремий /bootрозділ.

Я не писав цього з посиланням на будь-яку з інших процедур тут, хоча ви помітите деякі подібності. Я базував це, поступово, на цій процедурі (хоча ці вказівки для чогось зовсім іншого, я їх широко адаптував, і копіюються лише деякі команди, а не проза).

Ви видалили всі пакети ядра, і Ubuntu не може завантажитися без встановленого ядра. Таким чином, рішення полягає у завантаженні з живого CD / DVD / USB, chrootу встановлену систему та встановлення в ньому ядра.

  1. Завантажтеся з живого CD / DVD Ubuntu або живої USB флеш-пам'яті.

  2. Виберіть " Спробувати Ubuntu" (не встановлювати Ubuntu ).

  3. Коли з'явиться робочий стіл, переконайтеся, що ви підключені до Інтернету. Якщо вас немає, підключіться до Інтернету. Один із способів дізнатися, чи підключено ви до Інтернету, - це відкрити веб-браузер. Ви навіть можете дотримуватися решти інструкцій, перенісши цю відповідь на запитання Ubuntu у своєму веб-переглядачі, в системі живих CD / DVD / USB. Я настійно рекомендую це зробити.

  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розділ, це той самий.

    • Якщо у вас є кілька ext4розділів, це, мабуть, перший. Однак якщо перший дуже маленький - менше, ніж гігабайт, то це може бути окремий /bootрозділ (пам’ятайте, що він теж).

      Зауважте, що те, чи bootвказано в списку, Flagsмає дуже мало спільного з тим, чи є розділ окремим /bootрозділом. Моя система, інформація про яку перерахована вище, не має окремого /bootрозділу.

    • Назва пристрою для розділу починається з імені пристрою для фізичного накопичувача, зазначеного відразу після Diskдругого рядка. Тоді просто додайте номер кінця розділу. Отже, назва пристрою для розділу, який містить мою / файлову систему /dev/sda1. Ось два рядки, де я знайшов цю інформацію:

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • Якщо у вас є більше одного фізичного приводу, ви отримаєте більше одного списку, як показано вище. Але якщо у вас не встановлена ​​інша система, схожа на Unix, ви, мабуть, матимете лише один диск, який містить ext4розділи, принаймні, не створюючи їх навмисно на іншому диску. Якщо у вас є кілька дисків з 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допомогою pingнадійного хоста, який, як відомо, нормально реагує на pings:

    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 loss100, з'єднання потребує усунення несправностей. Переконайтесь, що з'єднання в режимі живого CD (наприклад, через веб-браузер або за допомогою тієї самої команди в окремій, не chrootвідредагованій вкладці / вікні терміналу) працює. Переконайтесь, що ви правильно ввели команду. Використовуйте, www.google.comякщо ви ще не були.

    • Якщо вихід взагалі не схожий на вищезазначений, але натомість каже ping: unknown host www.google.com, то мережа ще не працює в chroot.

  11. Налаштування мереж у chroot. Пропустіть цей крок, якщо не unknown hostсталася помилка на кроці 10 вище.

    Щоб налаштувати мережу, створіть резервну копію розбитого hostsфайлу системи та скопіюйте файли hostsта resolv.confфайли живих CD- файлів. (Вам не потрібно робити резервну копію версії зламаної системи 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-paeстосується лише 32-бітних систем.)

        На 32-бітному або 64-бітному комп'ютері встановлена ​​32-розрядна система Ubuntu. Крім того, ви можете використовувати 32-бітний або 64-бітний живий компакт-диск для виправлення 32-бітної встановленої системи. Тож якщо ви не знаєте, чи встановлена ​​система Ubuntu 32-розрядна чи 64-бітна, перевірте, запустивши цю команду (у окремому вікні / вкладці термінала chroot, а не в окремому вікні терміналу):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        Вихід буде або 32або 64.

        (Зверніть увагу , що uname -mце НЕ правильний шлях , щоб знайти цю інформацію, тому що навіть при запуску в chroot, що розповість вам архітектуру запущеного ядра , що ядро програми системи Live CD і не встановлено (переривчаста) ядро системи.)

      • Якщо встановлена ​​система Ubuntu (яку ви виправляєте) є 32-розрядною версією, найкраще ядро ​​для використання залежатиме від обсягу оперативної пам’яті. Я рекомендую:

        • linux-image-generic якщо у вас менше 3 ГБ оперативної пам’яті
        • linux-image-generic-pae якщо у вас є 3 ГБ оперативної пам’яті або більше.

        (Це як інсталятор для Ubuntu вибирає який один для установки, з тих пір установник отримав можливість встановити PAE ядра. Див дозвіл на цю помилку . Якщо ви хочете дізнатися , що PAE це, див статтю в Вікіпедії . Якщо ви хочете дізнайтеся про PAE в Ubuntu, дивіться цю сторінку вікі Ubuntu .)

        Якщо ви не знаєте, скільки у вас оперативної пам’яті, запустіть цю команду, щоб з’ясувати:

        grep MemTotal /proc/meminfo
        

        Це вказано в кілобайтах . Щоб конвертувати в гігабайти , розділіть на 1,048,576 (1024 2 ).

        • 3 концерти = 3,145,728 кБ
    • В Ubuntu випускає перш , ніж 12.04, ймовірно , можливості linux-image-generic, linux-image-generic-paeі linux-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виходячи з chroot:

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. Вимкніть живу систему CD / DVD / USB, видаливши живий CD / DVD або флешку. Завантажтесь у систему, встановлену на жорсткому диску, яку ви тільки що відремонтували. Ви встановили пакет ядра в ньому (і як частина установки, ядро, яке він надає, буде додано до меню завантаження GRUB2). Якщо все працювало правильно, ваша система повинна без проблем завантажуватися. (Я думаю, що цілком можливо, що цього разу завантаження займе трохи більше часу, ніж зазвичай.)

ВИСНОВОК: Я не перевіряв вищевказану процедуру на всіх можливих системах Ubuntu, тому, можливо, в ній є помилка, яку я не визначив.

Надалі я рекомендую завжди намагатися тримати два ядра. Добре мати два, якщо одна з них перестане працювати з будь-якої причини (ви можете вибрати іншу в меню завантаження GRUB2). Крім того, якщо ви маєте намір зберегти два ядра, і ви випадково видалили ще одне, ніж ви мали намір і перезавантажити, у вас все одно залишилося одне для завантаження.


1
Це може бути найкращим письмовим поясненням того, як зробити щось складне в Linux, яке я коли-небудь читав. Спасибі
ZincX

Ого, це так супер-корисно! Величезне спасибі!
Rafał Cieślak

2
Дякую тобі, Еліа - після тупого видалення всіх моїх зображень Linux ви врятували моє бекон. Єдиний гикав у мене був на кроці: sudo cp /etc/resolv.conf /mnt/etc/resolv.conf я отримав помилку "cp: не писати через звисаючу символьну посилання` /mnt/etc/resolv.conf '". Я знайшов цю тему і дотримувався вказівок одного плаката на тему : "rm /mnt/etc/resolv.conf" перед "cp /etc/resolv.conf /mnt/etc/resolv.conf", щоб вирішити проблему висячого символьного посилання.

@ xcal400 /etc/resolv.confсьогодні управляється resolvconf, він автоматично генерується при використанні NetworkManager і може бути безпечно видалений за допомогою, rm /etc/resolv.confяк ви дізналися.
Лекенштейн

3
Це має бути прийнятою відповіддю. Дякую!
Жан-Мішель Гарсія

0

Коли я видалив своє ядро, я знайшов це рішення на форумах Ubuntu. Я стежив за кожним кроком, і система відновилася. Сподіваюся, це допоможе вам.

Chroot може спрацювати, chroot означає, що при запуску системи ви змінюєте кореневу файлову систему. Наприклад, ви почали з живого компакт-диска, але ви змінили корінь "/" на місце встановлення вашого 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

тепер ви root "/" увімкнено / dev / sda2, спробуйте встановити ядро

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

Мені довелося тут трохи вгадати, оскільки мені раніше цього не доводилося робити, але це повинно бути з цього приводу. Не знаю, чи отримуєте ви попередження про помилку fstab (наприклад, не вдається знайти root).

Тепер вам потрібно очистити деякі речі та відключити змонтовані розділи: Code:

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), вам не доведеться запускати update-initramfsабо навіть update-grubпісля встановлення ядра.
Елія Каган

Крім того, оскільки ця процедура не встановлює жодного метапакету ядра, ядро ​​може бути невірно оновлено пізніше, якщо не встановлено метапакет. Крім того, linux-image-2.6.32-26-genericдля більшості людей це не буде правильним ядром.
Елія Каган

0

Після того, як я вчора видалив старі ядра з Trusty14.04 (FTR: я не видалив два останніх!), Моя система більше не завантажуватиметься. GRUB показав

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

Не знаю чому.

Потім я дотримувався чудових інструкцій Еліа Кагана, щоб встановити його linux-image-genericз живого компакт-диска. Він встановив 150 Мб нового ядра, але, на жаль, це не вирішило проблему.

На щастя, я знайшов цю сторінку . Boot-RepairІнструмент отримав це право, моя система працює знову.


0

Мені просто хотілося додати свій досвід, який я пройшов сьогодні з модернізації до Віллі. Я трохи прибрав, і я опинився лише на пам'ять. google привів мене до розуміння того, що я видалив ядра. Одне обмеження у мене - це повільна мережа, тому завантаження повного ISO не було можливим. Тому я використав компакт-диск Ubuntu Minimal (лише 40 МБ) і завантажився на ньому. Після виявлення апаратної опції (яка допомогла мені підключитися до бездротового зв'язку) я перейшов у варіант оболонки. Я дотримувався інструкцій @Lekensteyn і мені це вдалося. Однак декілька речей: вам доведеться копіювати resolv.confперед chroot або інакше ваш DNS буде загвинтований, і оскільки користувач, який увійшов у систему, не має корінця, нікуди не потрібно судо.

Я знаю його давнє, але я думав, що додавання цієї відповіді додасть значення тим, хто зіткнеться з проблемою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.