메시지 형식이 다음과 같은 통신 프로토콜을 구현하여 systemd-fsckd의 fsck 메시지를 처리하도록 구성된 사용자 정의 Plymouth 주제(MIB Ossigeno 기반)를 만들었습니다.
fsckd:<num_devices>:<progress>:<string>
문서에 따르면 (8-systemd-fsckd.service)
실행 시 테스트 모드("부팅 후")에서 다음 명령을 사용합니다.
plymouthd; plymouth --show-splash ; for ((I=0; I<10; I++)); do plymouth --update=fsck:sda1:$I ; sleep 1; done; plymouth quit
특별한 FSCK 메시지를 사용하여 plymouth는 "디스크 1/1 확인 중(2% 완료)"과 같은 원하는 메시지를 표시합니다. 바라보다:플리머스.
그러나 시스템을 다시 시작하면 fsck 메시지가 bootsplash에 나타나지 않습니다. 그러나 Esc를 눌러 콘솔로 전환하면 fsck 진행 메시지를 볼 수 있습니다.
부팅 시 fsck를 강제 실행하기 위해 une2fs와 grub()을 번갈아 사용하여 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force fsck.repair=yes"
효과가 있는지 확인했습니다.
어떤 이유로 fsck와 Plymouth 간의 통신이 제대로 작동하지 않거나 제대로 작동하지 않습니다. 기본 테마 futureprototype도 작동하지 않습니다. 문제는 systemd-fsckd에 있는 것 같습니다. 시작 시 systemd-fsckd의 작업이 실행되는지 확인하는 방법은 무엇입니까? , 문제가 발견되었는지 보여주는 보고서나 상태가 있나요?
나는 /run/initramfs/fsck.log를 확인합니다(이것은 좋아 보입니다):
~# cat /run/initramfs/fsck.log
Log of fsck -C -f -y -T -t ext4 /dev/sda1
Wed Feb 28 15:26:27 2024
e2fsck 1.47.0 (5-Feb-2023)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: 212266/593344 files (0.2% non-contiguous), 1705537/2371072 blocks
Wed Feb 28 15:26:30 2024
잡지...
~# journalctl -u systemd-fsck*
-- Boot f8b976dfd857400085057901577c56f9 --
feb 28 10:40:53 debian12 systemd[1]: Started systemd-fsckd.service - File System Check Daemon to report status.
feb 28 10:41:23 debian12 systemd[1]: systemd-fsckd.service: Deactivated successfully.
feb 28 10:51:02 debian12 systemd[1]: Started systemd-fsckd.service - File System Check Daemon to report status.
feb 28 10:51:32 debian12 systemd[1]: systemd-fsckd.service: Deactivated successfully
및 시스템 제어
~# systemctl status systemd-fsckd.socket
● systemd-fsckd.socket - fsck to fsckd communication Socket
Loaded: loaded (/lib/systemd/system/systemd-fsckd.socket; static)
Active: active (listening) since Wed 2024-02-28 15:26:31 -03; 16min ago
Triggers: ● systemd-fsckd.service
Docs: man:systemd-fsckd.service(8)
man:[email protected](8)
man:systemd-fsck-root.service(8)
Listen: /run/systemd/fsck.progress (Stream)
CGroup: /system.slice/systemd-fsckd.socket
~# systemctl status systemd-fsckd.service
○ systemd-fsckd.service - File System Check Daemon to report status
Loaded: loaded (/lib/systemd/system/systemd-fsckd.service; static)
Active: inactive (dead)
TriggeredBy: ● systemd-fsckd.socket
Docs: man:systemd-fsckd.service(8)
fsck의 디스크 검사로 인해 부팅 프로세스가 지연되었음을 사용자에게 알리고 진행 상황을 확인하기 위한 것입니다. 모든 리소스를 소진했지만 웹에서 아무것도 찾지 못했습니다. 일반적으로 내가 찾은 것은 시작 메시지를 숨기는 것뿐입니다.
~# more /etc/debian_version
10.13
~# uname -a
Linux debian 4.19.0-26-686-pae #1 SMP Debian 4.19.304-1 (2024-01-09) i686 GNU/Linux
관련없는 이유로 Debian 10 운영 체제에서 개발이 수행되었지만 Debian 12를 사용해도 동일한 결과가 나왔습니다.
PD: 잠재적으로 관련된 세부 사항: Debian 10 및 Debian 12는 Virtual Box의 가상 머신에서 테스트되었습니다.
추가 테스트:
첫 번째 사례:Virtual Box의 데비안 10. fsck 메시지가 나타나지 않고 로그에 다음이 표시됩니다.
root@debian:~# systemctl list-sockets | grep fsckd
/run/systemd/fsck.progress systemd-fsckd.socket systemd-fsckd.service
root@debian:~# journalctl -b /usr/lib/systemd/systemd-fsck
-- No entries --
root@debian:~# journalctl -b /usr/lib/systemd/systemd-fsckd
-- No entries --
root@debian:~# journalctl --boot | grep systemd-fsck*
mar 04 13:07:01 debian systemd[1]: Listening on systemd-fsckd.socket - fsck to fsckd communication Socket.
mar 04 13:07:01 debian systemd[1]: systemd-fsck-root.service - File System Check on Root Device was **skipped** because of an unmet condition check (**ConditionPathExists=!/run/initramfs/fsck-root**).
root@debian:~# cat /run/initramfs/fsck.log
Log of fsck -C -a -T -t ext4 /dev/sda1
Mon Mar 4 13:06:59 2024
/dev/sda1: clean, 212351/593344 files, 1708897/2371072 blocks
Mon Mar 4 13:06:59 202
사례 2:실제 PC(amd64)의 Debian 10. 이 경우 메시지는 표시되지만 프로세스가 끝날 때 몇 초 동안만 표시됩니다. fsck 중에는 아무것도 표시되지 않습니다.
root@Dell:~# systemctl list-sockets | grep fsckd
/run/systemd/fsck.progress systemd-fsckd.socket systemd-fsckd.service
root@Dell:~# journalctl -b /usr/lib/systemd/systemd-fsck
-- Logs begin at Mon 2024-03-04 15:58:16 -03, end at Mon 2024-03-04 19:25:01 -03. --
mar 04 15:58:21 Dell systemd-fsck[420]: e2fsck 1.44.5 (15-Dec-2018)
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 1: Checking inodes, blocks, and sizes
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 2: Checking directory structure
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 3: Checking directory connectivity
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 4: Checking reference counts
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 5: Checking group summary information
mar 04 15:58:22 Dell systemd-fsck[420]: /dev/sda1: 1034/69360 files (0.7% non-contigu
root@Dell:~# journalctl -b /usr/lib/systemd/systemd-fsckd
-- Logs begin at Mon 2024-03-04 15:58:16 -03, end at Mon 2024-03-04 19:25:01 -03. --
-- No entries --
root@Dell:~# journalctl --boot | grep systemd-fsck*
mar 04 15:58:21 Dell systemd-fsck[420]: e2fsck 1.44.5 (15-Dec-2018)
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 1: Checking inodes, blocks, and sizes
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 2: Checking directory structure
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 3: Checking directory connectivity
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 4: Checking reference counts
mar 04 15:58:21 Dell systemd-fsck[420]: Pass 5: Checking group summary information
mar 04 15:58:22 Dell systemd-fsck[420]: /dev/sda1: 1034/69360 files (0.7% non-contiguous), 189933/276480 blocks
mar 04 15:59:01 Dell systemd[1]: systemd-fsckd.service: Succeeded.
root@Dell:~# cat /run/initramfs/fsck.log
Log of fsck -C -f -y -T -t ext4 /dev/sda2
Mon Mar 4 18:57:36 2024
e2fsck 1.44.5 (15-Dec-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda2: 673194/9551872 files (0.8% non-contiguous), 29651430/38200576 blocks
Mon Mar 4 18:58:11 2024
----------------
상황 3:실제 PC(amd64)의 Debian 10에는 grub 메뉴(Debian 및 Windows의 기타 부팅 가능한 파티션)에 여러 항목이 있습니다.
root@5VQU7SN:~# systemctl list-sockets | grep fsckd
/run/systemd/fsck.progress systemd-fsckd.socket systemd-fsckd.service
root@5VQU7SN:~# journalctl -b /usr/lib/systemd/systemd-fsck
-- Logs begin at Mon 2024-03-04 15:38:25 -03, end at Mon 2024-03-04 20:39:47 -03. --
-- No entries --
root@5VQU7SN:~# journalctl -b /usr/lib/systemd/systemd-fsckd
-- Logs begin at Mon 2024-03-04 15:38:25 -03, end at Mon 2024-03-04 20:39:47 -03. --
-- No entries --
root@5VQU7SN:~# journalctl --boot | grep systemd-fsck*
-- No entries --
root@5VQU7SN:~# cat /run/initramfs/fsck.log
Log of fsck -C -f -y -T -t ext4 /dev/sda6
Mon Mar 4 18:37:59 2024
e2fsck 1.44.5 (15-Dec-2018)
/dev/sda6: recovering journal
Clearing orphaned inode 15992282 (uid=1000, gid=1000, mode=0100644, size=32768)
Clearing orphaned inode 15991323 (uid=1000, gid=1000, mode=0100600, size=460)
Clearing orphaned inode 15990858 (uid=1000, gid=1000, mode=0100644, size=4132)
Clearing orphaned inode 15990852 (uid=1000, gid=1000, mode=0100600, size=131072)
Clearing orphaned inode 15990840 (uid=1000, gid=1000, mode=0100644, size=4132)
Clearing orphaned inode 15990827 (uid=1000, gid=1000, mode=0100644, size=4132)
Clearing orphaned inode 15990826 (uid=1000, gid=1000, mode=0100644, size=4132)
Clearing orphaned inode 15990859 (uid=1000, gid=1000, mode=0100644, size=4132)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (112010854, counted=112010689).
Fix? yes
Free inodes count wrong (28961618, counted=28961585).
Fix? yes
/dev/sda6: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda6: 292047/29253632 files (0.3% non-contiguous), 4981311/116992000 blocks
fsck exited with status code 1
Mon Mar 4 18:38:19 2024
----------------
문제가 상당히 복잡해지고 있는데 어디로 진행해야 할지 모르겠습니다. 전문적인 학생들이 이 문제를 해결하는 데 도움을 줄 수 있기를 바랍니다.
상태 업데이트:
기본 Plymouth 테마가 다른 컴퓨터에서도 작동한다는 것을 알았고 테마를 설치했을 때도 작동했습니다. 며칠 동안 grub, fsck 및 plymouth 구성을 확인했지만 차이점을 찾을 수 없었습니다. 해당 PC에서 /boot 디렉토리는 루트 디렉토리와 다른 파티션에 마운트되어 있다는 것을 알기 전까지는 말입니다. 각각 /boot를 사용하여 물리적 PC와 가상 PC 모두에 데비안을 처음부터 설치하세요. 효과가 있었어요! systemd-fsck 버그인가요?