실수로 모든 커널을 제거한 후 시스템을 복원하는 방법은 무엇입니까?


답변:


93

라이브 CD (또는 라이브 USB)로 부팅하고, 일부 시스템을 마운트하고, chroot로 커널을 설치하십시오. 커널을 성공적으로 설치 한 후 파일 시스템을 마운트 해제하십시오.

  1. 터미널 열기
  2. 우분투 파티션을 마운트합니다 : 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(chroot 이후에 루트이므로 sudo가 필요하지 않습니다).
  7. 커널을 성공적으로 설치 한 후 chroot를 꺼내고 일부 파일 시스템을 마운트 해제하십시오.

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. CD 또는 USB를 재부팅하고 제거하십시오. sudo reboot

내가 제안한 것입니다. 왜 작동하지 않는지 알 수 없습니다.
— Oli

확인 주셔서 감사합니다. unmounting 마무리 단계도 추가했습니다 /mnt. 우분투는 일반적으로 파일 시스템 마운트 해제 / 동기화를 처리하지만 이것은 나에게 더 깨끗해 보입니다.
— Lekensteyn

1
@MaheshKatta 먼저 RAID를 마운트해야합니다. 따라서 2 단계 (단일 드라이브를 마운트하는 위치) 대신 /dev/mdxxxmdadm이라고 가정하면 드라이브를 매핑하게 됩니다.
— Oli

4
@James 편집 /etc/resolv.conf(심볼릭 링크 인 경우 제거) 및 이와 유사한 것을 입력 nameserver 8.8.8.8합니다 (Google 공개 DNS 서버). 필요한 경우 교체하십시오.
— Lekensteyn

3
Nvm. chroot 자체에서 파일을 편집 해야하는 것처럼 보입니다. cp /etc/resolv.conf /mnt/etc/resolv.confchroot로 들어가기 전에 답변에 추가해야 할 수도 있습니다 . 그것은 어쨌든 나를 위해 일했다
— Peter Raeves

56

이 확장 절차는 에서 인터넷 연결에 문제가 포함 발생할 수있는 합병증의 대부분을 차지하고 chroot, 설치 (우분투 12.10 전에, 그것은하지 않습니다 어떤 커널 패키지 모르고 항상 일 linux-image-generic처음 파티션 또는 심지어 모르고) /파일 시스템을 포함하고 별도의 /boot파티션이 있는 실제 드라이브

나는 여기의 다른 절차를 참조하여 이것을 작성하지는 않았지만 약간의 유사점을 알 수 있습니다. 나는 여기의 절차를 느슨하게 기초로했습니다 (그 지시는 상당히 다른 것에 대한 것이지만, 나는 광범위하게 조정했으며, 명령이 아닌 일부 명령 만 복사되었습니다).

모든 커널 패키지를 제거했으며 커널을 설치하지 않으면 Ubuntu를 부팅 할 수 없습니다. 따라서 해결책은 라이브 CD / DVD / USB chroot에서 설치된 시스템 으로 부팅 하고 커널을 설치하는 것입니다.

  1. Ubuntu 라이브 CD / DVD 또는 라이브 USB 플래시 드라이브에서 부팅하십시오.

  2. 우분투 설치 (우분투 설치 아님)를 선택 하십시오 .

  3. 데스크탑이 나타나면 인터넷에 연결되어 있는지 확인하십시오. 그렇지 않은 경우 인터넷에 연결하십시오. 인터넷에 연결되어 있는지 확인하는 한 가지 방법은 웹 브라우저를 여는 것입니다. 라이브 CD / DVD / USB 시스템의 웹 브라우저에서이 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파티션 이 하나만 있다면 그 파티션입니다.

    • ext4파티션 이 두 개 이상인 경우 아마도 첫 번째 파티션 일 것입니다. 그러나 첫 번째 /boot파티션 이 기가 바이트보다 매우 작은 경우 별도의 파티션 일 수 있습니다 (이 파티션도 기억하십시오).

      여부하는 것은주의하시기 바랍니다 boot아래에 표시되는 Flags파티션은 별도의 여부와는 거의 상관이 /boot파티션을. 위에 나열된 정보를 가진 내 시스템 에는 별도의 파티션 이 없습니다/boot .

    • 파티션의 장치 이름은 물리적 드라이브의 장치 이름으로 시작 Disk하며 두 번째 줄 바로 뒤에 표시됩니다. 그런 다음 파티션 번호를 끝에 추가하십시오. 따라서 내 / 파일 시스템 을 포함하는 파티션의 장치 이름 은 /dev/sda1입니다. 그 정보를 찾은 두 줄은 다음과 같습니다.

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • 실제 드라이브가 두 개 이상인 경우 위에 표시된 것과 같은 목록이 두 개 이상 표시됩니다. 그러나 다른 유닉스 계열 시스템이 설치되어 있지 않으면 ext4적어도 다른 드라이브에서 의도적으로 파티션을 만들지 않고 파티션 이 포함 된 드라이브가 하나만있을 것입니다 . 당신은 여러 드라이브이있는 경우 ext4파티션을, 다음, ext4당신이 들어 파티션의 /파일 시스템은 드라이브에 아마 또한 포함 linux-swap파티션을.

    • 그것은이다 가능한 우분투 시스템의 것을 /파일 시스템이 아닌 다른 유형의 파티션에 ext4. 이런 일이 발생하면 ext3거의 항상 오래된 시스템 일 것입니다. 의도적으로 이러한 방식으로 설정하지 않는 한,이 경우가 매우 드 un니다.

    /파일 시스템 이 포함 된 파티션의 장치 이름을 기억하십시오 (또는 적어 두십시오). 와 (과) 다른 경우 아래 단계에서 /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핑에 정상적으로 반응하는 것으로 알려져 일부 신뢰할 수있는 호스트를 보내고 :

    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 loss100보다 작 으면 인터넷 연결 chroot이 작동하는 것입니다.

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

      작동하므로 11 단계 를 건너 뛸 수 있습니다 .

    • 대부분 모양이 같고 이전 숫자 % packet loss가 100이면 연결 문제를 해결해야합니다. 라이브 CD 시스템 (예 : 웹 브라우저 또는 별도의 별도의 chroot터미널 탭 / 창 에서 동일한 명령을 실행 )에서 연결이 작동하는지 확인하십시오. 명령을 올바르게 입력했는지 확인하십시오. www.google.com그렇지 않은 경우 사용하십시오 .

    • 출력이 위와 같지 않고 대신이라고 표시 ping: unknown host www.google.com되면 네트워킹이 아직 작동하지 않습니다 chroot.

  11. 에서 네트워킹을 설정하십시오 chroot. 위의 10 단계 에서 unknown host오류 가 없으면이 단계를 건너 뛰십시오 .

    네트워킹을 설정하려면 손상된 시스템 hosts파일을 백업 하고 라이브 CD 시스템 hosts및 resolv.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 릴리스와 다른 정보에 부분적으로 의존합니다. 당신은 당신이 설치 한 우분투 버전이 확실하지 않은 경우,합니다 (이 명령을 실행하여 알아 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 비트 설치 시스템을 수정했을 수 있습니다. 당신이 있는지 모르는 경우에 따라서 설치된 우분투 시스템이 32 비트 또는 64 비트입니다합니다 (이 명령을 실행하여 확인 chroot, 없는 별도의 터미널 창 / 탭) :

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        출력은 32또는 64입니다.

        ( 이 정보를 찾는 올바른 방법 uname -m은 아닙니다 .에서 실행될 때조차도 실행중인 커널chroot 의 아키텍처를 알려줍니다 . 이는 설치된 CD 시스템의 커널이 아닌 라이브 CD 시스템의 커널입니다.)

      • 설치된 Ubuntu 시스템 (고정중인)이 32 비트 버전 인 경우 사용하는 가장 좋은 커널은 RAM 용량에 따라 다릅니다. 나는 추천한다 :

        • linux-image-generic RAM이 3GB 미만인 경우
        • linux-image-generic-pae RAM이 3GB 이상인 경우

        (이것은 설치 프로그램이 PAE 커널을 설치하는 기능을 얻은 이후로 Ubuntu의 설치 프로그램이 설정할 것을 선택하는 방법입니다. 이 버그 의 해결 방법 을 참조하십시오 . PAE가 무엇인지 배우려면 이 Wikipedia 기사를 참조하십시오 . 우분투에서 PAE에 대해 배우려면 이 우분투 위키 페이지를 참조하십시오 .)

        RAM 용량을 모르는 경우이 명령을 실행하여 다음을 찾으십시오.

        grep MemTotal /proc/meminfo
        

        이는 킬로바이트 단위 로 표시됩니다 . 기가 바이트 로 변환하려면 1,048,576 (1024 2 )로 나눕니다 .

        • 3 기가 = 3,145,728 kB
    • 12.04 이전의 Ubuntu 릴리스 linux-image-generic에서는 linux-image-generic-pae, 및 가능성이 linux-image-server있습니다.

      • Ubuntu 서버 시스템을 실행중인 경우을 사용하십시오 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 / USB 시스템을 종료하십시오. 방금 수리 한 하드 드라이브에 설치된 시스템으로 부팅하십시오. 커널 패키지를 설치했습니다. 설치 과정에서 커널 패키지가 GRUB2 부팅 메뉴에 다시 추가됩니다. 모든 것이 올바르게 작동하면 문제없이 시스템을 부팅해야합니다. (이번에는 평소보다 부팅하는 데 시간이 조금 더 걸릴 수 있다고 생각합니다.)

면책 조항 : 가능한 모든 우분투 시스템 에서 위의 절차를 테스트하지 않았 으므로 식별하지 않은 실수가있을 수 있습니다.

앞으로는 항상 두 개의 커널을 설치 하는 것이 좋습니다 . 그중 하나가 어떤 이유로 든 작동을 멈출 경우를 대비하여 두 개를 사용하는 것이 좋습니다 (GRUB2 부팅 메뉴에서 다른 하나를 선택할 수 있음). 또한 두 개의 커널 을 유지하려는 경우 실수로 하나 이상의 커널을 제거하고 재부팅해도 여전히 부팅 할 부팅이 남아 있습니다.


1
이것은 내가 읽은 리눅스에서 복잡한 것을 수행하는 방법에 대한 가장 좋은 서면 설명 일 수 있습니다. 감사합니다
— ZincX

와우, 이것은 매우 도움이됩니다! 큰 감사합니다!
— Rafał Cieślak

2
엘리야에게 너무 감사합니다. 내 리눅스 이미지를 모두 바보로 제거한 후에는 베이컨을 구했습니다. 내가 가진 유일한 딸꾹질은 단계에 있었다 : sudo cp /etc/resolv.conf /mnt/etc/resolv.conf 나는 "cp : 매달린 symlink`/mnt/etc/resolv.conf '오류를 통해 쓰지 않았다"라는 오류를 얻었다. 나는이 스레드를 발견 하고 하나의 포스터에 따라 "cp /etc/resolv.conf /mnt/etc/resolv.conf"앞에 "rm /mnt/etc/resolv.conf"라는 지시를 따라 매달려있는 심볼릭 링크 문제를 해결했습니다.

@ xcal400 /etc/resolv.conf은 현재에 의해 관리되며 resolvconfNetworkManager를 사용할 때 자동으로 생성 rm /etc/resolv.conf되며 발견 한대로 안전하게 제거 할 수 있습니다 .
— Lekensteyn

3
이 답변이 허용되어야합니다. 감사!
— Jean-Michel Garcia

0

커널을 제거했을 때 우분투 포럼에서이 솔루션을 찾았습니다. 나는 모든 단계를 밟았고 시스템이 복구되었습니다. 그것이 도움이되기를 바랍니다.

chroot가 작동 할 수 있습니다. chroot는 시스템을 시작할 때 루트 파일 시스템을 변경 함을 의미합니다. 예를 들어 라이브 CD에서 시작했지만 루트 "/"를 우분투가 설치된 위치로 변경합니다.

우분투가 / 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하시겠습니까? 이유가 있습니다.
— Lekensteyn

이것은 궁극적으로 LiveCDCustomization을 기반으로하는 것 같습니다 . 이미 설치된 시스템을 복구하는 데 일부 단계가 필요하지 않습니다. 특히, 함께 작업을 수행 할 필요가 없습니다 /sbin/initctl또는 dbus-uuidgen나 dpkg-divert. 당신은 수도 교체 할 필요가 /etc/hosts인터넷에 연결,하지만 일반적으로, 당신이 할 경우, 당신은 원래 다시 넣어해야합니다. 설치된 시스템 (Squashfs 파일 시스템을 부팅하고 압축 해제하는 라이브 CD 대신) 에서 커널을 설치 update-initramfs하거나 실행 update-grub한 후에도 실행할 필요가 없습니다 .
— Eliah Kagan

또한이 절차는 커널 메타 패키지를 설치하지 않으므로 메타 패키지를 설치하지 않으면 나중에 커널이 제대로 업데이트되지 않을 수 있습니다. 또한 linux-image-2.6.32-26-generic대부분의 사람들이 설치하기에 적합한 커널은 아닙니다.
— Eliah Kagan

0

어제 Trusty14.04에서 오래된 커널을 제거한 후 (FTR : 가장 최근의 두 커널을 제거 하지 않았습니다 !) 시스템이 더 이상 부팅되지 않습니다. GRUB 보여

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

왜 그런지 모르겠다.

그런 다음 라이브 CD에서 설치 하는 Eliah Kagan의 훌륭한 지침 을 따랐습니다 linux-image-generic. 150MB의 새로운 커널을 설치했지만 슬프게도 문제를 해결하지 못했습니다.

다행히도이 페이지를 찾았습니다 . Boot-Repair도구는 바로, 내 시스템이 다시 실행되고 있어요.


0

방금 오늘 Willy로 업그레이드하면서 겪은 경험을 추가하고 싶었습니다. 나는 약간 청소하고 memtest와 함께 자신을 발견했다. 구글은 내가 커널을 제거했다는 것을 이해하게했다. 내가 가진 제약 중 하나는 네트워크 속도가 느리기 때문에 전체 ISO를 다운로드하는 것은 옵션이 아닙니다. 그래서 Ubuntu Minimal CD (40MB 만 해당)를 사용하여 부팅했습니다. 하드웨어 옵션 (무선 연결에 도움이 됨)을 감지 한 후 쉘 옵션에 들어갔습니다. 나는 @Lekensteyn 지침을 따르고 성공했습니다. 그러나 몇 가지 사항 : resolv.confchroot로 가기 전에 복사 해야합니다. 그렇지 않으면 DNS가 망가져 로그인 한 사용자이므로 root가 필요하지 않습니다.

나는 오래된 것을 알고 있지만이 답변을 추가하면 문제가 발생하는 사람들에게 가치가 추가 될 것이라고 생각했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.