(클래식 ext4 및/또는 다른 파일 시스템에서) 동일한 내용을 가리키는 두 개의 파일을 생성하여 한 파일이 수정되면 내용이 중복되어 두 파일이 달라지는 것이 가능합니까? 하드 드라이브 공간을 절약하는 것은 매우 실용적입니다.
문맥:많은 사람이 수정할 수 있는 중요한 동영상을 내 클라우드 서버에 공유하므로 어떤 사람은 이 파일을 수정/삭제할 수도 있습니다... 이 파일의 백업 파일이 있는지 꼭 확인하고 싶기 때문에 이제 두 개의 디렉터리가 필요합니다. 유지 관리하려면 일반 nextcloud 디렉터리와 이를 저장하는 데 필요한 크기의 두 배인 "백업" 디렉터리가 필요합니다.
nextcloud 디렉터리 위에 git 저장소를 만들려고 생각 중입니다. 이렇게 하면 git add .
새 비디오를 추가할 때 백업 프로세스가 더 쉬워지지만 git
blob과 작업 디렉터리 사이의 공간은 여전히 두 배로 늘어납니다.
이상적으로는 결합할 수 있는 솔루션이 git
좋을 것입니다(예: 디스크 공간을 두 배로 늘리지 않고도 커밋, 체크아웃을 포함한 비디오 변경 기록을 생성할 수 있음).
그리고, 어떤 일을 하는지 궁금합니다.다양한 파일 시스템을 위한 솔루션(특히 스냅샷을 구현하지 않는 파일 시스템에 능숙한 경우) 전체 볼륨을 백업하는 것이 아니라 일부 특정 파일/폴더만 백업하고 싶기 때문에 LVM 스냅샷은 실제로 솔루션이 아닙니다.
답변1
쓰기 중 복사 파일 시스템(Btrfs, ZFS)에서는 예입니다.자식 첨부ext4에 접근할 수 있을 만큼 가깝습니다. mount --bind
LVM 지원 볼륨이나 Btrfs 파일 시스템을 다른 파일 시스템의 폴더에 오버레이 할 수 있습니다 .
답변2
다른 답변에서는 이를 명시적으로 언급하지 않은 것 같습니다. 예, btrfs에서 사용할 수 있습니다.정방향 링크하드링크보다는
- 하드 링크는 동일한 디스크 블록을 차지하는 동일한 파일에 대한 두 개의 다른 이름입니다.
- 참조 링크는 동일한 디스크를 가리키는 두 개의 서로 다른 파일입니다.
하드 링크가 수정되면 두 파일 모두 동일한 파일을 참조하므로 다른 파일 이름에도 수정 사항이 표시됩니다.
참조링크 수정시 다른 파일은 수정되지 않습니다. 편집 내용은 새 디스크 블록에 기록되며 두 파일의 변경되지 않은 부분은 여전히 동일한 디스크 블록을 참조하므로 공간이 절약됩니다.
두 개의 디렉토리 항목이 동일한 inode 항목을 참조하는 하드 링크와 달리 참조 링크에는 두 개의 inode 항목이 있으며 데이터 블록이 공유됩니다.
답변3
(클래식 ext4 및/또는 다른 파일 시스템에서) 동일한 내용을 가리키는 두 개의 파일을 생성하여 한 파일이 수정되면 내용이 중복되어 두 파일이 달라지는 것이 가능합니까? 하드 드라이브 공간을 절약하는 것은 매우 실용적입니다.
하드 링크는 이를 수행할 수 있습니다.만약에이러한 파일을 편집하는 사람은 누구나 새 파일을 만들고 원본 파일을 기반으로 이름을 바꾸는 방식으로 작업을 수행합니다. 새 파일이 한 이름에만 연결되고 다른 링크는 다시 쓰기로 덮어쓰기 때문에 링크가 끊어집니다.
문제는 일반적으로 프로그램이 동일한 inode의 데이터를 덮어쓸 것인지, 저장할 때 새 파일을 생성할 것인지 알기 어렵다는 것입니다.
"백업 복사본"을 읽기 전용으로 설정하여 수정할 수 없도록 하는 것이 도움이 될 수 있지만 여전히 링크를 삭제하고 동일한 이름을 다시 만들 수 있습니다. 그러나 프로그램이 해당 inode에 쓸 수 없으면 많은 오류가 발생할 수 있습니다.
따라서 하드 링크를 통한 파일 수준 중복 제거는 가능하지만 링크를 작성하는 프로그램을 제어하는 경우에만 가능한 것 같습니다.