คำเตือน: โปรดระมัดระวังเวลาจัดการเกี่ยวกับ 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
ข้อมูลอ้างอิง
เยี่ยมเลย ขอบคุณครับ
ขอบคุณสำหรับวิธีทำที่ละเอียดครับ เยี่ยมมากเลยครับ