การขยายขนาด Image
การขยายขนาด Image เป็นการเพิ่มเนื้อที่ในไดรฟ์ในกรณีที่ Image ที่สร้างไว้มีขนาดไม่เพียงพอต่อการใช้งาน
การขยายขนาดสามารถทำได้ 2 วิธี คือ
- เพิ่มไดรฟ์ D:
- ขยายขนาดของไดรฟ์ C:
โดยทั้งสองวิธีจะยังคงใช้ไฟล์ Image ไฟล์เดิม และไฟล์ Image นี้จะยังคงสามารถนำกลับไปใช้บนฮาร์ดดิสก์ปกติได้เช่นเดิม
ขั้นตอนในการขยายขนาด Image มี 2 ขั้นตอน คือ
- ขยายขนาดของไฟล์ Image
- เพิ่มไดรฟ์ D: หรือขยายขนาดของไดร์ฟ C:
การขยายขนาดของไฟล์ Image และการขยายขนาดของไดรฟ์ C: จะต้องทำในลินุกซ์ ส่วนการเพิ่มไดรฟ์ D: สามารถทำได้ทั้งในลินุกซ์ และในวินโดวส์
เนื้อหา
เปรียบเทียบการขยายขนาด Image
การขยายขนาด Image ทั้งสองวิธีมีข้อดีข้อเสียดังนี้
- เพิ่มไดรฟ์ D:
- ข้อดี
- ทำได้ง่าย
- ปลอดภัยเพราะไม่ยุ่งกับไดรฟ์ C:
- ข้อเสีย
- เนื้อที่แบ่งเป็น 2 ไดรฟ์ ทำให้ยุ่งยากต่อการจัดการ
- ข้อดี
- ขยายขนาดของไดรฟ์ C:
- ข้อดี
- ได้เนื้อที่เป็นไดรฟ์เดียว ง่ายต่อการจัดการ
- ข้อเสีย
- ขั้นตอนยุ่งยากกว่า
- อาจทำให้ไดรฟ์ C: เสียได้
- ข้อดี
อย่างไรก็ดี ในการทำจะไม่ไปยุ่งกับไฟล์ Image เดิม ซึ่งหากทำแล้วผิดพลาด ก็สามารถกลับไปใช้ไฟล์ Image เดิมได้
ในที่นี้จะขยายไฟล์ Image ชื่อ p8.img โดยเดิมมีขนาด 10.74 GB ไปเป็น 21.47 GB
ขยายขนาดของไฟล์ Image
การขยายขนาดของไฟล์ Image สามารถทำได้โดยการเพิ่มไฟล์ว่างๆ ต่อท้ายไปตามขนาดที่ต้องการ โดยใช้คำสั่งตามตัวอย่าง
เช่น ไฟล์ Image เดิมมีขนาด 10 GiB (10.74 GB) ดังนี้
root@diskserv:/image# ls -la p8.img -rw-r--r-- 1 root root 10738466816 Nov 22 15:20 p8.img root@diskserv:/image# fdisk -l p8.img Disk p8.img: 10.7 GB, 10738466816 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20973568 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb82fb82f Device Boot Start End Blocks Id System p8.img1 * 2048 20973567 10485760 7 HPFS/NTFS/exFAT root@diskserv:/image#
ต้องการเพิ่มขนาดเป็น 20 GiB (21.47 GB) ทำได้โดยสร้างไฟล์เปล่าๆ ขนาด 10 GiB ขึ้นมา ดังนี้
root@diskserv:/image# dd bs=1M if=/dev/zero of=zero.bin count=0 seek=10240 0+0 records in 0+0 records out 0 bytes (0 B) copied, 6.887e-06 s, 0.0 kB/s root@diskserv:/image# ls -la zero.bin -rw-r--r-- 1 root root 10737418240 Dec 28 15:45 zero.bin root@diskserv:/image#
จากนั้นใช้คำสั่ง cat เพื่อต่อไฟล์ทั้งสองเข้าด้วยกัน โดยให้สร้างไฟล์ผลลัพธ์ขึ้นมาต่างหาก
root@diskserv:/image# cat p8.img zero.bin > p8_resize.img root@diskserv:/image# ls -la p8_resize.img -rw-r--r-- 1 root root 21475885056 Dec 28 15:47 p8_resize.img root@diskserv:/image# fdisk -l p8_resize.img Disk p8_resize.img: 21.5 GB, 21475885056 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41945088 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb82fb82f Device Boot Start End Blocks Id System p8_resize.img1 * 2048 20973567 10485760 7 HPFS/NTFS/exFAT root@disksrv1:/image#
จะเห็นว่าขนาดของไฟล์ Image เปลี่ยนเป็น 21.5 GB แล้ว โดยที่พาร์ทิชั่นยังคงมีขนาดเท่าเดิม จากนั้นก็สามารถทำขั้นตอนต่อไปได้ โดยสามารถทำได้ทั้งการเพิ่มไดรฟ์ D: หรือการขยายขนาดไดรฟ์ C:
เพิ่มไดรฟ์ D:
การเพิ่มไดรฟ์ D: สามารถทำได้โดยการแก้ไขตารางพาร์ทิชั่นของไฟล์ Image ซึ่งสามารถทำได้หลายวิธี แต่ในที่นี้จะใช้โปรแกรม fdisk ซึ่งเป็นโปรแกรมเดียวกันกับที่ใช้ตอนสร้างพาร์ทิชั่นในฮาร์ดดิสก์
การเพิ่มไดรฟ์ D: จากวินโดวส์
สำหรับการเพิ่มไดรฟ์ D: จากในวินโดวส์สามารถทำได้จาก Disk Manager ซึ่งขั้นตอนคร่าวๆ ดังนี้
- นำไฟล์ Image มาใช้งาน ตามขั้นตอนใน #การนำไฟล์ Image มาใช้งาน
- จากนั้นให้เปิดเครื่องลูก และเรียก Disk Manager ขึ้นมาก็จะพบว่ามีเนื้อที่ว่างท้ายพาร์ทิชั่นแรก ก็ให้สร้างพาร์ทิชั่นตรงนั้นเลย
- จากนั้นเมื่อตรวจสอบความถูกต้องเรียบร้อย ก็ค่อย Update Master Image จากเครื่องลูก
สร้างไดรฟ์ D:
การเพิ่มไดรฟ์ D: จากลินุกซ์ เริ่มจากการสร้างไดรฟ์ D: โดยเรียกคำสั่ง fdisk และพิมพ์รายละเอียดของพาร์ทิชันออกมา
root@diskserv:/image# fdisk p8_resize.img Command (m for help): p Disk p8_resize.img: 21.5 GB, 21475885056 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41945088 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb82fb82f Device Boot Start End Blocks Id System p8_resize.img1 * 2048 20973567 10485760 7 HPFS/NTFS/exFAT Command (m for help):
จากนั้นก็สร้างพาร์ทิชั่นแบบ Extended
Command (m for help): n Command action e extended p primary partition (1-4) e Partition number (1-4, default 2): ↵ Using default value 2 First sector (20973568-41945087, default 20973568): ↵ Using default value 20973568 Last sector, +sectors or +size{K,M,G} (20973568-41945087, default 41945087): ↵ Using default value 41945087 Command (m for help): p Disk p8_resize.img: 21.5 GB, 21475885056 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41945088 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb82fb82f Device Boot Start End Blocks Id System p8_resize.img1 * 2048 20973567 10485760 7 HPFS/NTFS/exFAT p8_resize.img2 20973568 41945087 10485760 5 Extended Command (m for help):
จากนั้นสร้าง Logical Drive ในพาร์ทิชั่น Extended และเปลี่ยนชนิดของพาร์ทิชั่นเป็น NTFS
Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First sector (20975616-41945087, default 20975616): ↵ Using default value 20975616 Last sector, +sectors or +size{K,M,G} (20975616-41945087, default 41945087): ↵ Using default value 41945087 Command (m for help): t Partition number (1-5): 5 Hex code (type L to list codes): 7 Changed system type of partition 5 to 7 (HPFS/NTFS/exFAT) Command (m for help): p Disk p8_resize.img: 21.5 GB, 21475885056 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41945088 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb82fb82f Device Boot Start End Blocks Id System p8_resize.img1 * 2048 20973567 10485760 7 HPFS/NTFS/exFAT p8_resize.img2 20973568 41945087 10485760 5 Extended p8_resize.img5 20975616 41945087 10484736 7 HPFS/NTFS/exFAT Command (m for help):
จากนั้นก็บันทึกตารางพาร์ทิชั่น และออกจากโปรแกรม fdisk
Command (m for help): w
The partition table has been altered!
Syncing disks.
root@disksrv1:/image#
ฟอร์แมตไดรฟ์ D:
การฟอร์แมตไดรฟ์ D: สามารถทำได้โดยใช้โปรแกรม mkfs.ntfs โดยมีขั้นตอนดังนี้ หา loopback device ที่ว่างโดยใช้คำสั่ง
root@diskserv:/image# losetup -f
/dev/loop19
root@diskserv:/image#
โปรแกรมจะแสดง loopback device แรกที่ว่างออกมา ซึ่งในแต่ละเครื่องจะไม่เหมือนกัน ในตัวอย่างข้างต้นคือ /dev/loop19
จากนั้นหา offset โดยคำนวณจาก Start Sector จากคำสั่งพาร์ทิชั่นที่สร้าง ซึ่งในที่นี้คือ 20975616 ดังนั้น offset คือ 20975616 x 512 = 10739515392
จากนั้นใช้คำสั่งต่อไปนี้เพื่อฟอร์แมต
root@diskserv:/image# losetup -o 10739515392 /dev/loop19 /image/p8_resize.img root@diskserv:/image# /sbin/mkfs.ntfs -f -I -L DRIVE_D /dev/loop19 The partition start sector was not specified for /dev/loop19 and it could not be obtained automatically. It has been set to 0. The number of sectors per track was not specified for /dev/loop19 and it could not be obtained automatically. It has been set to 0. The number of heads was not specified for /dev/loop19 and it could not be obtained automatically. It has been set to 0. Cluster size has been automatically set to 4096 bytes. To boot from a device, Windows needs the 'partition start sector', the 'sectors per track' and the 'number of heads' to be set. Windows will not be able to boot from this device. Creating NTFS volume structures. mkntfs completed successfully. Have a nice day. root@diskserv:/image#
คำเตือน ให้ใช้ค่า offset และชื่อ loopback device ของแต่ละเครื่อง อย่าใช้ตามตัวอย่าง
สุดท้ายก็ให้ลบ loopback device โดยใช้คำสั่ง
root@diskserv:/image# losetup -d /dev/loop19
root@diskserv:/image#
เมื่อสร้างไดรฟ์ D: เรียบร้อยแล้ว ก็สามารถนำไฟล์ Image ใหม่นี้มาใช้งานได้ โดยทำตามขั้นตอนในหัวข้อ #การนำไฟล์ Image มาใช้งาน
ขยายขนาดไดรฟ์ C:
การขยายขนาดไดรฟ์ C: ในลินุกซ์จะใช้โปรแกรม fdisk เพื่อขยายขนาดพาร์ทิชั่น และโปรแกรม ntfsresize เพื่อขยายระบบไฟล์ NTFS โดยมีขั้นตอนดังนี้
การขยายพาร์ทิชั่นเริ่มโดยเรียกคำสั่ง fdisk และพิมพ์รายละเอียดของพาร์ทิชันออกมา
root@diskserv:/image# fdisk p8_resize.img Command (m for help): p Disk p8_resize.img: 21.5 GB, 21475885056 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41945088 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb82fb82f Device Boot Start End Blocks Id System p8_resize.img1 * 2048 20973567 10485760 7 HPFS/NTFS/exFAT Command (m for help):
จากนั้นสั่งลบ และสร้างพาร์ทิชั่นใหม่ให้เต็มขนาดของดิสก์ ดังนี้
Command (m for help): d Selected partition 1 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4, default 1): ↵ Using default value 1 First sector (2048-41945087, default 2048): ↵ Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41945087, default 41945087): ↵ Using default value 41945087 Command (m for help): t Selected partition 1 Hex code (type L to list codes): 7 Changed system type of partition 1 to 7 (HPFS/NTFS/exFAT) Command (m for help): a Partition number (1-4): 1 Command (m for help): p Disk p8_resize.img: 21.5 GB, 21475885056 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41945088 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb82fb82f Device Boot Start End Blocks Id System p8_resize.img1 * 2048 41945087 20971520 7 HPFS/NTFS/exFAT Command (m for help): w The partition table has been altered! Syncing disks. root@disksrv1:/image#
เป็นอันเสร็จขั้นตอนการขยายขนาดพาร์ทิชั่น
การขยายระบบไฟล์ NTFS จะต้องใช้ loopback ด้วยโดยหา loopback device ที่ว่างโดยใช้คำสั่ง
root@diskserv:/image# losetup -f
/dev/loop19
root@diskserv:/image#
โปรแกรมจะแสดง loopback device แรกที่ว่างออกมา ซึ่งในแต่ละเครื่องจะไม่เหมือนกัน ในตัวอย่างข้างต้นคือ /dev/loop19
จากนั้นใช้คำสั่งต่อไปนี้เพื่อทดสอบการขยายไดรฟ์ C: ซึ่งจะไม่มีการเขียนข้อมูลใดๆ ทั้งสิ้น
root@diskserv:/image# losetup -o 1048576 /dev/loop19 p8_resize.img root@diskserv:/image# ntfsresize -n -s 21474836480 -v /dev/loop19 ntfsresize v2.0.0 (libntfs 10:0:0) Device name : /dev/loop19 NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 10737414656 bytes (10738 MB) Current device size: 21474836480 bytes (21475 MB) New volume size : 21474832896 bytes (21475 MB) Checking for bad sectors ... Checking filesystem consistency ... 100.00 percent completed Accounting clusters ... Space in use : 6334 MB (59.0%) Collecting resizing constraints ... Schedule chkdsk for NTFS consistency check at Windows boot time ... Resetting $LogFile ... (this might take a while) Updating $BadClust file ... Updating $Bitmap file ... Updating Boot record ... The read-only test run ended successfully. root@diskserv:/image#
จะเห็นว่าบรรทัดสุดท้ายโปรแกรมแสดงผลการทดสอบว่าสำเร็จเรียบร้อย
จากนั้นจึงใช้คำสั่งอีกครั้ง โดยในครั้งนี้จะเป็นการขยายจริง
root@diskserv:/image# ntfsresize -s 21474836480 -v /dev/loop19 ntfsresize v2.0.0 (libntfs 10:0:0) Device name : /dev/loop19 NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 10737414656 bytes (10738 MB) Current device size: 21474836480 bytes (21475 MB) New volume size : 21474832896 bytes (21475 MB) Checking for bad sectors ... Checking filesystem consistency ... 100.00 percent completed Accounting clusters ... Space in use : 6334 MB (59.0%) Collecting resizing constraints ... WARNING: Every sanity check passed and only the dangerous operations left. Make sure that important data has been backed up! Power outage or computer crash may result major data loss! Are you sure you want to proceed (y/[n])? y Schedule chkdsk for NTFS consistency check at Windows boot time ... Resetting $LogFile ... (this might take a while) Updating $BadClust file ... Updating $Bitmap file ... Updating Boot record ... Syncing device ... Successfully resized NTFS on device '/dev/loop19'. root@disksrv1:/image#
เมื่อขยายไดรฟ์ C: เรียบร้อยแล้วก็ลบ loopback device ดังนี้
root@diskserv:/image# losetup -d /dev/loop19
root@diskserv:/image#
เป็นอันเสร็จสิ้นการขยายขนาดไดรฟ์ C: ก็สามารถนำไฟล์ Image ใหม่นี้มาใช้งานได้ โดยทำตามขั้นตอนในหัวข้อ #การนำไฟล์ Image มาใช้งาน
เมื่อบูตเข้าวินโดวส์ครั้งแรก วินโดวส์จะตรวจสอบไดรฟ์ C: ซึ่งเมื่อตรวจสอบเรียบร้อยก็ให้ Update Master Image
การนำไฟล์ Image มาใช้งาน
เมื่อขยายเนื้อที่ในไฟล์ Image เสร็จเรียบร้อย ให้ปิดระบบโดยใช้คำสั่ง
/etc/rc.d/init.d/iet stop
จากนั้นให้นำไฟล์ Image ใหม่มาใช้ (โดยสำรองไฟล์เก่าไว้ก่อน)
cd /image mv p8.img p8_old.img mv p8_resize.img p8.img
เมื่อเปลี่ยนไฟล์เรียบร้อยแล้ว ก็ให้เริ่มระบบ โดยใช้คำสั่ง
/etc/rc.d/init.d/iet start