1 điểm bởi GN⁺ 2024-12-01 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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-convert dành cho ext2
  • Trước khi chuyển đổi, ảnh gốc được lưu tại image/ntfs.img dướ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ạy ntfs2btrfs /dev/sda1 vớ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 image trướ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.img dướ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 cmakemake
    • mkdir build
    • cd build
    • cmake ..
    • 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

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
  • 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 check khô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

 
GN⁺ 2024-12-01
Ý 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ợ

    • Vì đây là mặc định của openSUSE nên tôi đã dùng trên PC chính và laptop vài năm nay, và nhận ra snapshot là tính năng mà tôi không biết mình từng muốn
      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 đề
    • Tôi đã dùng chỉ BTRFS trên laptop cá nhân, máy chủ và thiết bị nhúng hơn 10 năm, chưa từng gặp vấn đề dù chỉ một lầ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 đã dùng trên thiết bị cá nhân và cho sao lưu btrbk vài năm nay, không gặp vấn đề
    • Chưa đầy một năm trước, nó đã nổ tung trên Tumbleweed khi đĩa bị đầy
      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
    • Btrfs đang gặm nhấm dữ liệu của tôi dần dần. Một số sector của các tệp nhỏ hoặc tệp lớn ngẫu nhiên bị đổi toàn bộ thành giá trị null
  • 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)

  • 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 đồ

    • Không nguy hiểm như bạn nghĩ đâ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ước
      Superblock 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
    • Vài năm trước thì nó gần giống mức tung hứng cưa máy hơn: https://github.com/maharmstone/ntfs2btrfs/issues/9
      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
    • Apple cũng đã làm điều tương tự từ HFS+ sang APFS trên hàng tỷ bản triển khai OS X/iOS thực tế
      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
    • Đây không phải btrfs của Linux
      “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ừng thấy Windows hỏng hai lần vì nâng cấp tại chỗ, nên tôi sẽ đơn giản mua đĩa hoặc máy tính mới rồi bắt đầu lại
      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