디스크의 파일에서 OS 아키텍처(32비트 또는 64비트)를 어떻게 확인할 수 있습니까?

디스크의 파일에서 OS 아키텍처(32비트 또는 64비트)를 어떻게 확인할 수 있습니까?

안타깝게도 내 mobo가 손상되어 처음부터 새 기계를 만들어야 합니다. 원래 OS의 32비트 버전을 로드했는지, 아니면 64비트 버전인 (K)ubuntu 14.04를 로드했는지 기억이 나지 않습니다.

기존 HDD를 마운트하는 경우 OS 아키텍처를 확인하기 위해 검사할 수 있는 파일이 있습니까? 64비트 실행 파일이나 라이브러리 이상의 것이 필요합니다. 이는 실행 중인 OS를 확인하는 신뢰할 수 있는 방법이 아니기 때문입니다.

uname -a실행 중인 OS가 아니라 마운트된 디스크이므로 실행할 수 없습니다 .

답변1

다음을 실행하여 호스트 운영 체제에 32비트 커널이 있는지, 아니면 64비트 커널이 있는지 확인하는 것은 간단합니다.

uname --machine

출력은 i38632비트를 의미하고 x86_6464비트를 의미합니다.

덜 간단하지만 응용 프로그램이 i386 또는 amd64 아키텍처용으로 컴파일되었는지 여부를 결정하는 것은 여전히 ​​가능하지만 둘 중 어느 것도 커널 아키텍처를 나타내지는 않습니다. /sbin/initinit 프로그램은 부팅 시 사용자 정의될 수 있으므로 검사만으로는 기술적으로 충분하지 않습니다.

커널의 아키텍처를 결정하는 유일한 확실한 방법은 실제로 커널을 부팅하는 것입니다. 다행히도 이는 를 사용하여 쉽게 수행할 수 있습니다 qemu.

터미널을 열고 /boot하드 드라이브로 이동하여 시작하십시오. 다음 형식으로 하나 이상의 압축된 커널 이미지를 찾을 수 있습니다.

vmlinuz-[버전]-[유형]

예를 들어 내 컴퓨터에 vmlinuz-3.19.0-21-generic현재가 있습니다. /boot이제, 당신이qemu-시스템-x86qemu-system-x86 설치패키지가 설치되어 있으면 다음 명령을 실행하고 해당하는 경우 파일 이름을 대체하십시오.

qemu-system-i386 -kernel <path_to_kernel>

텍스트 벽이 스크롤되어 결국 패닉이 발생하는 경우(루트 FS가 없기 때문에) 32비트 커널을 설치한 것입니다. 대신 아래에 표시된 것과 유사한 오류가 표시되면 64비트 커널(x86 CPU에서 부팅되지 않음)을 사용하고 있는 것입니다.

여기에 이미지 설명을 입력하세요

답변2

일반적으로 특정 종류의 실행 파일이나 라이브러리가 존재하는 것만으로는 유용하지 않다는 점에 동의합니다. 둘 이상의 아키텍처 개체를 설치할 수 있지만 그 중 하나만 가질 수 있는 실행 파일도 있기 때문입니다. file /mnt/usr/bin/dpkg( /mnt파일 시스템을 마운트한 위치로 교체)은 핵심 패키지 관리자가 32비트인지 64비트인지 알려줍니다. 이는 전체 마이그레이션 도중이 아닌 이상 시스템의 나머지 부분을 정확하게 나타내는 지표입니다. 하나에서 다른 것으로 - 당신이 그랬는지 확실히 알 것입니다!

답변3

이전 하드 디스크의 루트에서 디렉터리 구성을 살펴보세요. 이 방법은 Windows OS인 경우 "Program Files" 및 "Program Files (x86)" 디렉터리를 찾는 것과 유사합니다.

Linux에서는 64비트인 경우 "lib32" 및 "lib64" 디렉터리가 표시되고, 32비트인 경우 lib 디렉터리만 표시됩니다(lib32 디렉터리도 있는지 지금은 기억이 나지 않습니다).

제안된 방법을 신뢰하지 않거나 더 많은 보증이 필요한 경우 "file" 명령이 유망해 보입니다. @ColinWatson 답변을 보면 개인적으로 /sbin/init가 더 나은 후보라고 생각하지만 해당 파일(dpkg 또는 init) 중 하나라도 커널 아치와 일치합니다.

예를 들어, 실행하면 file /sbin/init다음과 같은 출력이 제공됩니다.

/sbin/init: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24

/sbin/init 경로를 이전 루트 파티션의 적절한 마운트 지점으로 바꾸면 됩니다. 현재 마운트 지점인 경우 /media/oldroot전체 경로는 다음과 같습니다./media/oldroot/sbin/init

관련 정보