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

คำเตือน: โปรดระมัดระวังเวลาจัดการเกี่ยวกับ Partition เพราะถ้าอ้างอิงชื่อผิด เช่น จาก /dev/sdb พิมพ์เป็น /dev/sda จะทำให้ข้อมูลในฮาร์ดดิสก์นั้นเสียหายไปได้

บทความนี้ขอกล่าวถึงการใช้คำสั่ง parted สร้าง Linux Partition ที่มีขนาดมากกว่า 2TB ซึ่งจะไม่สามารถสร้างได้โดยใช้คำสั่ง fdisk เพราะว่าการใช้คำสั่ง fdisk ในการสร้าง partition นั้นจะสามารถสร้างขนาดได้มากสุดได้แค่ 2TB เท่านั้น ตามตัวอย่างด้านล่างนี้

หมายเหตุ: ในบทความนี้ การทดสอบจะทดสอบบนเครื่องที่มีฮาร์ดดิสก์ขนาดประมาณ 5.5TB ต่ออยู่เป็นตัวที่สองชื่อ /dev/sdb

ทดสอบใช้คำสั่ง fdisk เพื่อสร้าง Disk Partition ที่มีขนาดมากกว่า 2TB
เริ่มต้นใช้คำสั่ง fdisk ตรวจสอบรายละเอียดของฮาร์ดดิสก์

[root@server ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 5499.8 GB, 5499882831872 bytes
255 heads, 63 sectors/track, 668656 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00062e5b
   Device Boot      Start         End      Blocks   Id  System

ผลลัพธ์ที่ได้จะเห็นได้ว่า ฮาร์ดดิสก์ก้อนนี้มีขนาด 5499.8 GB หรือประมาณ 5.5 TB มีจำนวน cylinder ทั้งหมด 668656 cylinder และถ้าเราเริ่มต้นติดตั้งฮาร์ดดิสก์ใช้งานตอนแรกจะไม่มี partition ใดๆ เลย

ตัวอย่างการใช้คำสั่ง fdisk เพื่อสร้าง partition

[root@server ~]# fdisk /dev/sdb
The number of cylinders for this disk is set to 668656.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/sdb: 5499.8 GB, 5499882831872 bytes
255 heads, 63 sectors/track, 668656 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00062e5b
   Device Boot      Start         End      Blocks   Id  System
Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-668656, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-267349, default 267349): 668656
Value out of range.
Last cylinder or +size or +sizeM or +sizeK (1-267349, default 267349):
Using default value 267349
Command (m for help): p
Disk /dev/sdb: 5499.8 GB, 5499882831872 bytes
255 heads, 63 sectors/track, 668656 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00062e5b
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267349  2147480811   83  Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

จากตัวอย่างจะเห็นได้ว่า ฮาร์ดดิสก์ลูกนี้มีจำนวน cylinder ทั้งหมด 668656 cylinder แต่พอเราจะสร้าง partition ขึ้นมาโดยระบุ Last cylinder เท่ากับ 668656 คำสั่งจะฟ้องข้อผิดพลาดขึ้นมาว่า Value out of range บังคับให้เราใส่ได้ค่าดีฟอลต์สูงสุดได้แค่ 267349 เท่านั้น

ขั้นต่อไปทดสอบใช้คำสั่ง pvcreate สร้าง LVM Physical Volume และใช้คำสั่ง pvdisplay เพื่อตรวจสอบขนาด partition ที่สร้างได้

[root@server ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created

[root@server ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "2.00 TB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               2.00 TB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               OIlIIY-4QIi-jQGk-gbJl-LzTG-Zf60-dU4Qy1

ถึงแม้เราจะสร้าง LVM Physical Volume ทั้ง partition เลย แต่จะได้ขนาด (PV Size) ได้แค่ 2TB เท่านั้น นี่คือข้อจำกัดอย่างหนึ่งจากการสร้าง partition ในลินุกซ์ ที่มีขนาดมากกว่า 2TB โดยใช้คำสั่ง fdisk

ก่อนที่จะแก้ไขให้ถูกต้อง แนะนำให้ใช้คำสั่ง fdisk เพื่อลบ partition ที่เพิ่งสร้างขึ้นมาออกไปก่อน

[root@server ~]# fdisk /dev/sdb
The number of cylinders for this disk is set to 668656.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/sdb: 5499.8 GB, 5499882831872 bytes
255 heads, 63 sectors/track, 668656 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00062e5b
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267349  2147480811   83  Linux
Command (m for help): d
Selected partition 1
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

ใช้คำสั่ง parted เพื่อสร้าง partition ที่มีขนาดมากกว่า 2TB
เพื่อจะสร้าง partition ที่มีขนาดมากกว่า 2TB ในลินุกซ์ให้ถูกต้อง ต้องใช้คำสั่ง parted เพื่อสร้าง partition ให้เป็นแบบ EFI/GPT

โดยดีฟอลต์แล้ว ในลินุกซ์ Partition Table ที่ถูกใช้งานจะเป็นแบบ msdos เราต้องเปลี่ยนให้เป็นแบบ EFI/GPT โดยใช้คำสั่ง mklabel ซึ่งเป็นคำสั่งย่อยในคำสั่ง parted

ตัวอย่างการใช้คำสั่ง parted เพื่อเปลี่ยนชนิด Partition Table ให้เป็นแบบ EFI/GPT และใช้คำสั่งย่อย mkpart สร้าง partition ขึ้นมาโดยใช้พื้นที่ฮาร์ดดิสก์ทั้งหมด

[root@server ~]# parted /dev/sdb
GNU Parted 1.8.8
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: AMCC 9550SX-12 DISK (scsi)
Disk /dev/sdb: 5500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number  Start  End  Size  Type  File system  Flags
(parted) mklabel
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
New disk label type?  [msdos]? gpt

(parted) print
Model: ____ (scsi)
Disk /dev/sdb: 5500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start  End  Size  File system  Name  Flags

(parted) mkpart primary 0 5500GB

(parted) print
Model: ____ (scsi)
Disk /dev/sdb: 5500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  5500GB  5500GB               primary
(parted) quit
Information: You may need to update /etc/fstab.

ใช้คำสั่ง pvcreate เพื่อสร้าง LVM Physical Volume ขึ้นมา และใช้คำสั่ง pvdisplay เพื่อตรวจสอบ

[root@server ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created

[root@server ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "5.00 TB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               5.00 TB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               7nA4Tu-OSWh-IrTt-4dwi-ODn8-XhX2-9hh7CN

จากผลลัพธ์ที่ได้ เราจะได้เนื้อที่ทั้งหมดมา PV Size เท่ากับ 5.00 TB (เนื้อที่บางส่วนที่หายไปถูกใช้งานโดย LVM)

พอเราได้เนื้อที่ฮาร์ดดิสก์ที่ถูกต้องแล้ว เราก็สามารถนำไปสร้าง Volume Group, Logical Volume และFilesystem ได้เหมือนกับ parittion ปกติทั่วไป

ตัวอย่างการสร้าง Volume Group, Logical Volume, และ Filesystem

[root@server ~]# vgcreate VolGroup00 /dev/sdb1
  Volume group "VolGroup00" successfully created

[root@server ~]# vgdisplay
  --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               5.00 TB
  PE Size               4.00 MB
  Total PE              1311274
  Alloc PE / Size       0 / 0
  Free  PE / Size       1311274 / 5.00 TB
  VG UUID               EIEfnJ-VNJj-tBvS-Uqon-0F2C-njn0-EeDKeG

[root@server ~]# lvcreate -l 100%free VolGroup00 -n LogVol00
  Logical volume "LogVol00" created

[root@server ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol00
  VG Name                VolGroup00
  LV UUID                FdwVaZ-atyX-npdi-CwsK-TkuR-YJil-730Ly1
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                5.00 TB
  Current LE             1311274
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

[root@server ~]# mkfs.ext3 -L serverdata /dev/VolGroup00/LogVol00
mke2fs 1.40.8 (13-Mar-2008)
Warning: 256-byte inodes not usable on older systems
Filesystem label=serverdata
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
335691776 inodes, 1342744576 blocks
67137228 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
40978 block groups
32768 blocks per group, 32768 fragments per group
8192 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
...

[root@server /]# mkdir /export
[root@server /]# mount /dev/VolGroup00/LogVol00 /export
[root@server /]# df -h /export
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      5.0T  189M  4.7T   1% /export

ข้อมูลอ้างอิง

2 thoughts on “สร้าง Linux Partition ที่มีขนาดมากกว่า 2TB”

  1. ขอบคุณสำหรับวิธีทำที่ละเอียดครับ เยี่ยมมากเลยครับ

Leave a Reply