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


답변:


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 시스템 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 릴리스와 다른 정보에 부분적으로 의존합니다. 당신은 당신이 설치 한 우분투 버전이 확실하지 않은 경우,합니다 (이 명령을 실행하여 알아 chroot, 하지 별도의 터미널 창 / 탭) :

    lsb_release -r
    
    • Ubuntu 12.10 (현재 개발중인 다음 Ubuntu 릴리스)에서는 항상 입니다 linux-image-generic. ( 이것 , 이것 , 그리고 이것 참조 )

    • Ubuntu 12.04 LTS에서 가능성은 linux-image-genericlinux-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-uuidgendpkg-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.