리눅스

(2) Linux에서 디스크 확인과 구조

나뭇빛자루 2020. 9. 18. 14:27
반응형

디스크 확인 명령어

 

fdisk -l

위와 같이 /dev/sda1 밑에 파티션 1은 실린더 경계에서 종료되지 않았습니다

라는 메시지가 뜬다 이 이유가 뭘까

 

 

위에 fdisk -l 커멘드를 입력하면 2번째 줄에 

255해더 , 63 섹터, 2610 실린더라고 나오는데

즉 1장의 디스크는 2610개의 트랙으로 분할 되어있음 을 알 수 있다.

또한 255개나 되는 헤드를 가진 디스크 드라이브가 존재할 리 없다.

디스크 장치의 실린더C, 헤드H 섹터S의 종합정보를 CHS 라고 부른다

하지만 fdisk 커멘드에서는 이 CHS 구조와 아무런 관계가 없는데

이를 이해 하기 위해선 CHS방식과 LBA방식을 이해할 필요가 있지만

현제 하드 디스크는 LBA(Logical Block Addressing) 방식으로 접근하는게 보통이다

이것은 하드 디스크 전체 섹터에 0부터 일련번호를 붙여 접근하는 하는 섹터를 지정하는 방식이다.

 

현 리눅스에서는 LBA 방식으로 접근하므로 파티션 시작과 종료 위치를 지정하는데 

fdisk CHS 디스크 방식 대응 때문에 디폴트로 DHS방식 디스크 정보를 표시 한다.

이 디폴트 값에서 LBA는 무리하게 디스크에 대해 번호를 붙힐려고 하며 시작, 종료 위치의 바꿔

위와 같은 "Partition 1 does net end on cylinder boundary." 라는 커맨드가 뜨는것이다

 

결국 이것은 불필요한 커멘드 이다.

 

번외로,

섹터 번호와 물리적 섹터 위치를 짝 지우는 일은 하드디스크의 컨트롤에 내장된 "펌웨어"가 담당한다

보통은 섹터 번호가 작을수록 디스크 외측의 영역을 사용 하도록 되어 있고

시작지점과 종료지점이 실린더 번호로 표시 되지만 이것은 정확한 정보가 아닌데 

fidsk -u 를통해 지정하면 정확한 정보가 나온다

 

이 경우 각 파티션의 시작점과 종료지점이 섹터 번호로 표시된다.

Start에 (시작 섹터번호) 2048부터 시작되는데 그러면 0~2047까지는 뭐가 사용될까? 

바로 MBR이 있고 그 뒤에 영역에 GRUB의 스테이지 1.5가 기록된다.

 

시작과 종료 지점은 어디에 기록은 "파티션 테이블"에 기록된다.

파티션 테이블은 0섹터에 있는 MBR의 446~509바이트 부분을 뜻하며

MBR의 0~445는 부트스트랩 로더 즉 서버가동을 시작할 때 BIOS가 읽어 와서 실항해는

GRUB스테이지 1이 기록 되어있다. 여기는 0xAA55라는 값이 기록되는데 이게 다르면

MBR이 망가져 있을 가능성도 고려해 봐야한다.

 

위에 0xAA55라고 헥사 코드를 말을 했는데

이를 확인 하는 방법은  hexdump 커맨드로 가능한데

              시작offset      길이     파일 이름

hexdump   -s 446         -n 66    /dev/sda

위와 같이 아래에서 두번째 시작 주소부터 끝에 길이가 aa55가 나와야 한다.

 

 

아래는 GRUB 스테이지를 나타내느 그림이다.

 

 

 

hexdump 와 유사하게 xxd 명령어가 있는데 바이너리 파일을 마찬가지로 읽을 수 있다.

xxd /dev/sda 명령어 상태 헥사코드 형태로 10단위씩 나타내고 있다.

 (xxd 커맨드는 바이너리 파일을 읽을 수 있게 해주는 명령어다)

 

xxd -b /dev/sda 이진코드로 나태낸다.

 

다른 디스크 확인 명령어 알아보기 쉽다 

lsblk

 

반응형