เมื่อเราต้องการเพิ่ม Harddisk ลูกใหม่ที่มีขนาดหลาย Terabyte บนระบบ Linux ตามปกติแล้วระบบปฏิบัติการ Linux เราจะสามารถสร้าง Disk Partition และ Format ได้ไม่เกิน 2TB เท่านั้น และถ้าหากว่าเรามี Disk ขนาดใหญ่ เราจึงต้องสร้างหลายๆ Partition โดยแบ่งเป็น Partition ละไม่เกิน 2TB คำถามคือ แล้วถ้าหากเราต้องการเพียง Partition เดียวแต่ต้องการใช้พื้นที่ทั้งหมดของ Disk ทั้งลูกหล่ะ???

เราจะแก้ปัญหานี้ด้วยการใช้คำสั่ง GNU Parted ด้วย GPT (Intel EFI/GPT Partition Table) ซึ่ง  GPT (GUID Partition Table) เป็นการจัด Partition Table ของ Harddisk Drive ตาม EFI (Extensible Firmware Interface) Standard ที่นำเสนอโดย Intel สำหรับใช้ทดแทน PC BIOS ที่หมดยุคของ IBM PC โดยที่ EFI จะใช้ GPT ในขณะที่ BIOS จะใช้ Master Boot Record (MBR)

GUID Partition Table

Linux GPT Kernel Support

EFI GUID Partition นั้นสามารถทำงานได้ทั้งบน 32bit และ 64bit platforms แต่จะต้องมีการ include GPT Support ใน Kernel เสียก่อนจึงจะเรียกใช้งาน GPT ได้  ไม่เช่นนั้นอาจจะไม่สามารถ boot เข้าระบบได้ หลังจาก restart  ซึ่งโดยปกติแล้วในระบบปฏิบัติการ Linux ในเวอร์ชั่นใหม่ๆ จะ include GPT Support ใน Kernel มาแล้ว ส่วนสำหรับเวอร์ชั่นเก่าที่ยังไม่รองรับการใช้งานนั้นจำเป็นจะต้อง recompile kernel เสียก่อน โดยการ recompile kernel จะต้องเซ็ท CONFIG_EFI_PARTITION = y (ขั้นตอนการ recompile kernel จะไม่ขอกล่าวถึงในที่นี้ แต่จะเขียนถึงในโอกาสบันทึกต่อไปครับ)

File Systems
   Partition Types
     [*] Advanced partition selection
     [*] EFI GUID Partition support (NEW)
....

การหาขนาดของ HDD

# fdisk -l /dev/cciss/c1d0

จะได้ผลลัพท์ลักษณะดังต่อไปนี้ (ตัวอย่างนี้จะเป็น HDD ที่เป็น System RAID ซึ่ง Device ที่เป็น RAID จะถูกเก็บอยู่ที่ /dev/cciss แต่สำหรับระบบทั่วไปที่ไม่มี RAID นั้น Device ที่เป็น HDD ต่างๆ จะถูกเก็บที่ /dev/sdx เช่น /dev/sda /dev/sdb … เป็นต้น)

WARNING: GPT (GUID Partition Table) detected on '/dev/cciss/c1d0'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/cciss/c1d0: 6001.0 GB, 6000979861504 bytes
255 heads, 63 sectors/track, 729577 cylinders, total 11720663792 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: 0x00000000

          Device Boot Start        End      Blocks Id System
/dev/cciss/c1d0p1         1 4294967295 2147483647+ ee GPT

จากผลลัพท์จะเห็นว่า HDD มีขนาด 6001.0GB หรือประมาณ 6TB

การสร้าง Partition ที่มีขนาดโตกว่า 2TB

#parted /dev/cciss/c1d0

ได้ผลลัพท์

GNU Parted 2.3
Using /dev/cciss/c1d0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

สร้าง GPT disklabel

(parted) mklabel gpt

ได้ผลลัพท์

Warning: The existing disk label on /dev/cciss/c1d0 will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
(parted)

ต่อไปตั้งค่า default unit เป็น TB

(parted) unit TB

ต่อไปสร้าง Partition โดยสร้างเต็มพื้นที่ของ HDD

(parted) mkpart primary 0 0

หรือสร้าง Partition ระบุขนาดของ Partition ที่ต้องการ

(parted) mkpart primary 0.00TB 5.50TB

ใช้คำสั่ง print เพื่อแสดง Partition

(parted) print

จะได้ผลลัพท์

Model: Compaq Smart Array (cpqarray)
Disk /dev/cciss/c1d0: 5.50TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start  End    Size   File system Name Flags
1      0.00TB 5.50TB 5.50TB ext4             primary

ออกจากโปรแกรม parted โดยพิมพ์คำสั่ง quit

(parted) quit

Information: You may need to update /etc/fstab

ที่ผ่านมาเป็นการสร้าง Partition เมื่อลองใช้คำสั่ง ls เพื่อดูใน /dev/cciss จะได้ Device เพิ่มขึ้นมา คือ /dev/cciss/c1d0p1 ซึ่งการที่จะนำ Partition ไปใช้งานได้จะต้องทำการ Format Partition เสียก่อน โดยในตัวอย่างนี้เป็นการ format เป็น File System Type แบบ Ext4 ดังนี้

# mkfs.ext4 /dev/cciss/c1d0p1

หรือต้องการใส่ Label ของ Partition ด้วย

# mkfs.ext4 -L Label /dev/cciss/c1d0p1

จะได้ผลลัพท์ลักษณะดังต่อไปนี้

# mkfs.ext4 -L data /dev/cciss/c1d0p1 
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=Label
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
183136256 inodes, 1465082624 blocks
73254131 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
44711 block groups
32768 blocks per group, 32768 fragments per group
4096 inodes per group
Superblock backups stored on blocks: 
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
 102400000, 214990848, 512000000, 550731776, 644972544

Allocating group tables: done 
Writing inode tables: done 
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

การนำ Partition ไปใช้งาน

# mkdir /data
# mount /dev/cciss/c1d0p1 /data
# df -h

จะได้ผลลัพท์ ดังนี้

Filesystem             Size   Used  Avail Use% Mounted on
/dev/cciss/c0d0p1      129G   1.9G   121G   2% /
none                   4.0K      0   4.0K   0% /sys/fs/cgroup
udev                   3.0G    12K   3.0G   1% /dev
tmpfs                  597M   584K   597M   1% /run
none                   5.0M      0   5.0M   0% /run/lock
none                   3.0G      0   3.0G   0% /run/shm
none                   100M      0   100M   0% /run/user
/dev/cciss/c1d0p1      5.5T    58M   5.2T   1% /data

หรือหากต้องการให้มีการ mount partition ทุกครั้งที่เปิดเครื่อง

ก่อนอื่นต้องหาค่า UUID หรือ block id ของ Partition ดังนี้

# blkid /dev/cciss/c1d0p1

จะได้ผลลัพท์ ลักษณะดังต่อไปนี้

/dev/cciss/c1d0p1: LABEL="data" UUID="90f69e04-c3c9-43a5-962a-08a14c2d0dd3" TYPE="ext4"

จากนั้นแก้ไขไฟล์ /etc/fstab เพิ่มบรรทัดดังต่อไปนี้

UUID=90f69e04-c3c9-43a5-962a-08a14c2d0dd3 /data ext4 defaults 0 2

จากนั้นใช้คำสั่ง mount /data หรือ reboot

จอ บอ จบ ครับ

สำคัญมาก ขั้นตอนการแก้ไขไฟล์ /etc/fstab เนื้อหาในไฟล์จะต้องมีรูปแบบที่ถูกต้องการสะกดคำต่างๆ จะต้องไม่ผิด ไม่เช่นนั้นอาจจะไม่สามารถ boot เข้าระบบได้หลังจากสั่ง reboot

 

Credit: 

  1. https://www.kernel.org
  2. https://wiki.archlinux.org/index.php/partitioning
  3. http://www.cyberciti.biz

 


                            
พอร์ต = Port !!..
ปีใหม่ ที่ใครหลายคนยังไม่รู้

Leave a Comment