2014-06-10 5 views
0

많은 링크를 발견했지만 거의 모든 것이 수정 이유를 지적하고 있습니다.파일 시스템 -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에 따라 :

내가 * 4096 부탁해 파일 시스템이 손상받지 못하고있다 8593에 lseek의 한 그래서 쓰기 전에
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 

.

+0

'/ dev/sdc2 '에서 마운트 된 ext4 파일 시스템에있는 파일에 10488576 바이트를 쓰거나 실제로/dev/sdc2를 열어서 쓰고 있습니까 ? – 6EQUJ5

+1

두 번째 경우 정의에 따라 파일 시스템이 손상 될 수 있습니다 ... – 6EQUJ5

+0

파티션에 원시 데이터를 쓰면 파티션이 파손됩니다. 마운트하는 소프트웨어가 명확한 매직 번호를 포함하여 오버 헤드를 모두 덮어 씁니다. pick up.) – Happington

답변

0

나는 위에서 언급 한대로이 문제를 해결했습니다. I 그룹 0 아래 있었다 dumpe2fs O/P에 따라 :

나 파일 시스템이 손상받지 못하고있다 lseek * 4096.Now 8593에했던 그래서 쓰기 전에
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 

.

+0

답변을 수락 할 수 있도록 que가 닫힌 것으로 표시되어 여기에 응답되었습니다. –