2014-04-07 3 views
0

섹터/블록 레벨에서 파일의 세부 사항/내용을 보려면 명령이 있는지 알고 싶습니까? 의미, 다음과 같은 세부 사항을 원합니다 : 블록/섹터 레벨에 저장된 내용이 두 파일에 대해 동일한 내용인지 여부를 확인해야하는 2 개의 파일이 있습니다. 명령 또는 도구로 검사 할 수 있습니까? 너는 나를 올바른 길로 인도 해 줄 수 있니? 두 파일을 모두 알고 있는데 리눅스 운영 체제를 실행 중입니다블록 레벨/섹터 레벨에서 파일 내용보기

추가 정보 : 여기 내 상황이 있습니다. 두 개의 이미지 파일이 있습니다. 두 개의 이미지 파일이 블록/섹터 수준에 있는지보고 싶습니다.

  1. : 이미지 파일을 모두 .Assuming 같은 (커널 코드가있는 것 처음 몇 메가 바이트의)는 리눅스 운영 체제가 포함되어, 나는 모두의 처음 몇 MB가 same.So해야한다고 알고, 나는 다음과 같은했다

    ls -i web-test.img - 아이 노드를 13으로 가져옴

  2. debugfs/dev/sdb1

  3. STAT < 13> - (ETB0) : 33,409

  4. DD =/디바이스/sdb1로 success.txt = IBS = 4096 카운트 = 1을 스킵 = O/P는 33409.the 내용이없는 경우 명확한 txt.I 내용을 동일하게 볼 필요가. 간단한 단어에서

는 귀하의 회신을 기대 블록/섹터 수준

에서 두 파일의 이미지 파일 (커널 부분)에서 데이터의 처음 몇 메가 바이트를 읽어보십시오.

답변

0

편집 : 이미지 파일의 inode가있는 파일 시스템에서 가져옵니다. 그렇다면, 당신은 debugfs 안에서 그 inode 번호를 사용합니까? 따라서 이미지에서 inode 13에있는 파일이 무엇이든지간에 사용중인 이미지입니다. 그건 나에게 이상한 것 같다.

그러나 인간이 읽을 수없는 내용에 대해 혼란 스러울 수도 있습니다. 파일의 ASCII 표현을 보여줄 수있는 일종의 텍스트 편집기를 사용하고 있다고 가정합니다. 시각적으로 데이터를 검사하는 대신 md5sum을 사용하여 데이터의 체크섬을 만들거나 cmp과 같은 바이너리 diff 도구를 사용할 수 있습니다.

동일한 inode에 대한 두 개의 하드 링크가있는 경우 일련의 ioctlFIBMAP 요청을 사용할 수 있습니다. 그러면 블록 번호가 지정된 논리 블록 주소가 반환됩니다. 예를 들면 : 나는 4K 블록 크기의 파일 시스템 상에 8K 파일을 만들 경우

int block_count; 
struct stat statBuf; 
int block; 

fstat(fd, &statBuf); 

block_count = (statBuf.st_size + statBuf.st_blksize - 1)/statBuf.st_blksize; 

int i; 
for(i = 0; i < block_count; i++) { 
    block = i; 
    ioctl(fd, FIBMAP, &block) < 0) 
    printf("%3d %10d\n", i, block); 
} 

그래서 2 블록이 포함됩니다. 그런 다음 동일한 파일에 대한 두 번째 하드 링크를 만들고 동일한 inode에 대한 두 하드 링크 모두에서 FIBMAP 요청을 사용합니다. 논리 블록 주소는 다음과 일치합니다.

hardlink1: 
    0 51404606 
    1 51404607 

hardlink2: 
    0 51404606 
    1 51404607 
+0

귀하의 의견이 잘 렸습니다. 질문 자체를 추가 정보로 업데이트하려고 할 수 있습니다. – pughar