Skip to content
NTFS2exFAT

NTFS2exFAT 작동 방식

다섯 단계이며, 어느 단계도 건너뛰지 않습니다. 이 페이지에서는 각 단계에서 데이터에 어떤 일이 일어나는지, 실수를 막아 주는 검사가 무엇인지 설명합니다.

다섯 단계

1. 드라이브 검사 (읽기 전용)

앱은 아무것도 변경하지 않고 드라이브를 스캔합니다. 파일과 폴더 수를 세고, exFAT에서 허용하지 않는 이름을 표시하며, System Volume Information과 $RECYCLE.BIN 같은 시스템 폴더는 건너뜁니다. 또한 드라이브가 보고하는 사용 공간과 macOS가 실제로 볼 수 있는 파일을 비교합니다. 차이가 크면 일부 데이터가 macOS에 보이지 않을 수 있다는 경고입니다.

  • 드라이브에는 아무것도 기록하지 않습니다
  • 읽을 수 없는 항목은 조용히 건너뛰지 않고 목록으로 보여줍니다
  • 필요한 백업 공간을 확인할 수 있습니다

2. 체크섬과 함께 백업

파일을 선택한 폴더로 복사합니다. 각 파일을 복사하는 동안 SHA-256을 계산합니다. 진행 상황은 추가 전용 매니페스트에 저장되므로 일시 정지하고, 종료하고, 다시 이어서 할 수 있습니다.

  • 백업은 지워질 드라이브에 둘 수 없습니다
  • 대소문자를 구분하지 않는 볼륨에서도 백업 경로가 충돌하지 않도록 합니다
  • 파일은 임시 이름으로 기록되고 완료되었을 때만 이름이 바뀝니다

3. 백업 검증

모든 백업 파일을 캐시를 거치지 않고 디스크에서 다시 읽어 원본에서 계산한 체크섬과 비교합니다. 1바이트만 달라져도 검사에 실패합니다.

  • 메모리가 아니라 디스크에서 읽습니다
  • 실패하면 포맷 단계 전에 진행이 중단됩니다

4. 보호된 삭제

다음 조건이 모두 충족될 때만 포맷 단계를 사용할 수 있습니다. 백업이 완전히 검증되었고, 백업 파일이 올바른 크기로 여전히 존재하며, 드라이브의 볼륨과 디스크 식별 정보 및 크기가 같고, 백업이 그 드라이브에 있지 않으며, 정확한 드라이브 이름을 입력한 경우입니다. 앱은 드라이브를 건드리기 전에 삭제를 시작한다는 사실을 기록하므로 중단되어도 나중에 알아볼 수 있습니다.

  • 외장 드라이브만 표시됩니다
  • 포맷 명령은 백업한 바로 그 볼륨을 대상으로 합니다
  • 포맷에 권한이 필요하면 macOS가 사용자에게 묻습니다

5. 다시 복사하고 검증

모든 파일을 새 exFAT 볼륨으로 복사한 뒤 다시 읽어 체크섬을 비교합니다. exFAT에서 허용하지 않는 이름은 변경되어 목록에 표시됩니다. 최종 보고서는 백업 옆에 저장됩니다.

  • 손상된 백업 파일은 새 드라이브로 복사되지 않습니다
  • 백업은 사용자가 삭제할 때까지 유지됩니다

여기서 “검증됨”의 의미

파일을 기록한 뒤 드라이브에서 다시 읽은 내용이 원본과 같은 SHA-256을 생성하면 검증된 것으로 간주합니다. 앱은 파일 크기나 날짜만으로 판단하지 않습니다. 유일한 예외는 ._*라는 이름의 macOS 메타데이터 파일입니다. exFAT으로 복사한 뒤 macOS가 이를 확장 속성으로 병합하므로, 기록되었다는 사실만 확인할 수 있고 다시 읽어 검증할 수는 없습니다.

파일 이름과 메타데이터

exFAT은 " * : < > ? \ | 문자, 제어 문자, 공백이나 점으로 끝나는 이름을 허용하지 않습니다. 이런 이름은 다른 문자로 바뀌어 보고서에 나열됩니다. 대소문자만 다른 이름은 서로 구별되도록 바뀝니다. 파일과 폴더의 수정 날짜는 유지됩니다.

솔직한 한계

macOS 내장 NTFS 리더는 Windows에서 허용하지 않는 이름의 파일을 숨기거나 이름을 바꿀 수 있습니다. NTFS2exFAT는 macOS가 보여주는 내용을 기준으로 작동합니다. 드라이브의 사용 공간이 보이는 파일보다 훨씬 크면 경고하지만, 숨겨진 개별 파일은 감지할 수 없습니다. 드라이브가 Mac 또는 Linux NTFS 드라이버로 기록되었다면 변환하기 전에 Windows나 NTFSTool 같은 ntfs-3g 기반 드라이버로 확인하세요.

내부 구조

변환 엔진은 Foundation과 CryptoKit 외에는 의존성이 없는 작은 Swift 라이브러리입니다. Mac 앱과 명령줄 도구가 이를 함께 사용합니다.

  • 매니페스트: 파일마다 경로, 크기, 체크섬, 상태를 담은 JSON 한 줄
  • 복사: 4 MiB 버퍼, 캐시를 거치지 않는 읽기 및 쓰기, fsync, 원자적 이름 변경
  • 동시성: 여러 파일을 동시에 처리하며, 작업자당 한 번에 큰 파일 하나
  • 안전 검사는 엔진 안에 있으므로 앱과 명령줄이 같은 규칙을 적용합니다

테스트 방법

엔진에는 단위 테스트(검증된 백업에서 1바이트를 바꿔 검사가 실패하는지 확인하는 테스트 포함)와, 실제 NTFS 디스크 이미지를 만들어 전체 변환을 실행하고 복원된 모든 파일을 SHA-256으로 비교하는 엔드 투 엔드 테스트가 있습니다. 실제 외장 드라이브에서의 테스트는 아직 진행 중이며, 이것이 베타인 이유 중 하나입니다.

명령줄이 더 편하신가요?

같은 엔진을 ntfs2exfat-cli로도 사용할 수 있습니다.

ntfs2exfat-cli list
ntfs2exfat-cli start disk4 ~/Backups
ntfs2exfat-cli backup ~/Backups/NTFS2exFAT-<job>
ntfs2exfat-cli erase ~/Backups/NTFS2exFAT-<job> --confirm "MY DRIVE"
ntfs2exfat-cli restore ~/Backups/NTFS2exFAT-<job>

GitHub 소스 →

드라이브를 바꿀 준비가 되셨나요?