어떤 파티션에서 부팅했는지 어떻게 알 수 있습니까?


12

멀티 부팅 파티션이있는 머신이 있습니다. 하나의 파티션에 Ubuntu 14.04, 두 번째 파티션에는 Ubuntu 15.04, 세 번째 파티션에는 Ubuntu 16.04가 있습니다. /boot/grub/grub.cfg부팅 프로세스에 사용 된 파티션을 찾기 위해 명령 줄에서 내가 부팅 한 파티션을 알 수있는 방법이 있습니까? 나는이 /boot/grub/grub.cfg 세 가지 각 파티션에.


3
절대적인 일반 성과 신뢰성으로는 그렇게 할 수 없습니다. 아시다시피 /boot/grub/grub.cfg부팅에 사용 된 파일이 삭제되었거나 해당 파티션이 파티션 테이블에서 삭제되었거나 해당 디스크가 시스템에서 물리적으로 제거되었을 수 있습니다.
Federico Poloni

답변:


10

GRUB이 커널로의 부팅을 건네면 커널은 커널이 무엇을 시작했는지 알지 /boot못하며 GRUB이 사용한 것이 아닐 수도 있습니다. boot/grub/grub.cfg각 파티션 의 액세스 시간을 확인하여 가장 최근에 액세스 한 파티션을 확인할 수 있습니다. 어떤 파티션의 구성 파일 GRUB이 사용되었는지 알 수 있습니다.

stat -c %x /boot/grub/grub.cfg

액세스 시간이 업데이트되지 않으면 다양한 GRUB 구성 파일에서 사용하는 커널 매개 변수의 차이점을 찾아야합니다. 예를 들어, 각각에서 add foo=1, foo=2등을 변경하고 GRUB_CMDLINE_LINUX실행할 sudo update-grub2/proc/cmdline있는 경우 이러한 값 중 어떤 값이 사용 되었는지 확인할 수 있습니다 .


흥미로운! 그것은 내 솔루션이 Ravexina와 Katu보다 정확도가 더 높다는 것을 의미합니까?
tatsu

@tatsu IMO 다른 모든 답변이 잘못되었습니다-Ravexina가있는 파티션을 찾는 중이지만 /bootgrub을 사용하지 않았을 수도 /있으며 Katu가 마운트 된 파티션을 찾았 지만 Ravexina가 지적한 것처럼 아마도 더 적은 연결
muru

1
예. 그러나 마운트 해제는 마운트 된 파티션에서 실패 이외의 다른 작업을 수행하는 방법입니다. 디스크는 마운트 된 장치와 같은 정보, 마운트 해제하려고 시도한 ID 정보를 제공합니다. 내 솔루션이 못 생겼음을 처음으로 인정했지만 성공률은 100 %였습니다.
tatsu

1
무엇에 대한 @tatsu 성공률? 에 마운트 된 파티션을 찾으십시오 /. 부팅하는 동안 사용 된 파티션의 GRUB 구성을 찾으십니까? 나는 그것이 어떻게 관련되어 있는지 알지 못한다.
muru

4
grub은 실제로 DOS 파일이고 Linux 파일 시스템 드라이버 규칙에 구속되지 않는 액세스 타임 스탬프를 설정합니까?
rackandboneman

4

당신이 찾고있는 파일은 /boot실행중인 시스템의 디렉토리에 있습니다. 중 /boot별도의 파티션 또는 그렇지 않아; 당신 /boot이 별도의 파티션 이라면 당신 은 그것을 찾아야합니다 :

$ lsblk -r | grep '/boot'
sda2 8:1 0 400M 0 part /boot

수단 grub.cfg에 위치해 있습니다 사용하는을 sda2.

그렇지 않으면 다음을 찾아야합니다 root.

$ lsblk -r | grep '/$'
sda1 8:1 0 121.2G 0 part /

이번에는에 sda1있습니다.

또는 재미 를 위해 부팅 시간 매개 변수를 확인할 수 있습니다.

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-686-pae root=UUID=938495-1fe2-3302 ro quiet

그런 다음 UUID어떤 파티션이 루트인지 확인하십시오.

$ sudo blkid | grep 938495-1fe2-3302
/dev/sda1: UUID="938495-1fe2-3302"

의 의미입니다 sda1.

부팅 매개 변수를 확인하여 grub.cfg파일 중 하나에 파일이 들어 있는지 확인할 수 있습니다. 부팅 매개 변수가 grub.cfg서로 다른 경우에만 작동합니다 .


2
파일 시스템 UUID 뒤의 장치 노드를 찾는 쉬운 방법 (수퍼 유저 권한이 필요하지 않음)은 다음과 같습니다 readlink -f /dev/disk/by-uuid/<UUID>.
David Foerster

3

현재 마운트 된 루트 파일 시스템을 보유한 장치를 표시하려면 다음을 수행하십시오.

awk '$2=="/"{print $1}' /proc/mounts

현재 실행중인 Ubuntu 릴리스 버전을 표시하려면

lsb_release -rs

실제로 질문과 관련하여 많은 문장을 만들고 아직 가장 적합한 답변처럼 보입니다. 그의 설치에 대한 두 개의 배포판이 lsb_release -rs매번 사용할 동일한 버전 번호를 가지지 않을 것 입니다. KISS
tatsu

불행히도 이것은 작동하지 않습니다. 여러 OS가있는 컴퓨터에서 명령을 테스트했지만 내 "마스터`-OS에만 MBR에 GRUB이 설치되어 있고 다른 OS에는 PBR에 Grub이 설치되어 있습니다. 명령에 OS가 Grub이 설치된 위치가 표시되는 것처럼 보이지만 어떤 OS Grub에서 구성 파일을로드하는지 표시
mook765

@ mook765 : 내 대답은 Grub 또는 MBR (또는 실제로 부트 로더 또는 파티션 테이블 유형)과 아무런 관련이 없습니다. 정확히 무엇을 시도했고 무엇을 기대했는지 잘 모르겠습니다.
David Foerster 17

그렇다면이 답변은 질문과는 아무 관련이 없습니다.
mook765

@ mook765 : 말 그대로 가져 가면 그렇습니다. 그러나 나에게 OP는 다중 우분투 설치 중 어느 것이 현재 부팅되었는지 알고 싶어하며 내 대답은 괜찮을 것 같습니다.
David Foerster

2

각 OS에 간단한 사용자 정의 메뉴 항목을 추가 할 수 있으며, Grub 메뉴에서 OS Grub이 구성 파일을로드 한 것을 볼 수 있습니다.

예:

16.04로 부팅하고 파일 /etc/grub.d/40_custom을 편집하여 메뉴 항목을 추가합니다.

#! / bin / sh
exec tail -n +3 $ 0
#이 파일은 사용자 정의 메뉴 항목을 추가하는 쉬운 방법을 제공합니다. 간단히
이 주석 다음에 추가하려는 # 메뉴 항목. 변경하지 않도록주의하십시오
# 위의 'exec tail'줄.
#

menuentry 'grub.conf가 16.04에서로드되었습니다.'{        
            재부팅  
    }

파일이 실행 가능한지 확인하고 실행하십시오 sudo update-grub.

그리고 우리는 우리가 변화에 ig 다른 OS의에서 동일하게 변경, 우리는 단지의 menuentry에 대해 다른 이름을 사용 할 16.0415.04등등.

부팅하는 동안 Grub-menu에서이 메뉴 항목을 선택하면 시스템이 재부팅되고 OS를 부팅하지 않고 실제로로드하는 데 사용되는 OS를 확인하기 위해 생성했습니다 grub.conf.

추가 정보

우리가 모두 Grub을 사용하는 여러 OS를 설치할 때 이러한 종류의 혼란이 나타나고 OS를 설치하는 동안 동일한 부트 로더 위치를 선택합니다. 우리는 Grub을 설치하는 OS가 하나만 필요합니다. Grub은 모든 Linux 배포판으로 부팅 할 수 있습니다. 따라서 Grub을 포함한 배포판이 설치되어 있으면 Grub을 설치하지 않고도 추가 OS를 설치할 수 있습니다.

레거시 설치에서는 파티션 부트 레코드를 위치로 선택할 수 있기 때문에 부트 로더 설치 위치를 처리하는 것이 매우 쉽지만 올바른 파티션을 선택해야합니다. 따라서 하나의 OS는 부트 로더를 MBR에 설치하고 추가 OS는 부트 로더를 OS 파티션의 PBR에 설치합니다. 이 가능성은 Something else설치 중에 -option 을 사용할 때만 가능 합니다.

UEFI 설치에서는 좀 더 이상합니다. 부트 로더는 EFI 시스템 파티션 (ESP)의 폴더에 설치되며 여러 부트 로더가 쉽게 공존 할 수 있습니다. 여기서 문제는 모든 우분투 풍미와 다른 리눅스 배포판이 Grub을 ESP의 동일한 폴더에 설치할 것이며 선택의 여지가 없다는 것입니다. 따라서 추가 Linux 배포판을 설치하면 기존의 부트 로더를 덮어 씁니다. 내가 이것을 피하는 유일한 방법은 라이브 세션으로 부팅하고로 설치 프로그램을 시작하는 것입니다 sudo ubiquity -b.

또 다른 간단한 솔루션

우리가 파티션에 설치된 세 개의 리눅스 배포판을 가지고 있다고 가정하자 sda1, sda2하고 sda3. 이제 Grub의 부팅 메뉴 항목을 살펴 보겠습니다. 부팅하는 동안 다음과 같은 내용이 표시됩니다.

1 우분투
우분투 2 고급 옵션
3 메모리 테스트 (memtest86 +)
4 메모리 테스트 (memtest86 +, 시리얼 콘솔 115200)
5 우분투 (/ dev / sda2)
6 우분투 고급 옵션 (/ dev / sda2)
7 우분투 17.04 (/ dev / sda3에서)
Ubuntu의 고급 옵션 (/ dev / sda3에서)

처음 두 항목은 grub.conf실제로 사용 하는 -file 을 생성 한 OS 항목입니다 . 항목 # 3과 # 4는 현재 흥미롭지 않습니다. 항목 # 5, # 6, # 7 및 # 8은 OS-prober로 생성 된 항목이며 이러한 항목에 대한 OS가있는 파티션을 볼 수 있습니다. 그래서이 작은 예제의 경우에 우리가 있다는 결론을 내릴 수있다 grub.config-file 우리가 실제로 사용의 OS에 속하지 않는 sda2또는 sda3만에 OS에 sda1. 하나 이상의 OS가 별도의 /boot파티션으로 설치된 경우 어떤- /boot파티션이 어떤 OS에 속 하는지 확인해야 하지만 findmnt각 OS 에서 -command를 실행하면 쉽게 수행 할 수 있습니다 .


+1 긴 시간에도 불구하고이 답변에는 실제로 관련 포인트가 포함됩니다. BIOS 시스템의 경우 멀티 부팅을 수행하는 사용자는 설치 프로그램에서 "다른 방법"을 사용하여 더 많은 제어 권한을 가져야합니다. "GRUB 부트 로더를 설치하지 말 것"을 강요하지 않아도됩니다 ( 이전 답변 참조 ). UEFI 시스템의 경우 다중 부팅 설정은 설명 할 수 없거나 테스트되지 않은 것 같습니다.
clearkimura

1
lsblk

그리고 어떤 디스크가 마운트되어 있는지 확인하십시오 /. 당신이 /boot당신의 마운트 포인트에있는 경우 아래의 의견이나 Ravexina의 답변을 읽으십시오 .

확실하지 않은 경우 UUID를 확인하십시오.

lsblk -o UUID,NAME,SIZE,MOUNTPOINT

2
사실이 아닙니다 /boot. 별도의 파티션 인 경우 어떻게해야 합니까? 그런 다음 파티션에 /boot/grub/grub.cfg없습니다 /.
Ravexina

@Ravexina 기술적 인 지식을 얻으십시오. 그러나이 사용자의 목적으로 /파티션은 계산 되지 않습니까?

@MarkYisri 필자는 항상 사실이 아니라고 생각하지만 OP는 파일이 세 개의 다른 파티션에 있다고 알려주므로 /boot먼저 별도의 검사를하는 것이 좋습니다 .
Ravexina

1
@Ravexina를 지적 해 주셔서 감사합니다. 대답을 업데이트했습니다.
Katu

0

사용자가 부팅 한 파티션 을 확인하려면 설치된 시스템을 부팅 하기 전에 부팅 로더 메뉴 를 확인 하십시오. 부트 로더 메뉴를 보지 않으면 말하기 어렵습니다.

볼 곳

다음의 결합 된 스크린 샷에서 사용자가 부팅 한 파티션에서 알 수있는 힌트 3 개를 표시했습니다.

주석이있는 GNU GRUB PC / BIOS 버전을 사용하는 멀티 부팅 메뉴

레이블 (1) : 첫 번째 항목 아래의 GNU GRUB 메뉴 항목

레이블 (2) : 부트 로더 메뉴 상단의 GNU GRUB 버전

레이블 (3) : GNU GRUB 배경 이미지 (수동 설정 필요)

가장 명백한 힌트는 부트 로더 메뉴를 제어하는 ​​시스템에서 GNU GRUB 배경 이미지를 변경하는 레이블 (3)입니다. 사용자가 미리 설정 한 경우 가장 쉬운 방법입니다.

라벨 (1) 설명

첫 번째 항목 아래의 메뉴 항목에 나열 되지 않은 파티션을 찾으십시오 . 스크린 샷에는 "Ubuntu"및 "Ubuntu 14.04.5 LTS"와 같은 두 운영 체제 만 설치되어 있습니다.

Ubuntu
Advanced options for Ubuntu
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)
Advanced options for Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)

후자가 언급 (on /dev/sda3)했는데, 이는 전자가 /dev/sda2또는 에있을 수 있음을 의미합니다 /dev/sda1. 확실히, "Ubuntu"시스템을 부팅 한 후 관련 명령을 실행하여 사용 가능한 파티션을 나열하십시오 ( lsblk가장 간단한 것 같습니다).

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    13G  0 disk 
├─sda1   8:1    0   976M  0 part [SWAP]
├─sda2   8:2    0     6G  0 part /
└─sda3   8:3    0     6G  0 part 
sr0     11:0    1  55.7M  0 rom 

만의 출력과 비교 한 후 lsblk, 우리는 시스템 즉, "우분투는"에서 발견되는 것을 알고있다 /dev/sda2(한 없는 메뉴 항목에 표시) 부트 로더 메뉴가 관리되는.

라벨 (2) 설명

부트 로더 메뉴 상단에 인쇄 된 GRUB 버전을 찾으십시오. 부팅 된 시스템에있는 GRUB 버전 (예 : "Ubuntu")과 버전을 비교하십시오.

스크린 샷 (하반부)에서 : GNU GRUB version 2.02~beta2-9

"Ubuntu"와 같이 시스템을 부팅 한 후 관련 명령을 실행하여 GRUB 패키지의 버전을 확인하십시오 ( grub-install --version관련성이 높고 가장 간단 함).

$ grub-install --version
grub-install (GRUB) 2.02~beta2-9

이것은 어떻게 관련이 있습니까? 때문에 grub-installupdate-grub명령은 모두 동일한 패키지에 의해 제공됩니다 grub2-common. 부트 로더 메뉴가 동일한 패키지의 도구를 사용하여 생성 및 업데이트되는 경우, 부트 로더 메뉴 상단의 인쇄 버전은 동일합니다.

라벨 (3) 설명

부트 로더 메뉴의 기본 배경 이미지가 없음 (단순한 검정색)이므로이 힌트를 수동으로 설정해야합니다. 배경 이미지는 8 비트 깊이 여야합니다.

desktop-base패키지가 시스템에 설치되어있는 경우 GRUB 용으로 특별히 만들어진 이러한 배경 이미지 *grub.png는 대상 디렉토리에서 파일 이름 접미사 로 쉽게 찾을 수 있습니다.

$ ls /usr/share/images/desktop-base/*grub.png
/usr/share/images/desktop-base/desktop-grub.png
/usr/share/images/desktop-base/joy-grub.png
/usr/share/images/desktop-base/moreblue-orbit-grub.png
/usr/share/images/desktop-base/spacefun-grub.png

배경 이미지를 설정하려면

  1. 열기 /etc/default/grub파일은 수퍼 유저로, 다음 줄을 추가 GRUB_BACKGROUND=선택과 인용의 이미지에 대한 전체 경로.

    $ sudo nano /etc/default/grub 
    ...
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""
    
    # Show background in GRUB boot menu
    GRUB_BACKGROUND="/usr/share/images/desktop-base/spacefun-grub.png"
    ...
    
  2. 그런 다음 부팅 로더 메뉴가 포함 된 sudo update-grub업데이트 /boot/grub/grub.cfg를 실행 하십시오. 다음과 유사한 결과가 표시됩니다.

    $ sudo update-grub
    Generating grub configuration file ...
    Found background: /usr/share/images/desktop-base/spacefun-grub.png
    Found background image: /usr/share/images/desktop-base/spacefun-grub.png
    Found linux image: /boot/vmlinuz-3.13.0-24-generic
    Found initrd image: /boot/initrd.img-3.13.0-24-generic
    Found memtest86+ image: /boot/memtest86+.elf
    Found memtest86+ image: /boot/memtest86+.bin
    Found Ubuntu 14.04.5 LTS (14.04) on /dev/sda3
    done
    
  3. 머신을 재부팅하고 부트 로더 메뉴에 시스템의 update 명령으로 변경된 내용이 있는지 확인하십시오.

그렇지 않으면 다른 시스템에 대해 한 번에 하나씩 단계를 반복하십시오. 어떤 시스템이 부트 로더 메뉴를 제어했는지 알고 있다면 반복 된 단계는 불필요했을 것입니다 (다시 설치 방법에 따라 다름).

기권

이 답변은 GNU GRUB PC / BIOS 버전을 사용하는 멀티 부팅 설정이있는 BIOS 시스템에 대한 검증되고 잘 테스트 된 기준에 대해 설명합니다. 다음과 같은 예외가 적용됩니다.

  • GNU GRUB EFI 버전을 사용하는 UEFI 시스템 대응, 그것은되어 있지 보장 또는 하지 의 기준은 상기 한 바와 같이 동일하게 나타나는 경우 알려져 있습니다.

  • 체인 로딩의 작동 방식을 보여주기보다는 부트 로더 메뉴 의 모양 (스크린 샷의 상반부가 다르게 나타나는 방법)에 중점을 둡니다 . 따라서 "스크린 샷에 표시된대로 다중 부팅을 설정 한 방법"에 대해서는 이 답변에서 설명 하지 않습니다 .

  • 멀티 부팅 설정이 Ubuntu 14.04, Kubuntu 14.04, Xubuntu 14.04 등의 유사한 운영 체제와 동일한 복사본으로 만들어진 경우 사용자가 부팅 한 파티션을 알 수있는 유일한 확실한 방법은 레이블 (3)입니다.

  • 레이블 (3)은 "부팅 메뉴는 / dev / sda1에서 관리됩니다"라는 부트 된 이미지를 명시 적으로 쓰는 사용자 정의 배경 이미지를 사용하면 더 잘 작동 할 수 있습니다. 마찬가지로 "GRUB에 대한 사용자 정의 배경 이미지를 만드는 방법"에 대해서는 이 답변에서 설명 하지 않습니다 .

TL; DR 설치된 시스템을 부팅 하기 전에 부트 로더 메뉴 보십시오 . 가장 쉽고 신뢰할 수있는 방법은 GRUB 배경 이미지를 수동으로 설정하는 레이블 (3)입니다.

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