파일의 사본을 하나만 유지하는 파일 시스템이 있습니까? 다른 사본은 참조 일 뿐입니 까?


18

질문이 정확하지 않을 수 있으므로 더 자세히 설명하려고 노력할 것입니다.

여러 가지 이유로 Linux 파일 시스템에 동일한 파일 의 사본이 많이 있습니다. 그들 중 다수는 꽤 큽니다.

말 내가 가진 /path/to/some.file이 파일의 사본 /other/path/file.name/yet/another/path/third.copy. 말 그대로 이러한 두 파일이 원본에 대한 참조로 작동하는 파일 시스템이 있는지 궁금합니다. 당연히 사용자가 그중 하나를 수정하면 오직 독립적 인 파일이됩니다.

추신. 링크를 사용하여 이것이 (부분적으로) 이루어질 수 있다는 것을 알고 있습니다. 그러나 파일 시스템에서 투명하게 처리하기 위해 위에서 설명한이 기능을 원합니다.


아직 완벽한 답은없는 것 같으므로 파일을 하드 링크로 바꾸는 스크립트 (아마도 cron에서 실행)를 작성해보십시오 (또는 일부 경우에는 안전 링크 인 경우). 어쨌든 모든 복제본이 어디에 있는지 모르는 경우 fdupes code.google.com/p/fdupes를 확인하십시오 .
Joe

1
일부 사용자가 복제본 중 하나에서 데이터를 변경하면 변경 후에 내용이 다르기 때문에 독립적 인 파일이되어야하기 때문에 ... 심볼릭 링크를 만들면 수정이 실제로 원본을 변경합니다. 원래 파일을 함수형 프로그래밍 언어의 값으로 생각하십시오. 수정하면 문자 그대로 새로운 객체가 생겨 참조됩니다.
DejanLekic

확인. 단지 몇 가지 아이디어 : 사용자와 이러한 파일 사이에 얻을 수있는 방법이 있습니까? 가능하면 링크 (심볼 또는 하드)로 시작한 다음 파일에 무언가를 쓰면 링크를 끊을 수 있습니다. 버전 제어 시스템과 같이 많은 공간을 절약하기 위해 차이점을 저장하기 위해 diff와 같은 것을 사용할 수도 있습니다. 그중 하나에 파일을 넣으면 차이점을 관리 할 수 ​​있습니다. 나는 vcs 시스템을 많이 사용하지 않았으므로 세부 사항을 모른다.
Joe

답변:


17

이 기능을 중복 제거 라고 합니다. 널리 사용되는 Linux 파일 시스템 (ext *)은 지원하지 않지만 ZFS는 부분적으로 지원합니다 . 또한 중복 제거 기능을 갖춘 파일 시스템 목록이 있지만 널리 사용되는 선택은없는 것으로 보입니다. Btrfs에는 계획된 기능입니다.

파일 시스템을 주기적으로 확인하고 적절한 하드 링크를 만드는 것이 현재로서는 할 수있는 최선이라고 생각합니다.


나는 BTRFS가 알 래디를 갖기를 바랐다. 나는 그들이이 기능을 가질 계획이라는 것을 몰랐다 – 좋은 소식! 감사!
DejanLekic

10

찾고자하는 주요 키워드는 "쓰기시 복사"입니다. BTRFS는 cp --reflink시스템에 현대적인 커널 및 코어 유틸리티 7.5가있는 경우 원하는 작업을 정확하게 수행 하고 원하는 작업을 수행하는 복제 작업을 수행합니다 . 위키 소스 또한, bedup 은 전체 볼륨에 복제본을 병합하는 도구입니다. CoW는 또한 btrfs의 스냅 샷 기술인 IIRC의 추진 기능입니다.


나는 알고 cp --reflink있지만 실제로 FS가 클론을 감지하고 대신 참조를 투명하게 사용하기를 원합니다. 나는 또한 bedup도구를 멀리합니다 .
DejanLekic

사용자 수준 프로세스가 한 파일에서 다른 파일을 읽고 쓸 때 FS 계층은 파일이 수정 된 사본이 아니라 정확한 사본이라는 것을 어떻게 알 수 있습니까? 그렇기 때문에 복제와 읽기 및 쓰기에 대한 별도의 ioctl이 있습니다. 파일을 복제하고 CoW를 사용하려는 응용 프로그램은 사용 가능한 경우 이러한 항목을 사용해야하며 그렇지 않은 경우에는 대체로 사용해야합니다. FS 레이어가 복사 발생을 감지하고 대신 CoW를 수행 할 수있는 신뢰할 수있는 마술 방법은 없습니다. 앱은 작업에 대한 적절한 호출 ( cp --reflink/ clone) 또는 별도의 도구를 사용하여 나중에 작업을 완료해야합니다 (베드 업).
afrazier

해시 (보다 안전한) 또는 crc + 타임 스탬프 값을 비교합니다. 쓰기는 FS가 파일의 독립적 인 사본을 작성하게합니다. Futhermore이 시스템은 ... 페이지 수준에 구현 될 MA
DejanLekic

그리고 커널에서 정확히 어디에서 이루어 집니까? 당신이 말하는 것은 간단한 문제가 아닙니다. 페이지 수준에서이를 수행하는 것도 가능하지만 인라인을 수행하려면 대량의 RAM이 필요합니다. ZFS는 데이터 TB 당 20GB 이상의 RAM이 될 수 있습니다. [Source ], OpenDedup 은 TB 데이터 당 8GB의 RAM을 원합니다. / 4k 페이지 [출처 ]. 성능 비용으로 L2ARC를 사용하여 ZFS의 요구 사항을 줄일 수 있습니다.
afrazier

1
백업 저장소에 대해 이야기하지 않는 한 WHS는 중복 제거를 수행하지 않습니다. 백업 소프트웨어의 경우 클라이언트는 대부분의 작업을 수행하고 서버로 데이터를 보내기 전에 서버에서 해시를 확인할 수 있습니다. 백업 서비스는 파일 시스템과 매우 다릅니다. 한 전략에 맞는 전략은 다른 전략에 적합하지 않을 수 있습니다.
afrazier

4

중복 제거 용량이 큰 백업용으로 설계된 온라인 파일 시스템 S3QL 이 있습니다.


어쨌든 유용한 정보를 얻으려면 로컬 파일 시스템에 +1이 필요하다고 말했을 것입니다.
DejanLekic

@DejanLekic, local : // ...과 같은 URL이 허용됩니다.
Daniel Fanjul

0

Zfs, btrfs, ext3cow, bcachefs (afaik, 아직 구현되지 않았을 가능성이 있습니다). Microsoft는 개발 중 하나를 가지고 있었지만 알 수없는 이유로 중단되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.