เนื่องจากช่วงอาทิตย์ที่แล้ว ได้รับเชิญเข้าร่วมงานประชุมระดมสมองเชิงปฏิบัติการ "การพัฒนาภาษาไทยในซอฟต์แวร์โอเพนซอร์ส" ซึ่งทาง NECTEC เป็นผู้จัด สถานที่จัดงานคือ เป็นรีสอร์ทในจังหวัดนครราชสีมา ก่อนจะไปร่วมงานได้เสาะหา HDD 500GB 7200rpm ซึ่งทางร้านได้สั่งมาให้แบบไม่ทันตั้งตัว จึงจัดงบไปสอยมาโดยเร็ว พร้อมกับคิดไปพร้อมว่าจะย้ายข้อมูลจากก้อนเดิม (120GB) มาก้อนใหม่ (500GB) ยังไงดี
คืนแรกที่ได้ HDD มา ซึ่งได้สอย Enclosure USB2.0 มาด้วย ได้พยายามดึงข้อมูลจากก้อนเดิม (sda) ไปก้อนใหม่ (sdb) ด้วยคำสั่งอันทรงพลัง
# dd if=/dev/sda of=/dev/sdb
ด้วยความเร็ว 4 - 5 MB/s ไม่ได้จับเวลาแน่นอน แต่ทำไว้ก่อนนอน ตื่นมาก็เห็นว่าหยุดส่งข้อมูลแล้ว จัดแจงเปลี่ยนถ่ายก้อนใหม่เข้าสู่เครื่องด้วยประสบการณ์ในการบำรุงรักษาพัดลม CPU เมื่อคราวก่อน (Vaseline Fix) ไม่มีอะไรยุ่งยาก ผลที่ได้คือ boot เข้ามาปกติ ยิ้มในใจว่ารอดแล้ว
คิดการถัดไปคือ ขยาย partition เพื่อใช้เนื้อที่ที่เหลือ แต่ต้องตกใจ เมื่อสั่ง
# fdisk /dev/sda -l ... ... Partition 1 does not start on physical sector boundary ... ...
จริง ๆ ก็ไม่ใช่ครั้งแรกที่เจอปัญหานี้ แต่ต่างตรงที่ว่า คราวแรกที่เจอตอนไปร่วมงาน NLC ที่ NECTEC ที่จำเป็นต้อง clone disk ในคราวนั้นไม่ได้ติดใจอะไร เนื่องจากทาง NECTEC ได้เตรียมต้นฉบับใหม่อีกรอบ เลยไม่ได้ติดใจอะไรมากมาย แต่พอมาเจอกับตัวเองคราวนี้ ต้องออกแรงหาสาเหตุ และในที่สุดก็พบสาเหตุ คือ HDD สองก้อนมี Physical Sector ไม่เท่ากัน คือ
120 GB:
# fdisk /dev/sda -l ... ... Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes ... ...
500 GB:
# fdisk /dev/sda -l ... ... Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes ... ...
จึงเป็นประเด็นที่ทำให้เกิดปัญหาว่า เราไม่สามารถจะ clone partition table จากก้อนเดิม มาก้อนใหม่ได้ตรง ๆ การรอคอยทั้งคืนที่ผ่านมาไม่เกิดผลอะไรเลย T_T
นั่งคิดหาวิธีการ กับเจ้าดิว เนื่องจากสิ่งที่เป็นอุปสรรคคือ "เวลา" เนื่องจากมีกำหนดการเดินทางไป ขอนแก่น ตอนบ่าย ดังนั้นจึงเหลือเวลาให้ดำเนินการไม่เกิน 3 ชั่วโมงครึ่ง สิ่งที่เราคิดกันได้คือ ถ้าใช้ USB ในการ clone เราจะทำ speed ไม่ได้แน่ ๆ และอีกอย่างคือ เมื่อนำ HDD ต่อกับ enclosure เราจะได้ Physical Sector size แค่ 512 Bytes เท่านั้น ซึ่งไม่ถูกต้องอยู่ดี หลังจากคิดกันสักครู่เราก็ได้ solution ดังนี้คือ
# sfdisk -d /dev/sda # partition table of /dev/sda unit: sectors /dev/sda1 : start= 2048, size= 1959868, Id=83 /dev/sda2 : start= 1961984, size= 97659136, Id=83 ... ...
# nc -l 192.168.100.1 2222 > /dev/sda1
120GB:
# nc 192.168.100.1 2222 < /dev/sda1
และทำเช่นเดียวกัน กับ sda2, sda3 ส่วน sda4 ซึ่งเป็น swap ตัดสินใจจะสร้างใหม่เลย ตามคำแนะนำของ madduct (http://madduck.net/docs/cryptdisk/) ซึ่งผมก็ใช้วิธีนี้ในการทำ cryptdisk ตั้งแต่คราวแรก
ความเร็วที่ได้อยู่ราว ๆ 30 MB/s ซึ่งเพิ่มจากเดิมราว ๆ 6 เท่า และคำนวณเวลาคร่าว ๆ ก็พบว่าความเร็วนี้ สามารถที่จะทำให้เสร็จภายในกรอบเวลาคือ 3 ชั่วโมงครึ่ง
หลังจากถ่ายข้อมูลเรียบร้อย สิ่งที่ต้องทำเพิ่มคือ ติดตั้ง GRUB โดยต้องพึ่ง Debian Installer เพื่อจะเข้าสู่โหมด Rescue และ chroot เข้าไปยัง root ของ HDD และติดตั้ง GRUB
เนื่องจากเครื่องผมทำ Encryption File System ไว้ ทำให้ติดปัญหาว่า หลังจากติดตั้ง GRUB แล้ว ถอดรหัส HDD แล้วก็ยัง boot ไม่ขึ้น ต้องทำการ update-initramfs อีกครั้งจึง boot ได้ปกติ และตอนนี้ fdisk ก็ไม่แจ้ง warning แล้ว
# fdisk /dev/sda -l Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0xe9dbfc26 Device Boot Start End Blocks Id System /dev/sda1 2048 1961915 979934 83 Linux /dev/sda2 1961984 99621119 48829568 83 Linux /dev/sda3 99622912 959782911 430080000 83 Linux /dev/sda4 959782912 976773119 8495104 83 Linux
หลังจากมั่นใจแล้วว่า fdisk ไม่แจ้ง warning ก็ใช้ Debian Installer เพื่อเข้า rescue mode อีกครั้ง เพื่อที่จะขยาย partition
# cryptsetup resize sda3_crypt # e2fsck -f /dev/mapper/sda3_crypt # resize2fs /dev/mapper/sda3_crypt
เป็นอันเรียบร้อย ไม่ต้องติดตั้ง Debian และจัดการระบบใหม่ ผมได้ระบบเหมือนเดิมทุกอย่าง พร้อมพื้นที่ที่เพิ่มขึ้น :)
Happy Hacking!