failed to unmount /var: systemd mount 로 해결, 및 종료시 전원 문제.

언젠가부터, 시스템이 종료될 때 이런 오류가 보였다. /var 를 마운트 해제하지 못했다는.
그럼에도 별 문제없이 PC 는 잘만 꺼졌다.

헌데.. 그동안 잘 쓰지 않던 랩탑을 꺼내 쓰다보니, 종료가 되다가 그대로 멈춰버리는 현상이 반복된다. KDE Neon 이라, 살짝 시스템이 불안할 수도 있다는 생각도 들었고, 커널이 바뀌거나 조금 더 안정화가 되면 나아지겠지.. 생각하다가, 오늘, 해결책을 찾아봤다. (이 글 쓰고나서 알게된 사실인데.. 전원 문제는 /var unmount 문제와는 큰 관계가 없다. 즉, systemd mount 를 해도 전원이 잘 안꺼지는 문제는 여전하다.)

이게 또 좀 애매한게, 어떨 땐 종료가 또 잘되고, 어떨 땐 그냥 ‘KDE Neon + 판본 숫자‘ 가 표시되면서 그냥 멈춰버리곤 한다. 헌데, 종료가 되는 과정에서 ESC 를 눌러 터미널 화면으로 전환을 해주면, 별 문제없이 종료가 되는 현상도 있었다.

그때, 마지막에 뭔가 에러를 내면서 전원이 탁~ 꺼지는데, 그게 뭔지를 알아내려고 로그를 뒤져봤는데 도무지 찾을 수가 없었다. 그리하여, 무식하지만 가장 확실한 방법. 그 화면을 녹화(스마트폰)해서, 순간을 포착할 수 있었다.

그렇게 확인해보니, 가장 마지막에 내 뱉은 오류가 바로 저 failed to unmount /var 였다. var 를 다른 파티션에 마운트해서 쓰고 있는데, 이게 systemd 와 살짝 문제가 있는 모양이다. 사실 이 문제 때문에 전원이 꺼지지 않는지 여부는 확실하지 않았다. 그러나, 이 방법을 적용해보니 전원 문제가 해결되었기에, 결국 이게 정답(?)이라고 할 수 있겠다. (정답 아니다!)

먼저 systemd mount

아무튼, 문제가 있다면, 그를 돌아가게 해주는 방법을 공유한 선구자도 있는 법.

검색 결과, 한가지 편법을 알아낼 수 있었다.
이 방법은, /var 를 fstab 에서 마운트하지 않고, systemd 를 사용하게끔 하고, LazyUnmount 기능을 사용하여 이 문제를 회피할 수 있게끔 한다.
위 문서는 조금 날림으로 작성되어 있고, 그대로 옮겨적으면 100% 실패할 수 밖에 없다. 실패는 부팅 불가로 이어지고, 복구하려면 다른 부팅 디스크가 필요하다. 따라서, 제대로 잘 작성해야 한다. 그러기 위해서, 또 다른 문서를 참고했다.

방법은 이렇다.

  • /etc/fstab 에서 /var 항목을 해제한다.
  • /etc/systemd/system/var.mount 를 만들고, 아래 내용을 넣는다.
  • sudo systemctl enable var.mount 를 실행한다.

이제 재부팅만이 남았다.


/etc/systemd/system/var.mount 내용:

[Unit]
Description=Lazy mount file for /var to work around systemd bug
DefaultDependencies=no
Conflicts=umount.target
Requires=system.slice -.mount
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=/dev/disk/by-uuid/xxxxx-yyyyy-zzzz-aaaa-bbbb
Where=/var
Type=btrfs
Options=defaults,subvol=@var
LazyUnmount=true

[Install]
WantedBy=multi-user.target

CentOS 문서에 있는 내용은, Unit 항목에서 줄바꿈이 되어 있지 않다. 별 생각없이 그대로 붙여넣었다가 낭패를 겪였다.
아무튼, 저런 식으로 넣어주면 된다. 자세한(?) 해설은 살짝 고리타분, 불친절한 ‘설명서‘에서 볼 수 있다.

What 에는 /var 가 위치한 디스크(파티션) 정보를 넣어줘야 하는데, 반드시 저런 형식이 필요한가 보다. 설명서엔 ‘Takes an absolute path of a device node’ 라고 나와있다.

Options 에는 fstab 에 있는 내용을 그대로 넣어주면 된다.
이 방법의 핵심은 LazyUnmount 에 있는가본데, 기본값은 False 이다. 이걸 True 로 바꿔주면서, ‘failed to unmount’ 오류를 피해갈 수 있었다.

확인해보니, swap 이 마운트 해제되기 바로 직전에 /var 가 unmount 된다. swap 해제는 시스템 종료의 끝부분에 있는데, 바로 그전에 실행이 된다. 따라서 failed.. 오류가 발생하지 않게 되는 모양이다.

journalctl -b -1 로 확인해보니, 로그에는 /var 가 unmount 되기 바로 직전까지만 기록되어 있다. 당연하다고 할까, log 가 기록되는 위치가 /var 아래이므로 그렇게 될 수 밖에 없다.

동영상으로 확인해보면 이렇다.

fstab /var:

21초를 보면, Stopped Flush Journal to Persistent Storage. 가 나오고 FAILED 가 뜬다. 그리고 맨 마지막 줄에 다시 한번 FAILED 가 강조되어 표시된다. Failed to finalize file systems, ignoring 라고 나오는데, ignore 되는 경우도 있고, 그렇지 못한 경우도 있어서, 전원이 꺼지지 않을 때가 있다.

그런데, systemd 로 바꾸면, 13초에서 보이듯, 순서가 조금 바뀌면서 오류가 없다.

문제는 이 오류가 난다고 해서 반드시 전원이 꺼지지 않는 현상이 나타나지는 않는다는 건데.. 데스크탑 2대는 멀쩡히 잘만 되고, 유독 Thinkpad 에서만 이 오류가 발생한다.

아무튼간에, 이 작업을 하고 나서는 전원이 잘 꺼진다. 그럼 된거지 뭐.


자.. 그럼 전원 문제는??

또 다시 이런 저런 삽질을 해본 결과, Kernel option, ‘splash’ 가 원인 유발자일 가능성을 찾았다.

splash 가 켜져 있을 경우에, 종료명령을 내리면, KDE Neon 5.xx 문구가 나오면서 아래는 기어가 돌아가는 듯한 모양이 나오다가 화면이 꺼진다. 그리고 전원도 같이 꺼져야 하는데, 갑자기 다시 KDE Neon 문구가 튀어나온다. 다른 점이라면, 이번엔 기어는 멈춰서 돌지 않고 있는 상태.

이 상태에서, 재수가 좋으면(?) 약간 시간이 지난 뒤에 전원이 꺼지고, 아니면 그냥 그대로 멈춰버린다. (한~~~참을 기다리면 꺼질런지도.)

splash 를 빼면, 이 문제없이 잘 꺼진다. (적어도 아직까지는..)
grub 을 쓰면 조금 복잡하게 해줘야 하고, refind 를 쓰면, /boot/refind.conf 에서 splash 를 지워주면 된다. (이래서 refind 가 좋다니까!)

결론?

/var unmount 문제, 종료시 전원 문제가 있다면, 위 두가지 작업을 모두 해보자.
systemd mount, splash 빼기.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.