วันอังคาร, พฤษภาคม 12, 2558

แปลง partition เป็น F2FS แบบข้อมูลไม่หาย | Convert Android partitions to F2FS without data lost.

เรื่องมันมีที่มา

    ตอนนี้ใช้ Oneplus One อยู่ ลง ROM CM 12.1 เป็น unofficial build ของ temasek
ตัวนี้ [ROM][Bacon][5.1.1][Linaro 4.9 & 5.1]Temasek's UNOFFICIAL Build by katinatez วันหนึ่ง version 11.2 มันถูก build ออกมา พอผมเอามา flash  แล้วมันเกิด bootloop ใช้งานต่อไม่ได้ ไปนั่งไล่อ่าน changelog นาย katimatez เค้าไป merge เอา feature เกี่ยวกับ F2FS partition เข้ามารวมด้วย

    F2FS เลยเป็นตัวต้องสงสัย ว่าจะทำให้เรา boot ไม่ผ่าน เลยต้องไปหาว่าจะแปลง partition ของเราให้เป็น F2FS ได้ยังไง

The motive for F2FS was to build a file system that from the start, takes into account the characteristics of NAND flash memory-based storage devices (such as solid-state diskseMMC, and SD cards), which are widely used in computer systems ranging from mobile devices to servers.
F2FS on Wikipedia

ตาม FAQ ของ rom นี้ บอกไว้ว่า มันทำงานได้กับ ext4 เช่นกัน ซึ่งเราไม่ได้ใช้ F2FS อยู่แล้ว ก็ใช้งานได้มาตั้งแต่ version 10
This rom has a unified version for f2fs and ext4, which means no more modifying fstab or updater-script, just flash rom zip file!
Requirement is to format system partition to ext4, & data/cache formatted to f2fs.

* สำหรับท่านที่ไม่ได้ใช้ OPO วิธีการก็เหมือนกัน จะแตกต่างก็ตรง recovery image ที่ใช้ ท่านจะต้องไปหา recovery ที่ใช้สำหรับ Android รุ่นที่ท่านใช้ และรองรับ F2FS (เช่น philz touch หรือ TWRP) *

** ขั้นตอนในโพสต์นี้ต้องทำการเปลี่ยน recovery image ซึ่งทำให้ท่านต้องทำการ unlock bootloader หรือ root เครื่อง Android ซึ่งอาจจะทำให้ warranty ของเครื่องนั้นหมด ผู้เขียนไม่รับผิดชอบต่อความเสียหายที่อาจเกิดขึ้น **

สิ่งที่ต้องเตรียม

1. Recovery ตัวที่รองรับ F2FS
ผมใช้ตัวนี้ philz_touch_6.59.1-bacon.zip ของ katinatez หรือ
จะโหลดจาก backup ของผม
2. พื้นที่ว่างใน /sdcard สำหรับ backup partition data (/data)
3. พื้นที่ว่างใน hard disk สำหรับสำรอง backup file ในข้อ 2 และ backup จาก /sdcard เอง
*เนื่องจาก /sdcard มันเป็น link ชี้ไปที่ /data/media/0 เดี๋ยวเราจะ format /data เป็น F2FS ก็จะทำให้ของใน /sdcard ถูก format ไปด้วย

ขั้นตอนการทำ

1. Boot เข้าสู่ recovery mode เข้าเมนู Backup and Restore ทำการ backup /data partition

2. เมื่อมัน backup เสร็จ เราจะต้อง backup /data/media มายัง hard disk ของเรา จะใช้ MTP ผ่านทาง Window OS หรือ adb pull ก็ได้

3. ผมใช้ adb pull ใช้คำสั่ง
$ adb pull /data/media sd-backup

4. ช้าหรือเร็ว ขึ้นอยู่กับว่าของใน /sdcard มีไฟล์มากหรือเปล่า เมื่อ pull เสร็จแล้ว ให้เข้า menu Mount and Storage

5. เลือก toggle เปิดการ format แบบ F2FS ทำการ format partition /data และ /cache

6. ออกมาจากเมนูนั้น ตรวจสอบว่า mount /data อยู่หรือไม่

7. ถ้ามัน mount /data แล้ว ก็ทำการเอา backup คืนกลับเข้าไปใน /sdcard
ใช้คำสั่ง
$ adb push sd-backup /data/media/

สั่งแบบนี้ แล้วของใน sdcard มันจะอยู่ที่เดิม

8.อาจจะลองตรวจสอบอีกครั้งว่า folder 0 มันอยู่ที่ /data/media/0 หรือไม่ /data/media/0 จะถูก mount เป็น /sdcard นั่นเอง

9.ใช้เมนู Backup and Restore เพื่อเอา /data กลับคืนสู่ที่เดิม

10.ทดลอง reboot system

11.ถ้าเข้า OS ได้แล้ว แต่เจอปัญหาว่า apps ต่างๆมันเขียน /sdcard ไม่ได้ ให้ boot กลับมาที่ recovery อีกครั้ง
ใช้ชุดคำสั่งนี้พื่อแก้ไข
chown -R media_rw:media_rw /data/media/
find /data/media/ -type d -exec chmod 775 {} ';'
find /data/media/ -type f -exec chmod 664 {} ';'
เสร็จสิ้นกระบวนการ :)

ถ้ามีเวลามากกว่านี้จะลองทำ screen capture มาใส่ เพื่อให้ดูน่าอ่านยิ่งขึ้นนะครับ

อ้างอิง:
- [SCRIPT/FIX] Internal sdcard permissions (/data/media/)

ไม่มีความคิดเห็น :