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

 

반응형

Ubuntu 14.04를 설치해서 사용 중입니다.
Ubuntu를 설치할 때 가장 먼저 설치하는 application은 Google Chrome입니다.
Windows에서도 Chrome을 사용하고, Firefox가 낯설다 보니 Chrome을 설치하게 됩니다.
Ubuntu에 Chrome을 설치하는 방법은 여러 가지가 있겠지만, Firefox 브라우저로 Chrome 설치 파일을 다운 받고, 아래 명령어로 이용합니다.

$ sudo dpkg -i google-chrome-stable_current_amd64.deb 

그런데, 가끔 Chrome가 실행되지 않을 때가 있습니다.
리눅스가 충분히 친숙하지 않고, Ubuntu 설치에는 시간이 얼마 걸리지 않아서, 이럴때는 다시 Ubuntu를 설치하고 했습니다.
이런 상황이 자꾸 반복되다보니 해결책을 찾아보았습니다.


1. Ubuntu에서 Chrome이 실행되지 않는 경우에 대한 Posting이 있긴 하지만, 여전히 문제가 발생합니다.

 

2. 참고 페이지를 따라서, gpu를 disable하고 실행해 보지만, 여전히 문제가 발생합니다.

 

3. Chrome에서 debug message  출력을 확인해 보고 싶어서  찾아보았습니다.
Google 지원 페이지에서 debug message option 을 확인할 수 있었습니다.

 --enable-logging=stderr --v=1

여러 줄의 메시지가 출력되는데, 아래 메시지가 출력되면서 멈춰 있습니다.

chrome Activated seccomp-bpf sandbox for process type: gpu-process.

무슨 의미인지 확인하기 어렵고, 화면에 출력되는 로그만으로는 문제를 확인하기 어려웠습니다.

설명에 있는 chrome_debug.log 파일을 찾아보기로 합니다.

$ find . -name "*.log"

chrome_debug.log는 보이지 않습니다.

 

그런데, .config/google-chrome 폴더가 보입니다.
이상할 때는 config를 지우는 것도 좋은 방법이니, config 폴더를 지워봅니다.

$ rm -rf .config/google-chrome

그리고,  command line에서 chrome을 실행해 봅니다.

$ google-chrome-stable

Chrome이 동작합니다.
정확한 이유는 모르겠지만, chrome이 업데이트 되면서 config 파일과 충돌이 있었거나, ubuntu를 사용하면서 설치한 패키지와 충돌이 있지 않았을까 생각해봅니다.

 
앞으로는 Ubuntu를 설치하는 일이 조금은 줄어 들것 같습니다.

-End-
 
 
 
 

반응형

이유는 알기 어렵지만, 우분투로 부팅을 했는데 이상 동작을 했습니다.

1. 아이콘 하나도 없음

2. 바탕 화면만 나오면서,

3. "Ctrl+Alt+t"을 눌러도 터미널이 실행되지 않음

다행히 "Ctrl+Alt+F1"은 동작했고, console을 띄울 수 있었습니다.

링크의 블로그를 따라서 아래 명령어를 입력했을 때 아이콘도 보이고 런처가 정상 동작을 했습니다.

다만, 한글 설정이나 런처의 기본 아이콘 설정은 변경되어 다시 설정해야 했습니다.

$ sudo service lightdm stop
$ rm ~/.config/dconf/user
$ sudo service lightdm start

 

 

 

반응형

리눅스 Python 3.5.3 환경에서 Tensorflow를 'pip install tensroflow'로 설치 후 MNIST 예제를 실행하기 위해서 아래 코드를 수행했습니다.

# MNIST 데이터를 다운로드 한다.
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

그런데 아래와 같은 에러가 확인됩니다.

ImportError: No module named 'tensorflow.examples.tutorials'

Python 2.x 버전으로 변경해 봐도 동일한 문제가 확인됩니다.

 

아래 명령어를 이용해서 설치된 tensorflow의 버전을 확인해 보면, version 2.0을 사용하고 있습니다.

>>> import tensorflow as tf
>>> tf.__version__

virtualenv 환경을 이용해서 시험했는데, venv 폴더 하위에서 mnist 관련 examples 폴더는 없었습니다. github에서 tensorflow version 2.0을 살펴보면 example 폴더가 정상적으로 존재하는 것은 확인했습니다. 다운로드만 되지는 않은 것으로 보입니다.

 

다시 시험을 위해서 모두 지우고, virtualenv 환경을 다시 한번 셋업했습니다. 이번에는 Python 3.5 버전에 맞는 tensorflow를 아래 명령어를 이용해서 직접 설치했습니다. (https://www.tensorflow.org/install/pip 참조)

pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.14.0-cp35-cp35m-linux_x86_64.whl

이후에는 MNIST 다운로드가 실행되었습니다.

 

Tensorflow version을 확인해 보면 "1.14.0"으로 확인되었으며, 아래와 같이 input_data.py 파일도 확인할 수 있었습니다.

./venv/lib/python3.5/site-packages/tensorflow/examples/tutorials/mnist/input_data.py

정확한 이유는 알기 어렵지만, python 3.5.x와 관련해서는 tensorflow version 2.0이 아닌 1.14.0으로 해야 example import 에러를 회피할 수 있는 것으로 생각됩니다. github에서 tensorflow version 2.0에 example 폴더가 정상적으로 존재하므로, github에서 직접 다운로드하는 해결책이 있을 것으로 보이지만, 진행해 보지는 않았습니다.

반응형

+ Recent posts