1 คะแนน โดย GN⁺ 2024-12-01 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

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 ถูกเปิดใช้เป็นค่าปริยาย)
  • 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 build
    • cd build
    • cmake ..
    • 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 ความคิดเห็น

 
GN⁺ 2024-12-01
ความคิดเห็นจาก Hacker News
  • ระดับของคำว่า "hold-my-beer" สูงมาก

    • เป็นสำนวนที่ใช้เมื่อจะทำอะไรที่เสี่ยงมากหรือท้าทายอย่างยิ่ง
  • ตอนที่เคยลองก่อนหน้านี้ ดิสก์กลายเป็นอ่านได้อย่างเดียว

    • หวังว่าตอนนี้จะดีขึ้นแล้ว
  • เจ๋งมาก แต่กว่าคนส่วนใหญ่จะได้ยินข่าวนี้ก็คงอย่างน้อยอีกหนึ่งสัปดาห์

    • คงจะเพิ่งมารู้หลังจากฟอร์แมตไดรฟ์ NTFS ที่ผัดวันประกันพรุ่งมา 2 ปีเสร็จแล้ว
  • กำลังคิดว่าจะเอาแนวคิดนี้ไปใช้กับ ZFS อย่างไร

    • น่าจะทำได้ด้วยการเพิ่มเลเยอร์ที่อ่านไฟล์ซิสเต็มชนิดอื่นแล้วสังเคราะห์ block pointer ของ ZFS
    • ถ้า ZFS มีความสามารถในการเขียน block pointer ใหม่ ก็น่าจะเขียนทั้งหมดใหม่เพื่อแปลงให้เสร็จได้
    • ZFS ไม่ใช่ไฟล์ซิสเต็มแบบ CAS ที่เหมาะสม จึงไม่สามารถมีความสามารถในการเขียน block pointer ใหม่ได้
  • ถ้ารองรับไฟล์ที่ใช้การบีบอัด LZX ได้ก็น่าทึ่งมาก

    • อย่าสับสนกับการบีบอัดไฟล์สมัย Windows 2000
    • เป็นฟีเจอร์ที่ต้องเปิดใช้ด้วยคำสั่ง compact.exe /C /EXE:LZX (ชื่อไฟล์)
  • NTFS มีความเสถียร เร็วกว่า btrfs และมีความสามารถเท่ากัน

    • จึงยากจะเข้าใจว่าทำไมบางคนถึงอยากแทนที่ NTFS