파일 서버를 만들고 데이터를 정리하는 과정에 '중복파일'을 정리하기 어려울때

2테라 분량의 파일 서버를 만들고 데이타를 정리하는 과정에서 '중복 파일’들이 많고, 파일트리 구조가 복잡하며, 그 분량이 많아 사용자가 일일이 정리하기 어렵다면…(그리고 중복 파일은 굳이 중복해서 둘 필요가 없다면)

파일 서버를 만든 뒤 파일을 하나 씩 추가하면서 기존에 있는 파일 들 중 똑같은 ‘중복’ 파일이 있을 경우 파일을 복사하지 않고 '하드링크’를 생성하면 되지 않을까 생각을 해봤습니다.

이와 관련해서 두 가지 질문이 생겼습니다.

[code:17kaivso]
1. 검색의 효율화

: 기존에 넣은 파일들을 어떤 식으로 효율적으로 검색할 것인지(단순히 '명령어’를 사용할 것인지, '리스트’를 짜고 그 리스트 안에서 검색할 것인지)

2. '중복’의 기준

: 중복된 파일이라고 판단해볼 수 있는 근거가
a. 파일명
b. 용량
c. 수정날짜[/code:17kaivso]

등이 있을거 같습니다.

어떤 식으로 작업을 접근해 볼 수 있을까요?

자료들은 주로 '문서’와 ‘동영상’, '음악파일’같은 것입니다.

파일 트리가 아닌 태그 형식도 좋지 않을까요? 기존의 저장시스템은 사용하지 못하겠지만요…

파일 시스템에서 '태그형식’을 사용한다는 말이 어떤 의미이신거죠? 그리고 어떤 장점을 엿볼수 있을까요?

일회성 작업이면 시간은 좀 더 걸려도 중복 검사는 md5sum으로 하는 게 안전할 것 같습니다.

중복 파일을 검사하는 fdupes라는 프로그램이 있습니다.
이 프로그램의 경우, 파일크기와 MD5 Signature로 중복인지 체크합니다.

리스트는 어떻게 짜보는 것이 효율적일까요?

검색한 파일들을 순서대로

3메가 이상 혹은 mp3, avi같은 확장자를 조건으로 포함시켜 파일명과 경로를 txt에 저장한 뒤

다음 파일에서 파일 명 중에 중복파일이 txt에 저장된 리스트에 있을 때

같은 파일인지 확인하는 명령을 주면 될까요?

음…
opendedup은 어떻습니까?
중복파일을 정리하는 것이 아니라, 중복되지 않는 파일시스템 말이죠.

  1. 중복된 파일을 찾아서 일괄적으로 삭제한다.

  2. 기존의 디렉토리 파일 구조를 그대로 옮기면서 중복된 파일은 하드링크로 대체한다. 모든 파일이 원래 그 자리에 유지 되어야 한다.

둘 중의 어느 방법을 원하시는 건지 궁금 합니다.

이미 언급 되었지만 1의 용도로 fdupes같은 프로그램이 있습니다. 중복된 파일의 목록을 출력하거나 삭제하거나 할 수 있습니다.

[code:vip9p2vr]
$ fdupes /usr -r

... 생략 ...

/usr/local/lib/node_modules/learnyounode/node_modules/concat-stream/node_modules/bops/test/write.js
/usr/local/lib/node_modules/learnyounode/node_modules/through2-map/node_modules/terminus/node_modules/bops/test/write.js

/usr/local/lib/node_modules/learnyounode/node_modules/concat-stream/node_modules/bops/test/join.js
/usr/local/lib/node_modules/learnyounode/node_modules/through2-map/node_modules/terminus/node_modules/bops/test/join.js

/usr/local/lib/node_modules/learnyounode/node_modules/concat-stream/node_modules/bops/test/create.js
/usr/local/lib/node_modules/learnyounode/node_modules/through2-map/node_modules/terminus/node_modules/bops/test/create.js

/usr/local/lib/node_modules/learnyounode/node_modules/concat-stream/node_modules/bops/test/copy.js
/usr/local/lib/node_modules/learnyounode/node_modules/through2-map/node_modules/terminus/node_modules/bops/test/copy.js

/usr/local/lib/node_modules/learnyounode/node_modules/concat-stream/node_modules/bops/copy.js
/usr/local/lib/node_modules/learnyounode/node_modules/through2-map/node_modules/terminus/node_modules/bops/copy.js

/usr/local/lib/node_modules/learnyounode/.jshintrc
/usr/local/lib/node_modules/learnyounode/node_modules/workshopper/.jshintrc
[/code:vip9p2vr]

hardlink라는 프로그램도 있습니다. 중복된 파일을 찾아 하드링크로 대체 합니다.

[code:2r02twn2]$ hardlink --dry-run -v /usr/src/
... 생략 ...
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/arch/cris/include/arch-v32/arch/hwregs/iop/asm/iop_sw_mpu_defs_asm.h to /usr/src/linux-headers-3.11.0-12/arch/cris/include/arch-v32/arch/hwregs/iop/asm/iop_sw_mpu_defs_asm.h (-100.50 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/drivers/scsi/Kconfig to /usr/src/linux-headers-3.11.0-12/drivers/scsi/Kconfig (-64.33 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/Documentation/video4linux/extract_xc3028.pl to /usr/src/linux-headers-3.11.0-12/Documentation/video4linux/extract_xc3028.pl (-44.60 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/drivers/i2c/busses/Kconfig to /usr/src/linux-headers-3.11.0-12/drivers/i2c/busses/Kconfig (-28.65 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/sound/oss/Kconfig to /usr/src/linux-headers-3.11.0-12/sound/oss/Kconfig (-19.35 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/sound/soc/codecs/Kconfig to /usr/src/linux-headers-3.11.0-12/sound/soc/codecs/Kconfig (-9.88 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/sound/soc/pxa/Kconfig to /usr/src/linux-headers-3.11.0-12/sound/soc/pxa/Kconfig (-6.03 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/arch/mips/include/asm/mach-rc32434/rb.h to /usr/src/linux-headers-3.11.0-12/arch/mips/include/asm/mach-rc32434/rb.h (-2.12 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/arch/sh/include/asm/cmpxchg-grb.h to /usr/src/linux-headers-3.11.0-12/arch/sh/include/asm/cmpxchg-grb.h (-2.12 KiB)
[DryRun] Linking /usr/src/linux-headers-3.11.0-14/sound/soc/pxa/Makefile to /usr/src/linux-headers-3.11.0-12/sound/soc/pxa/Makefile (-2.12 KiB)
Mode: dry-run
Files: 37163
Linked: 12987 files
Compared: 87245 files
Saved: 48.21 MiB
Duration: 24.14 seconds
[/code:2r02twn2]

fdupes, hardlink 모두 우분투 저장소에 있습니다.

[quote="마잇":18lu0mni]
2. 기존의 디렉토리 파일 구조를 그대로 옮기면서 중복된 파일은 하드링크로 대체한다. 모든 파일이 원래 그 자리에 유지 되어야 한다.

둘 중의 어느 방법을 원하시는 건지 궁금 합니다.
[/quote:18lu0mni]

두번째 입니다.

파일트리는 그대로 넣으면서도 용량을 줄이기 위한 술수(?)이죠.

지인껄 만들어드리려구 하거든요.

hardlink로 대처한다는건…하드링크로 대처하면서 기존의 용량은 쑝~ 하고 비워준다는 말인가요?

[quote="protochaos":18lu0mni]
opendedup은 어떻습니까?
중복파일을 정리하는 것이 아니라, 중복되지 않는 파일시스템 말이죠.
[/quote:18lu0mni]
그러니까…
opendedup을 구축하고 자료를 때려넣으면 알아서 중복되는 파일은 처리된다는 말씀이신건가요?
opendedup.org 을 들어가봤습니다.

  1. 개인 파일 서버에서 구축해볼만한 규모인가요?

  2. 중복파일 처리 외에 또 어떤 장점이 있는지 여쭤보고 싶습니다.

[quote="loscane":5n3jyuxs][quote="마잇":5n3jyuxs]
2. 기존의 디렉토리 파일 구조를 그대로 옮기면서 중복된 파일은 하드링크로 대체한다. 모든 파일이 원래 그 자리에 유지 되어야 한다.

둘 중의 어느 방법을 원하시는 건지 궁금 합니다.
[/quote:5n3jyuxs]

두번째 입니다.

파일트리는 그대로 넣으면서도 용량을 줄이기 위한 술수(?)이죠.

지인껄 만들어드리려구 하거든요.

hardlink로 대처한다는건…하드링크로 대처하면서 기존의 용량은 쑝~ 하고 비워준다는 말인가요?[/quote:5n3jyuxs]

예 중복된 파일을 링크로 변경해서 결과적으로 사용량이 줄어 듭니다.

sdfs는 user Space Dededuplication File System 으로, 파일시스템 자체에서 중복처리를 한다는 것이죠.
opendedup 홈페이지에 적힌 feature 목록을 보면,
Scalability - SDFS can dedup a Petabyte or more of data. Over 3TB per gig of memory at 128k chunk size.
Speed - SDFS can perform deduplication/redup at line speed 350 MB/S+
VMWare support - Work with vms - can dedup at 4k block sized. This is required to dedup Virtual Machines effectively
Flexible storage - deduplicated data can be stored locally, on the network across multiple nodes, or in the cloud.
Inline and Batch Mode deduplication - The file system can dedup inline or periodically based on needs. This can be changed on the fly
File and Folder Snapshot support - Support for file or folder level snapshots.
이렇게 되어 있습니다.

주요 기능은 자동으로 중복 방지를 하거나, 주기적으로 중복파일을 제거한다는 것이죠.
파일이 저장될 때, 파일시스템 자체적으로 중복파일인지를 체크하여 링크로 잡던가 하겠지요.
추가적으로 파일이나 폴더에 대해 스냅샷을 만들 수 있다는 군요.
이것도 상당히 매력적이네요. 오히려 중복체크보다 더 유용할 수 있죠.
스냅샷을 만든다는 것은 그 스냅샷으로 되돌릴 수 있다는 것이고, 그 말은 바꿔 말하자면, 순간백업과 비슷한 효과를 가진다는 것입니다.
아마도, 스냅샷을 만든 파일을 변경 할 때, 파일의 물리적 내용을 변경하는 것이 아니라, copy-on-write와 같이
새로운 파일로 복제하여 내용을 저장하고, 기존의 내용에 대해서는 없어진 것 처럼 처리하지 않을까 싶네요.
그래서, 복구도 금방되지 않을 까 싶어요. 그런 것이 아니라면, 그냥 복사나 다를 것이 없으니까요.
그런 식이라면, 홈디렉토리등을 순간 스냅샷으로 만들고, 작업하고, 다시 순간 복구가 가능해지죠.
즉, 스냅샷->작업->이전으로 되돌리거나, 변경사항 적용
이렇게 하는 것을 아주 빠르게 처리할 수 있다는 말이겠죠.

저장소로 사용될 파일시스템에 대해서는 어찌 보면, 파일시스템의 속도 보다, 이런 순간 백업/복구의 속도가 더 중요할 수 있습니다.

[quote="protochaos":gb573ggy]sdfs는 user Space Dededuplication File System 으로, 파일시스템 자체에서 중복처리를 한다는 것이죠.
opendedup 홈페이지에 적힌 feature 목록을 보면,
Scalability - SDFS can dedup a Petabyte or more of data. Over 3TB per gig of memory at 128k chunk size.
Speed - SDFS can perform deduplication/redup at line speed 350 MB/S+
VMWare support - Work with vms - can dedup at 4k block sized. This is required to dedup Virtual Machines effectively
Flexible storage - deduplicated data can be stored locally, on the network across multiple nodes, or in the cloud.
Inline and Batch Mode deduplication - The file system can dedup inline or periodically based on needs. This can be changed on the fly
File and Folder Snapshot support - Support for file or folder level snapshots.
이렇게 되어 있습니다.

주요 기능은 자동으로 중복 방지를 하거나, 주기적으로 중복파일을 제거한다는 것이죠.
파일이 저장될 때, 파일시스템 자체적으로 중복파일인지를 체크하여 링크로 잡던가 하겠지요.
추가적으로 파일이나 폴더에 대해 스냅샷을 만들 수 있다는 군요.
이것도 상당히 매력적이네요. 오히려 중복체크보다 더 유용할 수 있죠.
스냅샷을 만든다는 것은 그 스냅샷으로 되돌릴 수 있다는 것이고, 그 말은 바꿔 말하자면, 순간백업과 비슷한 효과를 가진다는 것입니다.
아마도, 스냅샷을 만든 파일을 변경 할 때, 파일의 물리적 내용을 변경하는 것이 아니라, copy-on-write와 같이
새로운 파일로 복제하여 내용을 저장하고, 기존의 내용에 대해서는 없어진 것 처럼 처리하지 않을까 싶네요.
그래서, 복구도 금방되지 않을 까 싶어요. 그런 것이 아니라면, 그냥 복사나 다를 것이 없으니까요.
그런 식이라면, 홈디렉토리등을 순간 스냅샷으로 만들고, 작업하고, 다시 순간 복구가 가능해지죠.
즉, 스냅샷->작업->이전으로 되돌리거나, 변경사항 적용
이렇게 하는 것을 아주 빠르게 처리할 수 있다는 말이겠죠.

저장소로 사용될 파일시스템에 대해서는 어찌 보면, 파일시스템의 속도 보다, 이런 순간 백업/복구의 속도가 더 중요할 수 있습니다.[/quote:gb573ggy]

이런 파일시스템도 있었네요!