GN⁺: NTFS 파일 시스템을 오픈 소스 Btrfs로 인플레이스 변환하는 Ntfs2btrfs 기술
(github.com/maharmstone)Ntfs2btrfs
Ntfs2btrfs는 Microsoft의 NTFS 파일 시스템을 오픈 소스 파일 시스템인 Btrfs로 변환하는 도구임. 이는 ext2를 변환하는 btrfs-convert
와 유사함. 변환 후 원본 이미지는 image/ntfs.img
로 저장되며, 변환을 유지하고 싶다면 이를 삭제하여 공간을 확보할 수 있음. 안정적이라고 생각되지만, 문제가 발생할 경우 책임지지 않음. Windows용 Btrfs 파일 시스템 드라이버인 WinBtrfs도 관심을 가질 만함. Eric Biggers에게 감사의 말을 전하며, 그는 Windows 10의 "WOF 압축 데이터"를 성공적으로 역설계하였고, 그의 코드를 사용함.
사용법
-
Windows: 관리자 명령 프롬프트에서
ntfs2btrfs.exe D:\
실행- 부팅 드라이브나 사용 중인 페이지 파일이 있는 드라이브에서는 작동하지 않음
- WinBtrfs를 사용하는 경우
image
서브볼륨의 읽기 전용 플래그를 해제해야 삭제 가능
-
Linux: 루트 권한으로
ntfs2btrfs /dev/sda1
실행
설치
- Windows: Releases 페이지에서 최신 Zip 파일 다운로드 또는 Scoop 사용
-
Linux:
- Arch
- Fedora (Conan-Kudo 덕분에 가능)
- Gentoo - guru 저장소의 sys-fs/ntfs2btrfs로 사용 가능
- Debian (alexmyczko 덕분에 가능)
- Ubuntu (alexmyczko 덕분에 가능)
- openSUSE (David Sterba 덕분에 가능)
- 다른 배포판이나 운영 체제의 경우 직접 컴파일 필요
변경 로그
-
20240115
- GCC 14에서 컴파일 문제 수정 (
-Werror=incompatible-pointer-types
기본 활성화)
- GCC 14에서 컴파일 문제 수정 (
-
20230501
-
btrfs check
에서 진단되지 않는 순서 문제 수정 - 잘못된 레벨 값으로 메타데이터 항목이 작성되는 문제 수정
- 너무 긴 이름의 ADS 건너뜀
-
-
20220812
- 체크섬 계산을 건너뛰는 --no-datasum 옵션 추가
- LXSS / WSL 메타데이터 보존
- 소문자 드라이브 문자가 인식되지 않는 문제 수정
- 디스크 마지막 메가바이트에 파일이 있을 때 손상 문제 수정
-
20210923
- (Btrfs) 압축 지원 추가 (zlib, lzo, zstd)
- 다른 해시 알고리즘 지원 추가: xxhash, sha256, blake2
- NTFS로 롤백 지원 추가
- 많은 inode가 있는 볼륨의 변환 속도 증가
- 슈퍼블록 위치에 조각난 파일이 있을 때 버그 수정
- 보안 설명자를 읽을 때 버퍼 오버플로우 수정
-
btrfs check
에서 감지되지 않는 파일 시스템 손상 문제 수정
-
20210523
- 큰 압축 파일 처리 개선
-
20210402 (소스 코드 전용 릴리스)
- 비-amd64 아키텍처에서의 컴파일 문제 수정
-
20210105
- NTFS 압축 지원 추가
- "WOF 압축 데이터" 지원 추가
- 희소 파일로 인한 문제 수정
- 기타 버그 수정
-
20201108
- 오류 처리 개선
- NTFS가 손상되거나 깨끗하지 않을 때 더 나은 메시지 추가
- 재배치 처리 개선
-
20200330
- 초기 릴리스
컴파일
- Windows: 최신 MSVC 버전에서 소스 디렉토리를 열고, CMakeLists.txt를 오른쪽 클릭하여 컴파일
-
Linux:
-
mkdir build
-
cd build
-
cmake ..
-
make
- libfmt 설치 필요 - 패키지 관리자에 있을 것임
- 압축 지원은 zlib, lzo, zstd 필요 - 패키지 관리자에 있을 것임. 비활성화하려면 cmake 옵션 WITH_ZLIB, WITH_LZO, WITH_ZSTD 참조
-
작동하는 것
- 파일
- 디렉토리
- 심볼릭 링크
- 기타 재분석 지점
- 보안 설명자
- 대체 데이터 스트림
- DOS 속성 (숨김, 시스템 등)
- 원본 NTFS 이미지로 롤백
- LXSS 메타데이터 보존
작동하지 않는 것
- Windows의 오래된 확장 속성 (사용하지 않음)
- 큰 ADS (16KB 이상) (사용하지 않음)
- 대소문자 구분 플래그 보존
- 비정상적인 클러스터 크기 (4KB가 아님)
- 암호화된 파일
Btrfs로 Windows 부팅 가능 여부
- 가능하지만 특정 조건이 맞아야 함. Quibble 참조.
Hacker News 의견
-
"hold-my-beer" 수준이 매우 높음
- 매우 위험하거나 도전적인 행동을 할 때 사용하는 표현임
-
이전에 시도했을 때 읽기 전용 디스크가 되었음
- 개선되었기를 바람
-
매우 멋지지만, 사람들이 이 소식을 듣기까지 최소 일주일은 걸릴 것임
- 2년 동안 미뤄왔던 NTFS 드라이브 포맷을 마친 후에야 알게 될 것임
-
ZFS에 적용하는 방법을 생각 중임
- 다른 파일 시스템 유형을 읽고 ZFS 블록 포인터를 합성하는 레이어를 추가하는 방식으로 가능할 것임
- ZFS가 블록 포인터 재작성 기능이 있다면 전체를 재작성하여 변환을 완료할 수 있을 것임
- ZFS는 적절한 CAS 파일 시스템이 아니기 때문에 블록 포인터 재작성 기능을 가질 수 없음
-
LZX 압축이 적용된 파일을 지원한다면 매우 놀랄 것임
- Windows 2000 시대의 파일 압축과 혼동하지 말 것
- "compact.exe /C /EXE:LZX (파일명)" 명령어로 활성화해야 하는 기능임
-
NTFS는 안정적이고 btrfs보다 빠르며 동일한 기능을 가지고 있음
- 누군가가 NTFS를 대체하려는 이유를 이해하기 어려움