2016-08-05 7 views
3

같은 파일 시스템에있는 두 개의 매우 큰 파일, 예를 들어 ext3 또는 ext4를 연결하려는 경우 linux는 두 파일의 inode 직접/간접 포인터를 읽고 수정하여 프로그래밍 방식으로 API를 제공하며, 파일 크기와 수퍼 블럭 값? 그렇다면 api/headerfiles에 대한 설명서가 있습니까?동일한 리눅스 파일 시스템에서 inode 데이터 구조와 수퍼 블록을 수정하여 두 파일을 연결할 수 있습니까?

참고 : cat, tee 등의 Linux 이진 파일을 사용할 수 있다는 것을 알고 있지만 프로그래밍 방식으로이 문제를 해결하는 것이 좋습니다.

+3

을해야합니까? – dbush

+0

좋은 질문이에요. 가능하다면 수학을하고 블록을 다시 작성하면 정규 결합과 같게 만들거나 나쁘게 추측 할 수 있습니다. 파일 크기가 blocksize의 배수이면 가능합니까? – nohup

+0

이 작업이 지원되지 않는다고 생각합니다. 그게 정말 놀랄거야. – fuz

답변

3

예, 결과에 따라 을 의미하며, 작업을 수행하는 코드의 수준과 파일 시스템이 얼마나 낮은지를 나타냅니다. 특히 EXT3 & ext4에에 대한

  1. 낮은 수준, 비현실적 어렵다. cat foo bar | sponge foo에 해당하는 작업을 수행하려고하지만 메타 데이터를 읽거나 덮어 쓰지 않고 다른 작업을 수행한다고 가정합니다. 이 경우 foo은 정확한 블록 크기 여야하며, 두 파일의 inodes 및 dir 구조를 가져오고, rm bar의 파일 시스템을 마운트 해제하고, 을 적절히 조정하십시오. (dd 그리고 몇몇 16 진수 편집자), 다른 방법으로 난파하지 않는 방법으로. 어려운 파일 시스템에 따라 영향을 받거나 방해하는 다른 데이터 구조를 업데이트하거나 수정해야합니다.

    foo이 정확한 블록 크기가 아니면 결합 된 파일의 중간에 가비지 데이터가 있습니다.

  2. 속임수. in-line deduplication의 파일 시스템을 사용하십시오. Btrfs 해당 기능 첫 번째 파일의 크기가 파일 시스템의 블록 크기의 배수가 아닌 경우는 어떻게 someday.