เทคนิค Ntfs2btrfs สำหรับแปลงระบบไฟล์ NTFS เป็น Btrfs แบบโอเพนซอร์สในที่เดิม
(github.com/maharmstone)- Ntfs2btrfs เป็นเครื่องมือสำหรับแปลงระบบไฟล์ Microsoft NTFS ไปเป็นระบบไฟล์โอเพนซอร์ส Btrfs แบบ in-place และทำงานในลักษณะคล้ายกับ
btrfs-convertสำหรับ ext2 - ก่อนแปลง อิมเมจต้นฉบับจะถูกบันทึกไว้ที่
image/ntfs.imgเป็น สำเนาแบบ reflink และหากต้องการคงผลลัพธ์การแปลงไว้ สามารถลบอิมเมจนี้เพื่อคืนพื้นที่ได้ - บน Windows ให้รัน
ntfs2btrfs.exe D:\จาก Command Prompt แบบผู้ดูแลระบบ ส่วนบน Linux ให้รันntfs2btrfs /dev/sda1ด้วยสิทธิ์ root - ไม่ทำงานกับไดรฟ์บูตหรือไดรฟ์ที่มี pagefile ซึ่งกำลังใช้งานอยู่ และเมื่อใช้ WinBtrfs หากต้องการลบ subvolume
imageต้องปลดแฟล็ก readonly ก่อน - ขอบเขตที่รองรับรวมถึงไฟล์ ไดเรกทอรี symbolic link, security descriptor, alternate data stream, การ rollback ของ NTFS และการคง metadata ของ LXSS แต่ไม่รองรับไฟล์ที่เข้ารหัสและขนาดคลัสเตอร์ที่ผิดปกติ
Ntfs2btrfs ทำอะไร
- Ntfs2btrfs เป็นเครื่องมือสำหรับ แปลงแบบ in-place จากระบบไฟล์ NTFS ไปเป็น Btrfs
- อิมเมจต้นฉบับจะถูกบันทึกไว้ที่
image/ntfs.imgเป็น สำเนาแบบ reflink- หากต้องการคงผลลัพธ์การแปลงไว้ สามารถลบไฟล์นี้เพื่อคืนพื้นที่ได้
- แม้เครื่องมือจะระบุว่ามีความเสถียร แต่มีคำเตือนว่าผู้เขียนจะไม่รับผิดชอบหากเกิดปัญหา
- มีการเชื่อมโยงไปยัง WinBtrfs ซึ่งเป็นไดรเวอร์ระบบไฟล์ Btrfs สำหรับ Windows และเป็นโปรเจกต์ที่ควรดูประกอบ
- ใช้โค้ด ntfs-3g-system-compression ของ Eric Biggers ซึ่ง reverse engineer “WOF compressed data” ของ Windows 10
วิธีใช้งานและข้อจำกัด
- บน Windows ให้รันจาก Command Prompt แบบผู้ดูแลระบบ
ntfs2btrfs.exe D:\
- บน Linux ให้ระบุ block device ด้วย สิทธิ์ root
ntfs2btrfs /dev/sda1
- บน Windows ไม่สามารถแปลงเป้าหมายต่อไปนี้ได้
-
ไดรฟ์บูต
- ไดรฟ์ที่มี pagefile ซึ่งกำลังใช้งานอยู่
- หากใช้ WinBtrfs เมื่อต้องการลบ subvolume
imageต้องปลดแฟล็ก readonly ก่อน
-
ช่องทางการติดตั้ง
- บน Windows สามารถดาวน์โหลดไฟล์ Zip ล่าสุดจาก Releases page หรือใช้ Scoop ได้
- มีแพ็กเกจสำหรับ Linux distribution ต่าง ๆ
- สำหรับ distribution หรือระบบปฏิบัติการอื่น ต้องคอมไพล์เอง
การคอมไพล์และ dependency
- บน Windows ให้เปิดไดเรกทอรีซอร์สด้วย MSVC รุ่นใหม่ แล้วสั่ง Compile จาก
CMakeLists.txt - บน Linux ให้ build ด้วย
cmakeและmakemkdir buildcd buildcmake ..make
- การ build ต้องใช้ libfmt ซึ่งติดตั้งได้จาก package manager
- การรองรับการบีบอัดต้องใช้ zlib, lzo, zstd
- สามารถปิดการรองรับดังกล่าวได้ด้วยตัวเลือก CMake
WITH_ZLIB,WITH_LZO,WITH_ZSTD
- สามารถปิดการรองรับดังกล่าวได้ด้วยตัวเลือก CMake
ฟีเจอร์ที่รองรับ
- สามารถแปลงหรือคงรายการต่อไปนี้ไว้ได้
-
ไฟล์
-
ไดเรกทอรี
- symbolic link
- reparse point อื่น ๆ
- security descriptor
- alternate data stream
- attribute ของ DOS
- hidden, system เป็นต้น
- การ rollback ไปยังอิมเมจ NTFS ต้นฉบับ
- การคง metadata ของ LXSS
-
รายการที่ไม่รองรับ
- ไม่รองรับ extended attribute แบบเก่าของ Windows
- ไม่รองรับ alternate data stream ขนาดใหญ่ที่เกิน 16KB
- ไม่รองรับการคงแฟล็ก case-sensitivity
- ไม่รองรับขนาดคลัสเตอร์ที่ผิดปกติซึ่งไม่ใช่ 4KB
- ไม่รองรับ ไฟล์ที่เข้ารหัส
การเปลี่ยนแปลงสำคัญที่เห็นจากประวัติการเปลี่ยนแปลง
- รุ่นวันที่ 2025-06-16 แก้ปัญหาการคอมไพล์กับ GCC 15
- รุ่นวันที่ 2024-01-15 แก้ปัญหาการคอมไพล์ที่เกิดจาก GCC 14 เปิดใช้
-Werror=incompatible-pointer-typesเป็นค่าเริ่มต้น - รุ่นวันที่ 2023-05-01 แก้ปัญหาลำดับของ inline extent item และปัญหาค่าระดับของ metadata item
- ทั้งสองปัญหาระบุว่าไม่สามารถวินิจฉัยได้ด้วย
btrfs check - เปลี่ยนให้ข้าม ADS ที่มีชื่อยาวเกินไป
- ทั้งสองปัญหาระบุว่าไม่สามารถวินิจฉัยได้ด้วย
- รุ่นวันที่ 2022-08-12 รวมตัวเลือก
--no-datasum, การคง metadata ของ LXSS/WSL, การแก้การรู้จำ drive letter ตัวพิมพ์เล็ก และการแก้ความเสียหายเมื่อวางไฟล์ในพื้นที่ 1MB สุดท้าย เป็นต้น - รุ่นวันที่ 2021-09-23 เพิ่มการรองรับการบีบอัดของ Btrfs และการ rollback
- การบีบอัดรองรับ zlib, lzo, zstd
- hash algorithm รองรับเพิ่มเป็น
xxhash,sha256,blake2 - รองรับ security descriptor สไตล์ NT4 ด้วย
- ปรับปรุงความเร็วการแปลงของ volume ที่มี inode จำนวนมาก
- แก้บั๊กความเสียหายของระบบไฟล์ที่
btrfs checkตรวจจับไม่ได้ด้วย
- รุ่นวันที่ 2021-01-05 รวมการแก้ปัญหาเกี่ยวกับการบีบอัด NTFS, “WOF compressed data” และ sparse file
กรณีบูต Windows จาก Btrfs
- ระบุว่าสามารถบูต Windows จาก Btrfs ที่แปลงด้วยเครื่องมือนี้ได้ หากเงื่อนไขเหมาะสม
- มีการเชื่อมโยงไปยังโปรเจกต์ที่เกี่ยวข้องคือ Quibble
1 ความคิดเห็น
ความเห็นจาก Hacker News
ลิงก์ฝั่ง Quibble ที่ วิศวกรรมย้อนกลับ Windows kernel bootloader แบบเปิดเผยและขยายต่อได้ น่าสนใจกว่ามาก: https://github.com/maharmstone/quibble
ถ้าจะทำแบบนี้บน ZFS ก็น่าจะเพิ่มเลเยอร์ที่อ่านฟอร์แมตไฟล์ซิสเต็มอื่นแล้วสังเคราะห์ ZFS block pointers ขึ้นมา
แบบนั้น ZFS ก็จะอ่านไฟล์ซิสเต็มอื่นได้ และค่อย ๆ เขียนทับใหม่ทั้งหมดระหว่างกระบวนการเขียน หาก ZFS มีความสามารถในการเขียน block pointer ใหม่ ก็น่าจะบังคับให้มันเขียนใหม่ทั้งชุดเพื่อจบการแปลงได้ แต่ก่อนหน้านี้เคยมีคนอธิบายไว้ว่า ZFS ไม่ใช่ไฟล์ซิสเต็มแบบ content-addressable storage (CAS) ที่แท้จริง จึงไม่มีความสามารถแบบนั้นและก็ไม่น่าจะมีได้
ถ้ามีใครใช้ BTRFS อยู่ อยากรู้ว่าช่วงนี้เสถียรภาพเป็นยังไงบ้าง? เมื่อก่อนเห็นกรณีน่ากลัวเยอะมาก
ไม่เคยมีปัญหาเลย แต่เรื่องน่ารำคาญคือพื้นที่ว่างที่ BTRFS คิดกับที่ส่วนอื่นของระบบปฏิบัติการคิดไม่ตรงกันตลอด ถึงอย่างนั้นก็แทบไม่เคยกลายเป็นปัญหาจริง
ถ้าไม่ใช่งานโหลดฐานข้อมูล ก็แทบไม่เข้าใจเลยว่าทำไมจะต้องใช้ไฟล์ซิสเต็มอื่น มองว่ามันเป็นไฟล์ซิสเต็มตัวแทนของ Linux ไปแล้ว
พยายามเข้าไปซ่อมพาร์ทิชันที่เสียจากสภาพแวดล้อมติดตั้งแบบขนานแล้ว แต่ไม่ช่วยอะไร
ฉันต้องการสิ่งนี้เมื่อ 2 เดือนก่อน ต้องฟอร์แมตฮาร์ดดิสก์ที่มีข้อมูล มากกว่า 10TB จาก NTFS
เป็นโปรเจกต์ที่ยอดเยี่ยม
ถ้ารองรับไฟล์ที่ใช้ การบีบอัด LZX ด้วยก็คงน่าทึ่งมาก
มันไม่เหมือนการบีบอัดไฟล์สมัย Windows 2000 และเป็นฟีเจอร์ที่ต้องเปิดด้วย
compact.exe /C /EXE:LZX (filename)https://github.com/search?q=repo%3Amaharmstone%2Fntfs2btrfs%...
เคยลองใช้เมื่อก่อน แล้วผลออกมาเป็น ดิสก์แบบอ่านอย่างเดียว หวังว่าตอนนี้จะดีขึ้นแล้ว
ระดับของ ความบ้าบิ่น ที่เห็นตรงนี้ทะลุกราฟไปเลย
วิธีมาตรฐานคือจองไฟล์ขนาดใหญ่ไว้ในไฟล์ซิสเต็มเดิมสำหรับเมทาดาทาของไฟล์ซิสเต็มใหม่ จากนั้นไล่ดูทุกไฟล์ในไฟล์ซิสเต็มเดิมแล้วใช้
fiemap()เพื่อสร้าง extent ใหม่ที่ชี้ไปยังข้อมูลเดิม การเขียนจะเกิดขึ้นเฉพาะในพื้นที่ที่จองไว้superblock จะถูกเขียนทับเป็นอย่างสุดท้ายเท่านั้น และก่อนถึงจุดนั้นก็ตรวจสอบได้ว่าเนื้อหาของไฟล์ซิสเต็มเดิมกับใหม่ตรงกัน
ตอนนั้นฉันเคยไปยุ่งกับมันและตามเจอบั๊กแย่ ๆ อยู่หลายตัว หวังว่าตอนนี้จะเสถียรกว่าเดิม
อย่างที่คนอื่นพูดกัน มันทำอย่างเป็นระบบในระดับใหญ่ได้ แต่ก็แน่นอนว่าต้องระวังมาก
“WinBtrfs เป็นไดรเวอร์ Windows สำหรับไฟล์ซิสเต็ม Linux รุ่นถัดไป Btrfs มันถูกเขียนขึ้นใหม่ทั้งหมดตั้งแต่ต้น ไม่มีโค้ดจาก Linux kernel และควรทำงานได้บนทุกเวอร์ชันตั้งแต่ Windows XP เป็นต้นไป อีกทั้งยังถูกรวมเป็นส่วนหนึ่งของระบบปฏิบัติการเสรี ReactOS ด้วย”
ข้อความนี้ยกมาจากหน้าของผู้ดูแล ntfs2btrfs
https://github.com/maharmstone/btrfs
รู้ว่านี่เป็นคนละกรณี แต่เวลาที่ใส่ลงไปกับข้อมูลนั้นมีค่ามากกว่าดิสก์ใหม่เยอะ สำหรับฉันมันไม่คุ้มจะรับความเสี่ยง ถ้าข้อมูลไม่สำคัญมากหรือมีแบ็กอัปดีอยู่แล้ว และอยากช่วยจับบั๊ก ก็คงพอลองได้
มันเจ๋งมาก แต่คงมีคนจำนวนมากที่เพิ่งมารู้เรื่องนี้หลังจากเพิ่งจัดการ ฟอร์แมตไดรฟ์ NTFS ที่ผัดวันประกันพรุ่งมา 2 ปี เสร็จไปอย่างน้อยสักสัปดาห์แล้ว