Công nghệ Ntfs2btrfs chuyển đổi tại chỗ hệ thống tệp NTFS sang Btrfs mã nguồn mở
(github.com/maharmstone)- Ntfs2btrfs là công cụ chuyển đổi tại chỗ hệ thống tệp Microsoft NTFS sang hệ thống tệp mã nguồn mở Btrfs, hoạt động theo cách tương tự
btrfs-convertdành cho ext2 - Trước khi chuyển đổi, ảnh gốc được lưu tại
image/ntfs.imgdưới dạng bản sao reflink; để giữ kết quả chuyển đổi, có thể xóa ảnh này để giải phóng dung lượng - Trên Windows, chạy
ntfs2btrfs.exe D:\trong Command Prompt với quyền quản trị viên; trên Linux, chạyntfs2btrfs /dev/sda1với quyền root - Công cụ không hoạt động với ổ đĩa khởi động hoặc ổ đĩa có pagefile đang được sử dụng; khi dùng WinBtrfs, cần gỡ cờ readonly của subvolume
imagetrước khi có thể xóa - Phạm vi hỗ trợ bao gồm tệp, thư mục, symbolic link, security descriptor, alternate data stream, rollback NTFS và bảo toàn metadata LXSS, nhưng không hỗ trợ tệp mã hóa và kích thước cluster bất thường
Ntfs2btrfs làm gì
- Ntfs2btrfs là công cụ chuyển đổi tại chỗ hệ thống tệp NTFS sang Btrfs
- Ảnh gốc được lưu tại
image/ntfs.imgdưới dạng bản sao reflink- Nếu muốn giữ kết quả chuyển đổi, có thể xóa tệp này để giải phóng dung lượng
- Công cụ được mô tả là ổn định, nhưng kèm lưu ý rằng tác giả không chịu trách nhiệm nếu xảy ra sự cố
- WinBtrfs, driver hệ thống tệp Btrfs cho Windows, cũng được liên kết như một dự án đáng tham khảo
- Công cụ sử dụng mã ntfs-3g-system-compression của Eric Biggers, người đã reverse engineering “WOF compressed data” của Windows 10
Cách sử dụng và hạn chế
- Trên Windows, chạy trong Command Prompt với quyền quản trị viên
ntfs2btrfs.exe D:\
- Trên Linux, chỉ định block device với quyền root
ntfs2btrfs /dev/sda1
- Trên Windows, không thể chuyển đổi các đối tượng sau
-
Ổ đĩa khởi động
- Ổ đĩa có pagefile đang được sử dụng
- Nếu dùng WinBtrfs, để xóa subvolume
image, trước tiên cần gỡ cờ readonly
-
Đường dẫn cài đặt
- Trên Windows, có thể tải tệp Zip mới nhất từ trang Releases hoặc dùng Scoop
- Có các gói cho từng bản phân phối Linux
- Với các bản phân phối hoặc hệ điều hành khác, cần tự biên dịch
Biên dịch và phụ thuộc
- Trên Windows, mở thư mục mã nguồn bằng phiên bản MSVC gần đây và chạy Compile trong
CMakeLists.txt - Trên Linux, build bằng
cmakevàmakemkdir buildcd buildcmake ..make
- Quá trình build cần libfmt, có thể cài qua trình quản lý gói
- Hỗ trợ nén cần zlib, lzo, zstd
- Có thể tắt các hỗ trợ tương ứng bằng tùy chọn CMake
WITH_ZLIB,WITH_LZO,WITH_ZSTD
- Có thể tắt các hỗ trợ tương ứng bằng tùy chọn CMake
Tính năng được hỗ trợ
- Có thể chuyển đổi hoặc bảo toàn các mục sau
-
Tệp
-
Thư mục
- Symbolic link
- Các reparse point khác
- Security descriptor
- Alternate data stream
- Thuộc tính DOS
- hidden, system, v.v.
- Rollback về ảnh NTFS gốc
- Bảo toàn metadata LXSS
-
Các mục không được hỗ trợ
- Không hỗ trợ extended attribute cũ của Windows
- Không hỗ trợ alternate data stream lớn vượt quá 16KB
- Không hỗ trợ bảo toàn cờ case-sensitivity
- Không hỗ trợ kích thước cluster bất thường không phải 4KB
- Không hỗ trợ tệp mã hóa
Những thay đổi chính thể hiện trong lịch sử thay đổi
- Bản phát hành 2025-06-16 sửa vấn đề biên dịch với GCC 15
- Bản phát hành 2024-01-15 sửa vấn đề biên dịch phát sinh khi
-Werror=incompatible-pointer-typesđược bật mặc định trong GCC 14 - Bản phát hành 2023-05-01 sửa vấn đề thứ tự của inline extent item và vấn đề giá trị level của metadata item
- Hai vấn đề này được ghi là không thể chẩn đoán bằng
btrfs check - Thay đổi để bỏ qua ADS có tên quá dài
- Hai vấn đề này được ghi là không thể chẩn đoán bằng
- Bản phát hành 2022-08-12 bao gồm tùy chọn
--no-datasum, bảo toàn metadata LXSS/WSL, sửa nhận diện ký tự ổ đĩa viết thường, sửa lỗi hỏng khi bố trí tệp trong vùng 1MB cuối, v.v. - Bản phát hành 2021-09-23 thêm hỗ trợ nén Btrfs và hỗ trợ rollback
- Nén hỗ trợ zlib, lzo, zstd
- Thuật toán băm được hỗ trợ thêm gồm
xxhash,sha256,blake2 - Cũng hỗ trợ security descriptor kiểu NT4
- Cải thiện tốc độ chuyển đổi với các volume có nhiều inode
- Cũng sửa lỗi gây hỏng hệ thống tệp mà
btrfs checkkhông phát hiện được
- Bản phát hành 2021-01-05 bao gồm các sửa lỗi liên quan đến nén NTFS, “WOF compressed data” và sparse file
Khi khởi động Windows từ Btrfs
- Việc khởi động Windows từ Btrfs đã chuyển đổi bằng công cụ này được mô tả là có thể nếu đáp ứng điều kiện phù hợp
- Quibble được liên kết như một dự án liên quan
1 bình luận
Ý kiến trên Hacker News
Liên kết về Quibble, một dự án dịch ngược bootloader kernel Windows theo cách công khai và có thể mở rộng, thú vị hơn nhiều: https://github.com/maharmstone/quibble
Nếu làm việc này trên ZFS, có lẽ sẽ thêm một lớp đọc định dạng hệ thống tệp khác và tổng hợp con trỏ khối ZFS
Như vậy ZFS có thể đọc hệ thống tệp khác, rồi trong quá trình ghi có thể từ từ ghi lại toàn bộ. Nếu ZFS có tính năng ghi lại con trỏ khối thì có thể bắt nó ghi lại toàn bộ để hoàn tất chuyển đổi, nhưng trước đây tôi từng giải thích rằng ZFS không phải là một hệ thống tệp lưu trữ định địa chỉ theo nội dung (CAS) đúng nghĩa, nên nó không có và cũng không thể có tính năng đó
Có ai ở đây dùng BTRFS cho biết độ ổn định hiện nay thế nào không? Trước đây tôi thấy khá nhiều câu chuyện đáng sợ
Chưa từng gặp vấn đề nào, nhưng khá phiền là dung lượng trống theo cách BTRFS nghĩ và theo cách phần còn lại của hệ điều hành nghĩ không phải lúc nào cũng khớp. Dù vậy thực tế hiếm khi thành vấn đề
Trừ workload cơ sở dữ liệu, tôi xem nó là hệ thống tệp tiêu biểu của Linux đến mức không hiểu vì sao còn dùng hệ thống tệp khác
Tôi đã cố truy cập phân vùng hỏng từ môi trường cài đặt song song để sửa nhưng vô ích
Tôi cần cái này 2 tháng trước. Tôi đã phải format một ổ cứng từ NTFS với hơn 10TB dữ liệu
Dự án rất hay
Tôi sẽ khá ngạc nhiên nếu nó hỗ trợ cả các tệp áp dụng nén LZX
Đây là thứ khác với nén tệp thời Windows 2000, và là tính năng phải bật bằng
compact.exe /C /EXE:LZX (filename)https://github.com/search?q=repo%3Amaharmstone%2Fntfs2btrfs%...
Trước đây tôi từng dùng thử và kết quả là đĩa chỉ đọc. Hy vọng giờ đã tốt hơn khi đó
Mức độ liều lĩnh thấy ở đây vượt khỏi mọi biểu đồ
Cách tiêu chuẩn là đặt trước một tệp lớn trong hệ thống tệp cũ để chứa metadata của hệ thống tệp mới, rồi duyệt qua mọi tệp trong hệ thống tệp cũ và dùng
fiemap()để tạo các extent mới trỏ tới dữ liệu hiện có. Việc ghi chỉ diễn ra trong vùng đã đặt trướcSuperblock chỉ bị ghi đè vào cuối cùng, và trước đó có thể xác minh nội dung của hệ thống tệp cũ và mới có giống nhau không
Khi đó tôi đã lần ra vài lỗi khá khó chịu khi mày mò cái này, hy vọng bây giờ nó ổn định hơn
Như những người khác nói, việc này có thể được thực hiện một cách có hệ thống ở quy mô lớn, nhưng tất nhiên vẫn cần thận trọng
“WinBtrfs là driver Windows cho Btrfs, hệ thống tệp Linux thế hệ mới. Nó được triển khai lại từ đầu và không chứa mã kernel Linux, đồng thời sẽ hoạt động trên mọi phiên bản từ Windows XP trở về sau. Nó cũng được đưa vào như một phần của hệ điều hành tự do ReactOS.”
Nội dung này lấy từ trang của người duy trì ntfs2btrfs
https://github.com/maharmstone/btrfs
Tôi biết đây là trường hợp khác, nhưng thời gian nằm trong số dữ liệu đó đáng giá hơn nhiều so với một ổ đĩa mới. Cá nhân tôi thấy không đáng để chấp nhận rủi ro. Nếu dữ liệu không quan trọng hoặc đã sao lưu tốt và bạn muốn góp phần bắt lỗi thì có thể thử
Thật sự rất hay, nhưng có lẽ phần lớn mọi người sẽ chỉ biết đến nó ít nhất một tuần sau khi đã hoàn tất việc format ổ NTFS mà họ trì hoãn suốt 2 năm