Table Of Content

우분투가 갑자기 부팅되지 않았는데, 해결했습니다.

문제 상황을 자세히 적고, 해결 방안도 정리해 둡니다.

1. 문제

  • 우분투(20.04)를 기본 OS로 사용하는데, 필요에 따라서 듀얼 부팅해서 Windows10(최근에 업데이트해서 Windows11)를 사용합니다.
  • 우분투로 부팅해서 사용하다가, 필요에 따라서 윈도우로 부팅해서 작업 후 다시 우분투로 돌아가려고 하는데 부팅이 되지 않습니다. 에러 메시지는 root file system을 찾을 수 없다는 것이었습니다.
  • 우분투 설치 USB로 부팅해서 boot-repair를 실행했는데 "Recommanded repair" 항목이 보이지 않고, "Create a Bootinfo summary" 항목만 보입니다.
  • 검색해 보니 AHCI 모드나 기타 다양한 설명이 있는데 관련이 없었습니다. (BIOS에서 해당 기능을 찾을 수도 없었고, Windows에서 파티션을 암호화하지도 않았습니다.)
  • 어떻게든 부팅시키고 싶은 마음에 Clonezilla로 복원을 시도했는데 백업한 파티션을 확인할 수 없습니다.
  • 다시 우분투 설치 USB로 부팅해서, Disks 프로그램으로 SSD를 확인하는데, 여러 파티션이 아닌 하나로 보이며, 파일시스템의 종류도 확인할 수 없습니다. 윈도우로 부팅해서 SSD를 살펴보면 여러 파티션이 문제없이 보였습니다.
  • 우분투 설치 USB로 부팅 후 mount 명령어를 살펴보니, 평상시 보지 못하던 파티션인 /dev/nvme0n1등의 파티션이 보입니다. SSD는 /dev/sda...에 mount가 되어야 하는데 이상하게 생각되었습니다.
  • 결론적으로 우분투가 SSD의 물리적인 문제가 아니라, 파티션 정보를 인식하지 못하는 문제로 판단했습니다.
  • 이후 단계는 모두 우분투 설치 USB로 부팅 후 진행했습니다
  • fdisk -l 명령어로 partition들의 정보를 확인해 보니, SSD 파티션 항목에서 "The primary GPT table is corrupt, but the backup appears OK, so that will be used."라는 메시지를 확인할 수 있었습니다. GPT table의 문제로 파티션을 확인할 수 없었던 것입니다.

2. 해결

아래 링크를 참고해서 해결했습니다.

https://lihashgnis.blogspot.com/2016/07/recovering-from-corrupted-gpt-partition_30.html

 

gdisk로 "GPT: damaged"라는 메시지를 확인할 수 있었습니다.

$ sudo gdisk -l /dev/nvme0n1

그리고, 링크에 있는 명령어들로 문제를 해결했습니다.

$ sudo gdisk /dev/nvme0n1

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): r

Recovery/transformation command (? for help): b

Recovery/transformation command (? for help): c
Warning! This will probably do weird things if you've converted an MBR to
GPT form and haven't yet saved the GPT! Proceed? (Y/N): Y

Recovery/transformation command (? for help): v

No problems found. 3437 free sectors (1.7 MiB) available in 2
segments, the largest of which is 2014 (1007.0 KiB) in size.

Recovery/transformation command (? for help): w

참고로 gdisk의 명령어들은 다음과 같습니다.

Command (? for help): ?
b	back up GPT data to a file
c	change a partition's name
d	delete a partition
i	show detailed information on a partition
l	list known partition types
n	add a new partition
o	create a new empty GUID partition table (GPT)
p	print the partition table
q	quit without saving changes
r	recovery and transformation options (experts only)
s	sort partitions
t	change a partition's type code
v	verify disk
w	write table to disk and exit
x	extra functionality (experts only)
?	print this menu

반드시 w로 write를 하고 다시 한번 gdisk로 GPT의 상태를 확인해야 합니다.

 

- End -

반응형

본 글은 외장 모니터의 EDID를 읽어서 정상인 경우에만 연결하지 않고, 무조건 연결하는 방법에 대한 것입니다.

 

외장 모니터(HDMI)를 잘 쓰다가, 갑자기 연결이 되지 않는 문제가 발생했습니다.

 

xrandr 명령어를 이용하면 HDMI가 연결되지 않았습니다.

$ xrandr
...
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)

dmesg로 확인해 보니 아래와 같은 메시지를 확인할 수 있었습니다.

[00] BAD  00 ff ff ff ff ff ff 00 05 e3 53 23 ec 02 00 00
[00] BAD  28 15 01 03 80 33 1d 78 2a 6e 95 a3 54 4f 9f 26
[00] BAD  00 50 54 bf ef 00 d1 c0 b3 00 95 00 81 80 81 40
[00] BAD  81 c0 01 01 01 01 02 3a 80 18 71 38 2d 40 58 2c
[00] BAD  45 00 fd 1e 11 00 00 1e 00 00 00 fd 00 32 4c 1e
[00] BAD  53 11 00 0a 20 20 20 20 20 20 00 00 00 fc 00 32
[00] BAD  33 35 33 0a 20 20 20 20 20 20 20 20 00 00 00 ff
[00] BAD  00 41 49 4a 42 41 4f 41 30 30 30 37 34 38 01 05

때로는 메시지 위에 "EDID is invalid:"라는 메시지가 보이기도 했습니다.

 

EDID(위키피디아)는 모니터 정보를 PC에 전달하는 것으로, 결론적으로 EDID 에러 때문에 PC가 외장 모니터를 인식하지 못하는 이슈입니다.

EDID는 EEPROM에 저장되는데 문제가 발생하기도 하는 것 같습니다. - "Some people say hot-plugging the cables can cause corruption."(링크 1)

링크 2를 참고해서, 아래 명령을 실행했지만 edid.bin이 생성되지 않았습니다. (read-edid edid-decode 설치 후 실행)

$ sudo get-edid -m 0 > edid.bin

그래서, 앞서 dmesg로 확인한 EDID를 c 프로그램을 이용해서 binary 파일(edid.bin)을 생성하고 아래 명령을 수행해 보았습니다.

$ parse-edid < edid.bin
Partial Read... Try again

EDID는 256 bytes 인데, 128 bytes만 변환해서 나오는 에러입니다. 나머지 128 bytes를 모두 0으로 채워서 edid.bin을 생성한 후 명령어를 실행하면,

$ parse-edid < edid.bin
WARNING: Checksum failed
Trying to continue...
Section "Monitor"
...

모니터에 대한 정보는 잘 나오는데, Checksum에러가 발생한 것을 확인할 수 있었습니다.

다시 아래 명령을 실행하면,

$ cat edid.bin | edid-decode
edid-decode (hex):
...
Has 1 extension block
Checksum: 0x5 (should be 0x16)
...

Checksum이 원래 0x16이어야 하는데 0x5로 잘못되었다는 내용을 확인할 수 있습니다.

위키피디아를 확인하면 Checksum의 위치는 128 bytes의 맨 마지막 byte입니다.

이를 0x05 -> 0x16으로 변경 후 edid.bin을 새로 생성해서 위 명령들을 수행하면 정상적으로 수행되는 것을 확인할 수 있었습니다.

 

결론적으로 외부 모니터로부터 EDID를 읽었는데 Checksum이 틀려서 발생하는 문제였습니다.

 

링크 3을 참조하면, edid.bin 파일은 /lib/firmware/에 위치하는 것으로 보입니다. 그래서 아래 명령어로 edid.bin을 복사했습니다.

$ cp edid.bin /lib/firmware/edid.bin

그리고 링크 2를 참고해서 grub을 변경했습니다.

$ sudo vi /etc/default/grub

# 원래 내용
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# 수정 내용
GRUB_CMDLINE_LINUX_DEFAULT="drm.edid_firmware=HDMI-A-1:edid.bin video=HDMI-A-1:D quiet splash"

위 명령어는 /lib/firmware/ 폴더에 있는 edid.bin 파일을 이용해서 HDMI-A-1를 연결하겠다는 내용으로 이해됩니다.

내용을 저장한 후 grub을 업데이트 해 줍니다.

$ sudo update-grub

이후 다시 부팅했더니 외부 모니터가 정상 동작합니다.

 

[주의사항]

노트북에서 사용하다 보니 문제점을 확인했습니다.

강제로 EDID를 인식시키는 방법이므로, 외장 모니터가 연결되어 있지 않아도 외장 모니터가 있다고 인식합니다.

따라서 어플리케이션이 다른 화면에 나타나서 컨트롤이 어려울 수 있고, 마우스의 움직임도 이상합니다.

이때는 grub에서 예전에 사용하던 설정으로 변경하여 EDID 파일을 사용하지 않도록 했습니다.

EDID를 외장모니터에 직접 write하는 것도 방법이라고 하는데, 해당 방법은 아직 진행하지 못했습니다.

 

- End -

 

링크 1) https://wiki.debian.org/RepairEDID

링크 2) https://kodi.wiki/view/Archive:Creating_and_using_edid.bin_via_xorg.conf

링크 3) https://askubuntu.com/questions/1011098/how-to-eliminate-edid-checksum-errors

 

반응형

+ Recent posts