나는 Ubuntu 16.04를 실행하는 매우 기본적인 시스템(이 질문은 Ubuntu에 국한되지 않고 ext4
파티션에 따라 다릅니다), HDD 1개, 몇 개의 파티션을 실행하고 있습니다.
sda1-EXT4-100G-/ sda2-EXT4-723.5G-/홈 sda3-NTFS-100G-(윈도우) sda5-스위치-8G
/home
파티션의 특정 디렉터리(문제를 일으키는 특정 폴더는 /home/path/to/broken/folder
) 에 있는 3-4개 파일 중 하나 에 액세스하려고 할 때마다 /home
파티션에 오류가 발생하고 읽기 전용으로 다시 마운트됩니다. dmesg
다음 오류가 표시됩니다.
EXT4-fs 오류(장치 sda2): ext4_ext_check_inode:497:inode1415 화: comm rm: pblk 0 오류 헤더/범위: 잘못된 매직 - 매직 0, 항목 0, 최대 0(0), 깊이 0(0) 장치 sda2-8에 대한 로깅을 중단합니다. EXT4-fs(sda2): 파일 시스템을 읽기 전용으로 다시 마운트합니다. EXT4-fs 오류(장치 sda2): ext4_ext_check_inode:497: inode1417 화: comm rm: pblk 0 오류 헤더/범위: 잘못된 매직 - 매직 0, 항목 0, 최대 0(0), 깊이 0(0) EXT4-fs 오류(장치 sda2): ext4_ext_check_inode:497: inode1416 화: comm rm: pblk 0 오류 헤더/범위: 잘못된 매직 - 매직 0, 항목 0, 최대 0(0), 깊이 0(0)
그래서 무슨 일이 일어나고 있는지 이해합니다. 일부 불량 블록이 오류를 일으키고 추가 손상을 방지하기 위해 읽기 전용 모드로 드라이브를 다시 마운트하고 있습니다. 오류를 실행 취소할 수 있기 때문에 이것이 특정 파일이라는 것을 알고 있습니다.
- 루트로 로그인
- 달리기
sync
- 중지
lightdm
(및 모든 하위 프로세스) /home
열려 있는 나머지 파일을 모두 찾아 중지하세요.lsof | grep /home
- 제거
/home
- 실행
fsck /home
(오류 수정) - 다시 설치
/home
모든 것이 다시 괜찮습니다. 읽고 쓰고,동일한 파일에 다시 액세스하려고 할 때까지를 클릭한 다음 전체 프로세스를 반복하여 다시 수정하세요.
파일에 액세스하려는 방법은 실행을 통해 이루어지기 ls /home/path/to/broken/folder
때문에 rm -r /home/path/to/broken/folder
드라이브의 해당 부분에 대한 모든 종류의 HDD 작업이 오류가 발생하고 다시 읽기 전용 상태로 전환되는 것 같습니다.
솔직히 저는 이 파일들에 관심이 없고 그냥 사라졌으면 좋겠어요. 전체 폴더를 삭제할 의향이 있지만 /home/path/to/broken/folder
이 작업을 시도할 때마다 실패하고 읽기 전용 상태로 멈춥니다.
하드 드라이브에서 실행 했는데 badblocks -v /dev/sda2
결과는 불량 블록 없이 깨끗했습니다. 어떤 도움이라도 여전히 크게 감사하겠습니다.
아직도 해결책을 찾고 있습니다. 다음은 도움이 될 수 있는 몇 가지 정보입니다.
$ debugfs -R 'stat <1415>' /dev/sda2 debugfs 1.42.13(2015년 5월 17일) Inode: 1415 유형: 일반 모드: 0644 플래그: 0x80000 세대: 0 버전: 0x00000000 사용자: 0 그룹: 0 크기: 0 파일 ACL: 0 디렉터리 ACL: 0 링크: 1 블록 수: 0 조각: 주소: 0 수량: 0 크기: 0 ctime: 0x5639ad86 -- 2015년 11월 4일 수요일 01:02:30 atime: 0x5639ad86 -- 2015년 11월 4일 수요일 01:02:30 시간: 0x5639ad86 -- 2015년 11월 4일 수요일 01:02:30 추가 inode 필드 크기: 0 범위:
이제 나는 이것을 직접 살펴보고 손상되지 않은 inode라고 의심되는 것과 비교했습니다.
$ debugfs -R 'stat <1410>' /dev/sda2 debugfs 1.42.13(2015년 5월 17일) Inode: 1410 유형: 일반 모드: 0644 플래그: 0x80000 세대: 0 버전: 0x00000000 사용자: 0 그룹: 0 크기:996 파일 ACL: 0 디렉터리 ACL: 0 링크: 1 블록 수: 0 조각: 주소: 0 수량: 0 크기: 0 ctime: 0x5639ad31 -- 2015년 11월 4일 수요일 01:01:05 atime: 0x5639ad31 -- 2015년 11월 4일 수요일 01:01:05 시간: 0x5639ad31 -- 2015년 11월 4일 수요일 01:01:05 추가 inode 필드 크기: 0 범위: (0):46679378
주요 차이점이라고 생각되는 부분을 굵게 표시했습니다. 손상되지 않은 다른 inode를 살펴본 결과 1410
0이 아닌 크기와 범위와 비슷한 내용이 표시되었습니다.
여기서 잘못된 헤더/범위가 의미가 있습니다. 범위가 없습니다. /home
전체 파티션을 다시 포맷하지 않고 이 문제를 어떻게 해결할 수 있습니까?
정말 저보다 더 똑똑한 사람에게 이런 질문을 건네준 것 같은 느낌이 듭니다. 식사(답)가 무엇인지 모르겠어요!
답변1
마침내 다른 사이트에서 다른 사람의 답변을 찾았습니다. inode를 0으로 설정하고 시스템을 다시 확인하면 됩니다. 그게 전부입니다!
debugfs -w /dev/sda2 :clri<1415> :clri<1416> :clri<1417> :큐 fsck -y /dev/sda2
이 문제가 발생하는 다른 사람을 위해 find
잘못된 설치에서 잘못된 inode가 사용되는 것을 확인한 다음 dmesg
잘못된 inode에서 오류를 확인했습니다.