เทคนิค Ntfs2btrfs สำหรับแปลงไฟล์ซิสเต็ม NTFS เป็น Btrfs แบบ in-place
(github.com/maharmstone)Ntfs2btrfs
Ntfs2btrfs เป็นเครื่องมือสำหรับแปลงไฟล์ซิสเต็ม NTFS ของ Microsoft ไปเป็น Btrfs ซึ่งเป็นไฟล์ซิสเต็มโอเพนซอร์ส โดยมีลักษณะคล้ายกับ btrfs-convert ที่ใช้แปลง ext2 หลังการแปลง อิมเมจต้นฉบับจะถูกบันทึกไว้ที่ image/ntfs.img และหากต้องการคงผลการแปลงไว้ ก็สามารถลบไฟล์นี้เพื่อคืนพื้นที่ได้ แม้จะคิดว่ามีความเสถียร แต่หากเกิดปัญหาขึ้นจะไม่รับผิดชอบ ไดรเวอร์ไฟล์ซิสเต็ม Btrfs สำหรับ Windows อย่าง WinBtrfs ก็น่าสนใจเช่นกัน ขอขอบคุณ Eric Biggers ซึ่งสามารถทำ reverse engineering ของ "WOF compressed data" บน Windows 10 ได้สำเร็จ และมีการนำโค้ดของเขามาใช้
วิธีใช้งาน
- Windows: รัน
ntfs2btrfs.exe D:\จาก Command Prompt ที่เปิดด้วยสิทธิ์ผู้ดูแลระบบ- ใช้งานไม่ได้กับไดรฟ์บูต หรือไดรฟ์ที่มี page file กำลังใช้งานอยู่
- หากใช้ WinBtrfs ต้องปลด read-only flag ของซับโวลุม
imageก่อนจึงจะลบได้
- Linux: รัน
ntfs2btrfs /dev/sda1ด้วยสิทธิ์ root
การติดตั้ง
- Windows: ดาวน์โหลดไฟล์ Zip ล่าสุดจากหน้า Releases หรือใช้ Scoop
- Linux:
- Arch
- Fedora (ทำได้ด้วยความช่วยเหลือจาก Conan-Kudo)
- Gentoo - ใช้งานได้ในรูปแบบ sys-fs/ntfs2btrfs จากที่เก็บ guru
- Debian (ทำได้ด้วยความช่วยเหลือจาก alexmyczko)
- Ubuntu (ทำได้ด้วยความช่วยเหลือจาก alexmyczko)
- openSUSE (ทำได้ด้วยความช่วยเหลือจาก David Sterba)
- สำหรับดิสทริบิวชันหรือระบบปฏิบัติการอื่น ต้องคอมไพล์เอง
บันทึกการเปลี่ยนแปลง
- 20240115
- แก้ปัญหาการคอมไพล์บน GCC 14 (
-Werror=incompatible-pointer-typesถูกเปิดใช้เป็นค่าปริยาย)
- แก้ปัญหาการคอมไพล์บน GCC 14 (
- 20230501
- แก้ปัญหาลำดับข้อมูลที่
btrfs checkตรวจไม่พบ - แก้ปัญหาที่มีการเขียนรายการเมตาดาต้าด้วยค่าเลเวลที่ไม่ถูกต้อง
- ข้าม ADS ที่มีชื่อยาวเกินไป
- แก้ปัญหาลำดับข้อมูลที่
- 20220812
- เพิ่มออปชัน --no-datasum สำหรับข้ามการคำนวณ checksum
- คงเมตาดาต้า LXSS / WSL ไว้
- แก้ปัญหาที่ไม่รู้จักอักษรไดรฟ์ตัวพิมพ์เล็ก
- แก้ปัญหาความเสียหายเมื่อมีไฟล์อยู่ในเมกะไบต์สุดท้ายของดิสก์
- 20210923
- เพิ่มการรองรับการบีบอัด (Btrfs) (zlib, lzo, zstd)
- เพิ่มการรองรับอัลกอริทึมแฮชอื่น ๆ: xxhash, sha256, blake2
- เพิ่มการรองรับการย้อนกลับไปเป็น NTFS
- เพิ่มความเร็วในการแปลงสำหรับโวลุมที่มี inode จำนวนมาก
- แก้บั๊กเมื่อมีไฟล์ที่ fragmented อยู่ในตำแหน่งซูเปอร์บล็อก
- แก้ buffer overflow ขณะอ่าน security descriptor
- แก้ปัญหาความเสียหายของไฟล์ซิสเต็มที่
btrfs checkตรวจไม่พบ
- 20210523
- ปรับปรุงการจัดการไฟล์บีบอัดขนาดใหญ่
- 20210402 (รีลีสซอร์สโค้ดเท่านั้น)
- แก้ปัญหาการคอมไพล์บนสถาปัตยกรรมที่ไม่ใช่ amd64
- 20210105
- เพิ่มการรองรับการบีบอัดของ NTFS
- เพิ่มการรองรับ "WOF compressed data"
- แก้ปัญหาที่เกิดจาก sparse file
- แก้บั๊กอื่น ๆ
- 20201108
- ปรับปรุงการจัดการข้อผิดพลาด
- เพิ่มข้อความที่ดีกว่าเมื่อ NTFS เสียหายหรือไม่อยู่ในสถานะ clean
- ปรับปรุงการจัดการการย้ายตำแหน่ง
- 20200330
- รีลีสครั้งแรก
การคอมไพล์
- Windows: เปิดไดเรกทอรีซอร์สด้วย MSVC เวอร์ชันล่าสุด แล้วคลิกขวาที่ CMakeLists.txt เพื่อคอมไพล์
- Linux:
mkdir buildcd buildcmake ..make- ต้องติดตั้ง libfmt - น่าจะมีอยู่ในตัวจัดการแพ็กเกจ
- การรองรับการบีบอัดต้องใช้ zlib, lzo, zstd - น่าจะมีอยู่ในตัวจัดการแพ็กเกจ หากต้องการปิดใช้งาน ให้ดูออปชัน cmake: WITH_ZLIB, WITH_LZO, WITH_ZSTD
สิ่งที่ใช้งานได้
- ไฟล์
- ไดเรกทอรี
- symbolic link
- reparse point อื่น ๆ
- security descriptor
- alternate data stream
- แอตทริบิวต์แบบ DOS (ซ่อน, ระบบ ฯลฯ)
- ย้อนกลับไปยังอิมเมจ NTFS ต้นฉบับ
- คงเมตาดาต้า LXSS ไว้
สิ่งที่ใช้งานไม่ได้
- extended attribute แบบเก่าของ Windows (ไม่ได้ใช้งาน)
- ADS ขนาดใหญ่ (16KB ขึ้นไป) (ไม่ได้ใช้งาน)
- การคง case-sensitive flag
- ขนาดคลัสเตอร์ที่ผิดปกติ (ไม่ใช่ 4KB)
- ไฟล์ที่เข้ารหัส
สามารถบูต Windows จาก Btrfs ได้หรือไม่
- ได้ แต่ต้องตรงตามเงื่อนไขบางอย่าง ดู Quibble
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ระดับของคำว่า "hold-my-beer" สูงมาก
ตอนที่เคยลองก่อนหน้านี้ ดิสก์กลายเป็นอ่านได้อย่างเดียว
เจ๋งมาก แต่กว่าคนส่วนใหญ่จะได้ยินข่าวนี้ก็คงอย่างน้อยอีกหนึ่งสัปดาห์
กำลังคิดว่าจะเอาแนวคิดนี้ไปใช้กับ ZFS อย่างไร
ถ้ารองรับไฟล์ที่ใช้การบีบอัด LZX ได้ก็น่าทึ่งมาก
compact.exe /C /EXE:LZX (ชื่อไฟล์)NTFS มีความเสถียร เร็วกว่า btrfs และมีความสามารถเท่ากัน