이번 주 초 공식 공개일에 Fedora 26으로 업그레이드했는데, 간단히 말해서 설치 문제가 발생하여 부분적으로 다시 포맷했습니다. 내 디스크 레이아웃은 다음과 같습니다.
# df -h | grep dev
/dev/sdb3 40G 5.6G 32G 15% /
/dev/sdb2 477M 138M 311M 31% /boot
/dev/sdb1 200M 34M 167M 17% /boot/efi
/dev/sda2 9.8G 940M 8.4G 10% /var
/dev/sda1 493G 441G 27G 95% /home
/dev/sdb
루트가 설치된 SSD이고, /dev/sda
파티션이 있는 일반 HDD입니다 /home
. 실패한 업그레이드를 수정하기보다는 Fedora 26을 새로 설치하기로 결정하여 SSD의 모든 파티션을 dnf
다시 포맷 하고 파티션을 그대로 유지하면서 Fedora 26을 다시 설치했습니다. 설치가 원활하게 진행되었으며 한 가지를 제외하고 모든 것이 다시 잘 작동하는 것 같습니다. 이제 Zhs 자동 완성 기능이 더 큰 디렉터리에 대해 매우 느립니다./dev/sdb
/home
Zsh가 내 기본 셸이고 수많은 플러그인(아, 내 Zsh, FZF 등)이 설치되어 있어서 업그레이드 중/이후에 플러그인 중 하나에 문제가 있을 수 있다고 생각하여 Bash로 전환했습니다. , 자동 완성이 표시되는 데 10~30초(디렉터리 크기에 따라 다름)가 소요됩니다. 문제를 해결하기 위해 쉘을 더 설치했는데 놀랍게도 완벽하게 tcsh
작동했습니다 . fish
동일한 설정에서 Bash와 Zsh가 10초 동안 정지되는 등 이 두 가지 성능이 매우 뛰어납니다.
나는 Zsh 설치에 비해 매우 평범한 구성을 가진 Bash를 사용하여 일반적인 진단을 수행했지만 많은 관심을 찾을 strace
수 set -x
없었습니다. 또한 제거 후에도 여전히 느리기 때문에 FZF 관련 문제를 배제했습니다... 내 직감으로는 이것이 어떤 식으로든 Zsh 및 Bash에 영향을 미치는 완성 엔진의 이상한 해싱/캐싱 문제임에 틀림없다고 말하지만 저는 그것을 모릅니다. 실제로 이를 뒷받침하는 증거가 있습니다. 자동 완성을 위해 더 작은 폴더(몇 개의 파일, 몇 개의 하위 디렉터리)를 사용하면 제가 시도한 모든 셸에서 잘 작동합니다. 내가 시도한 다른 방법은 fsck -A -y
손상된 파티션이 없는지 확인하기 위해 실행하고 일부 메타데이터나 캐시가 손상된 경우를 bash-completion
대비해 다시 설치하는 것입니다.zsh
여기서 정말 흥미로운 점은 자동 완성이 내가 던지는 모든 것에 문제가 없다는 사실이지만 Bash와 Zsh는 그렇지 않다는 것입니다 tcsh
. fish
무슨 일인지 아는 사람 있나요? 이에 대해 아시는 분에게 정말 감사드립니다!
답변1
문제가 해결되었습니다! 나는 이리저리 돌아다니고 있었고 perf trace
출력 줄이 계속 스크롤되면서 Konsole(내 기본 터미널)에서 libnotify에 대한 이상한 호출을 엿볼 수 있었습니다. 다시 포맷한 후에는 더 이상 데스크톱 알림 데몬이 설치되어 있지 않기 때문에 이것이 이상해 보입니다. (저는 알림 데몬이 제공되지 않는 i3을 사용합니다.) 이로 인해 다른 터미널 에뮬레이터를 사용해 보는 것에 대해 생각하게 되었습니다. 그래서 시도해 보았는데 urxvt
문제가 사라졌습니다. 저도 해봤는데 gnome-terminal
전혀 문제없어요! Konsole이 dbus/systemd를 통해 데스크톱 알림을 발행하려고 하지만 libnotify 데몬이 요청에 응답하도록 설치되지 않아 시간 초과가 발생할 수 있습니까? 그래서 dunst
업그레이드하기 전에 사용하던 데몬인 를 설치했는데 , 예상했던 대로 Konsole의 자동 완성 속도가 느려졌습니다!
따라서 자동 완성 기능이 호출될 때 Konsole이 무엇을 하려는지 모르겠습니다. 데몬을 설치한 후에도 알림 팝업이 표시되는 것을 본 적이 없지만, 지금은 문제가 해결된 것 같습니다.
나는 이것을 KDE 팀에 가져가서 그들이 어떻게 생각하는지 알아보고 싶다고 생각했습니다. 비록 알림 데몬을 설치하지 않은 것이 내 잘못임에도 불구하고 내가 시도한 다른 터미널에서는 이 문제를 잘 처리했기 때문입니다.
어쨌든, 도와주신 모든 분들께 감사드립니다!