경고: 파일 시스템 시스템에 오류가 있습니다. 노드 47322B43의 상위 항목을 수정할 수 없습니다. 상위 디렉터리 항목을 찾을 수 없습니다.

경고: 파일 시스템 시스템에 오류가 있습니다. 노드 47322B43의 상위 항목을 수정할 수 없습니다. 상위 디렉터리 항목을 찾을 수 없습니다.

경고: 파일 시스템 시스템에 오류가 있습니다. 노드 47322B43의 상위를 수정할 수 없습니다. 상위 디렉터리 항목을 찾을 수 없습니다.

부팅할 때마다 다음 오류가 발생하면서 Ubuntu 22.04.2 LTS(Jammy Jellyfish) OS가 설치되어 있습니다. 나는 여전히 이러한 오류가 발생하려고 시도했습니다 fsck -f /dev/sda2. 내 시스템을 고치는 방법을 제안해주세요 여기에 이미지 설명을 입력하세요

답변1

먼저 일반인의 관점에서 inode를 이해해 봅시다.

수행함으로써 ... 이 데모를 위해 선택한 파일 시스템은 다음과 같습니다.EXT2왜냐하면 그것은저널링메커니즘이므로 일부 inode 관련 문제를 입증할 목적으로 손상되기 쉽습니다.

"디스크" 이미지 파일을 만들어 보겠습니다.

$ truncate -s 10M myfilesystem

그리고 포맷하세요

$ mkfs.ext2 myfilesystem
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 2560 4k blocks and 2560 inodes

Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done

inode 수를 확인하십시오 ... and 2560 inodes. 이것은 이 디스크 파티션에 있는 이 파일 시스템의 영구적인 최대 수입니다. 파일 수는 얼마든지 생성할 수 있습니다.디렉토리를 포함한 모든 종류)를 해당 숫자(파일 시스템의 특수 inode 빼기) 그러나 이 파일 시스템에서는 해당 숫자를 초과할 수 없습니다.

마운트 지점을 만들고 해당 파일 시스템을 마운트해 보겠습니다.

$ mkdir mymount
$
$ mount myfilesystem mymount/
$
$ ls -la mymount/
total 24
drwxr-xr-x 3 root   root    4096 May  8 14:24 .
drwxr-xr-x 3 ubuntu ubuntu  4096 May  8 14:29 ..
drwx------ 2 root   root   16384 May  8 14:24 lost+found
$
$ df -ih mymount/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop1       2.5K    11  2.5K    1% /home/ubuntu/test/mymount

사용된 inode의 수를 확인하십시오 11. 이것은 특수 inode라고 하며 기본적으로 파일 시스템의 사전 정의된 특수 목적을 위해 예약/사용됩니다... 좀 더 사용해 보겠습니다.

$ touch mymount/file{1..2}
$
$ ls -lai mymount/
total 24
   2 drwxr-xr-x 3 root   root    4096 May  8 14:33 .
2552 drwxr-xr-x 3 ubuntu ubuntu  4096 May  8 14:29 ..
  12 -rw-r--r-- 1 root   root       0 May  8 14:33 file1
  13 -rw-r--r-- 1 root   root       0 May  8 14:33 file2
  11 drwx------ 2 root   root   16384 May  8 14:24 lost+found
$
$ df -ih mymount/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop1       2.5K    13  2.5K    1% /home/ubuntu/test/mymount

우리는 두 개의 파일을 생성하고 두 개의 inode를 더 사용하여 11 + 2 = 13.

그 중 하나를 해제해 보겠습니다.

$ rm mymount/file1
$
$ df -ih mymount/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop1       2.5K    12  2.5K    1% /home/ubuntu/test/mymount

이는 일반적 13 - 1 = 12으로 사용되는 inode이며 방금 해제한 inode는 필요할 때 재사용됩니다. inode는 재활용 가능합니다.

그것은 정상적인 조건에서입니다 ... 하지만 만약 우리가다른 껍질에지속적으로 파일을 열고 사용합니다.

$ tail -f mymount/file2
-

그런 다음 원래 셸로 돌아가 해당 파일을 삭제한 다음 즉시 파일 시스템을 비정상적으로 마운트 해제합니다.

$ rm mymount/file2 && umount -l myfilesystem
$
$ ls -lai mymount/
total 8
6425 drwxr-xr-x 2 root   root   4096 May  8 14:29 .
2552 drwxr-xr-x 3 ubuntu ubuntu 4096 May  8 14:29 ..

그런 다음 다시 마운트하십시오.

$ mount myfilesystem mymount/
$
$ ls -lai mymount/
total 24
   2 drwxr-xr-x 3 root   root    4096 May  8 14:44 .
2552 drwxr-xr-x 3 ubuntu ubuntu  4096 May  8 14:29 ..
  11 drwx------ 2 root   root   16384 May  8 14:24 lost+found
$
$ df -ih mymount/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop1       2.5K    12  2.5K    1% /home/ubuntu/test/mymount

파일이 실제로 삭제되었지만 inode가 해제되지 않았는지 확인하세요. 이는 파일 시스템 손상 "시뮬레이션"입니다. 마운트를 해제하고 확인해 보겠습니다.

$ umount myfilesystem
$
$ e2fsck myfilesystem
e2fsck 1.46.5 (30-Dec-2021)
myfilesystem was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Deleted inode 13 has zero dtime.  Fix<y>? yes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Inode bitmap differences:  -13
Fix<y>? yes
Free inodes count wrong for group #0 (2548, counted=2549).
Fix<y>? yes

myfilesystem: ***** FILE SYSTEM WAS MODIFIED *****
myfilesystem: 11/2560 files (0.0% non-contiguous), 170/2560 blocks

다른 셸을 닫고 다시 마운트하여 확인해 보겠습니다.

$ mount myfilesystem mymount/
$
$ df -ih mymount/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop1       2.5K    11  2.5K    1% /home/ubuntu/test/mymount

이제 inode가 어떻게 사용되는지에 대한 기본 사항을 알았습니다. 그리고 파일 시스템 검사를 트리거하기 위해 inode에서 발생할 수 있는 문제와 방법... 디스크를 연결/분리할 때 또는 시스템의 전원이 갑자기 꺼질 때에도 같은 일이 발생할 수 있습니다. 파일(특히 시스템 파일)은 시스템 프로세스에 의해 지속적으로 생성/삭제/업데이트됩니다. 디렉터리의 경우에는 일반 파일과 같은 핸들이 없기 때문에 일반적으로 프로세스에서 디렉터리를 열어 두는 것이 불가능하기 때문에 약간 적습니다. 메타 데이터가 업데이트/수정되는 동안 위의 상황이 발생한 경우 디렉터리 inode에서 발생할 수 있으며, 드물긴 하지만 디스크 드라이브 오류/악화로 인해 파일 시스템이 특정 블록에 대한 액세스를 잃을 때 발생할 수 있습니다.

그러나 대부분의 inode 문제는 파일 시스템 검사 유틸리티를 통해 자동으로 쉽게 해결될 수 있습니다.

질문으로 돌아가기

그러나 이러한 유틸리티가 경로를 잃어버리고 inode 관련 문제를 해결하는 방법을 모르는 경우가 있습니다. 특히 해당 도구가 inode 손상을 수정하는 데 사용하는 방법 중 하나는 실제로 메타 데이터이기 때문에 읽을 수 있는 유효한 메타 데이터가 없는 디렉터리의 경우입니다. 디렉토리 내용, 상위 등을 식별하는 데이터

포함하신 스크린샷으로 인해 텍스트를 읽고 복사하기가 약간 어렵습니다... 하지만 표시되는 것은 inode 4732284(아래에/usr/src/linux ... /net/ ...) 파일 시스템에서 디렉토리로 레이블이 지정되지만 부모와의 관계를 설명하는 일반적인 메타데이터가 부족하여 고아가 되고 일반적인 한 블록 공간을 차지하지 않고 오히려 4k공간을 차지하므로 0... NULL켜져 있는 동안 대부분의 파일 시스템 파일은 크기가 null/0이 허용되지만 디렉터리는 그렇지 않습니다.이 게시물그리고이 게시물상세 사항은.

이런 종류의 문제는,디스크 드라이브 오류/불량 및 성능 저하된 블록을 나타낼 수 있는 극적으로 증가하지 않는 경우, 큰 문제는 아니며 무해해야 합니다... 쉽게 제거하려면 사용하기만 하면 됩니다... 즉, 해당 디렉토리에 파일을 만든 다음 제거하여 메타 정보를 업데이트합니다. 전체 파일 시스템 블록 크기를 사용하여 돌아가면 약간 정상적으로 보입니다... 해당 디렉토리는 0예를 들어 출력에 크기가 표시되므로 쉽게 찾을 수 있어야 하며 ls -la, 사용한 후에는 4k다른 디렉토리와 마찬가지로 일반적인 블록 크기가 표시되어야 합니다. 동일한 파일 시스템에서 ... 그것이 정상으로 되돌리기에 충분하지 않다면 예를 들어 소유권을 설정하거나 해당 디렉토리 이외의 크기가 표시 될 때까지 chown root:root권한을 변경하여 더 많이 흔들어 보십시오.chmod 755ls -la0

그런 다음 포함된 파일 시스템을 마운트 해제하고 파일 시스템 검사 유틸리티를 다시 실행하면 이번에는 문제가 수정됩니다.

작동해야 하지만 작동하지 않는 경우 두 가지 대안이 있습니다.어느 하나다음과 같은 파일 시스템 디버거를 사용하여debugfs해당 inode 항목을 수동으로 수정/삭제하려면또는또는 데이터를 백업하고 해당 디스크 파티션을 다시 포맷합니다.

기술 참조:

관련 정보