많은 링크를 발견했지만 거의 모든 것이 수정 이유를 지적하고 있습니다.파일 시스템 -ext4 : 응용 프로그램이 손상된 수퍼 블록
USB 카드 판독기를 통해 PC에 연결된 sd 카드에 7GB ext4 파티션을 만들었습니다. 언급 된 파티션 (/ dev/sdc2)에 10488576 바이트를 쓰는 응용 프로그램이 있습니다. 응용 프로그램 후 파일 시스템이 손상 찾고 실행
#fsck.ext4 -v /dev/sdc2
e2fsck 1.42.8 (20-Jun-2013)
ext2fs_open2: Bad magic number in super-block
fsck.ext4: Superblock invalid, trying backup blocks...
Superblock has an invalid journal (inode 8).
Clear<y>? no
fsck.ext4: Illegal inode number while checking ext3 journal for /dev/sdc2
/dev/sdc2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdc2: ********** WARNING: Filesystem still has errors **********
#dumpe2fs /dev/sdc2
dumpe2fs 1.42.8 (20-Jun-2013)
dumpe2fs: Bad magic number in super-block while trying to open /dev/sdc2
Couldn't find valid filesystem superblock.
응용 프로그램은 단순히 (내가 정확한 코드를 게시 할 수 없습니다) 다음과 같은 것을 사용하고 있습니다 :
char *write_buf; //declared in header
write_buf = (char *) malloc(size) // where size = 10488576. This allocation is happening in function a() called from main
char *buf; // declared locally in function b()
buf = write_buf; // in function b()
write(fd,buf,size); // in function b()
파일 시스템의 블록 크기는 4K입니다. 백업 수퍼 블록 (32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632) 추가 정보가 필요하면 알려주십시오. 이 부패를 일으킬 수있는 것이 무엇인지 이해해야합니다. 응용 프로그램 코드에 문제가있을 수 있다는 점이 매우 긍정적입니다.
EDIT:
나는 차 수퍼 블록 0에서 시작하고, write()
전에 lseek의() 호출은 또한 수퍼 정보를 덮어 쓸 것 0-SEEK_SET
을하고있는 것을 볼 수 있습니다. write()
전에 superblock에서 멀리 시도해 보겠습니다.
EDIT
: 나는 위에서 언급 한대로이 문제를 해결했습니다. I 그룹 0 아래 있었다 dumpe2fs O/P에 따라 :
Group 0: (Blocks 0-32767)
Checksum 0x8bba, unused inodes 8069
Primary superblock at 0, Group descriptors at 1-1
Reserved GDT blocks at 2-474
Block bitmap at 475 (+475), Inode bitmap at 491 (+491)
Inode table at 507-1011 (+507)
24175 free blocks, 8069 free inodes, 2 directories, 8069 unused inodes
Free blocks: 8593-32767
Free inodes: 12-8080
.
'/ dev/sdc2 '에서 마운트 된 ext4 파일 시스템에있는 파일에 10488576 바이트를 쓰거나 실제로/dev/sdc2를 열어서 쓰고 있습니까 ? – 6EQUJ5
두 번째 경우 정의에 따라 파일 시스템이 손상 될 수 있습니다 ... – 6EQUJ5
파티션에 원시 데이터를 쓰면 파티션이 파손됩니다. 마운트하는 소프트웨어가 명확한 매직 번호를 포함하여 오버 헤드를 모두 덮어 씁니다. pick up.) – Happington