LVM (Logical Volume Management) คือเทคโนโลยีจัดการอุปกรณ์จัดเก็บข้อมูลที่ให้ผู้ใช้สามารถรวมและจัดการอุปกรณ์จัดเก็บข้อมูลในรูปแบบที่ยืดหยุ่นได้มากขึ้น สำหรับเวอร์ชันปัจจุบันคือ LVM2 สามารถใช้เพื่อรวบรวมอุปกรณ์จัดเก็บข้อมูลที่มีอยู่เข้าด้วยกัน และจัดสรรหน่วยข้อมูลเชิงตรรกะ (Logical Units) จากพื้นที่รวมตามต้องการ ซึ่งทำงานบนโครงสร้างพื้นฐานของ device mapper ใน Linux kernel
ข้อดีหลักของ LVM คือ การจัดการข้อมูลที่ยืดหยุ่นและควบคุมได้มากขึ้น ผู้ใช้สามารถตั้งชื่อ Logical Volume ให้สื่อถึงการใช้งานจริง เช่น “databases” หรือ “root-backup” นอกจากนี้ยังสามารถปรับขนาดของ Logical Volumes ได้แบบไดนามิก เมื่อความต้องการพื้นที่จัดเก็บเปลี่ยนแปลง และยังสามารถย้ายข้อมูลระหว่างอุปกรณ์จัดเก็บภายใน pool ได้โดยไม่ต้องหยุดระบบ รวมถึงฟีเจอร์ขั้นสูง เช่น snapshot, striping และ mirroring
ในบทความนี้ คุณจะได้เรียนรู้พื้นฐานการทำงานของ LVM และฝึกใช้คำสั่งพื้นฐานเพื่อเริ่มต้นใช้งาน LVM บนเครื่องที่มีการติดตั้งระบบปฏิบัติการโดยตรง (bare metal machine)
โครงสร้างการจัดการการจัดเก็บข้อมูล LVM พื้นฐาน
LVM ทำงานโดยใช้ชั้นของการแยกชิ้นส่วนข้อมูล (abstractions) บนพื้นฐานของอุปกรณ์จัดเก็บข้อมูล โดยโครงสร้างพื้นฐานที่ LVM ใช้เรียงตามลำดับจากขั้นพื้นฐานที่สุด ได้แก่:
- Physical Volumes (PV): Physical Volumes (PV) คืออุปกรณ์จัดเก็บข้อมูลจริง เช่น ฮาร์ดดิสก์ หรืออุปกรณ์อื่นที่คล้ายกัน ซึ่งเป็นส่วนประกอบพื้นฐานที่ LVM ใช้เพื่อสร้างระดับการจัดเก็บที่สูงขึ้น LVM จะเขียน header บน Physical Volume เพื่อจัดการ
- Volume Groups (VG): Volume Groups (VG) เป็นการรวม Physical Volumes หลายตัวเข้าด้วยกันเพื่อสร้างเป็นกลุ่มการจัดเก็บข้อมูล (storage pool) ทำให้สามารถจัดการพื้นที่เก็บข้อมูลของอุปกรณ์หลายตัวเป็นเหมือนอุปกรณ์เดียวที่มีพื้นที่รวมกัน
- Logical Volumes (LV): Logical Volumes (LV) เป็นส่วนที่ถูกแบ่งออกจาก Volume Groups โดยมีความยืดหยุ่นสูงกว่า Partition บนฮาร์ดดิสก์ทั่วไป และเป็นส่วนที่ผู้ใช้และแอปพลิเคชันจะใช้งานโดยตรง
LVM สามารถรวม Physical Volumes เข้าด้วยกันเพื่อสร้าง Volume Groups ที่เป็นเหมือนพื้นที่เก็บข้อมูลรวม จากนั้นผู้ดูแลระบบสามารถแบ่ง Volume Groups ออกเป็น Logical Volumes ได้ตามความต้องการ ซึ่งเป็นการจัดการพื้นที่จัดเก็บแบบยืดหยุ่น
การทำความเข้าใจ Extents
แต่ละ Volume ใน Volume Group จะถูกแบ่งเป็นชิ้นส่วนเล็ก ๆ ที่มีขนาดคงที่ เรียกว่า Extents ขนาดของ Extents จะถูกกำหนดโดย Volume Group และทุก Volume ในกลุ่มเดียวกันจะต้องมีขนาดของ Extents ที่เท่ากัน Extents ใน Physical Volumes เรียกว่า Physical Extents และ Extents ใน Logical Volumes เรียกว่า Logical Extents Logical Volume จะเป็นการจับคู่ระหว่าง Logical Extents และ Physical Extents ที่ LVM จัดการไว้ ขนาดของ Extents จึงเป็นหน่วยพื้นที่ที่เล็กที่สุดที่ LVM สามารถจัดการได้
Extents เป็นส่วนหนึ่งที่ทำให้ LVM มีความยืดหยุ่นและพลังในการจัดการสูง Logical Volume ที่ถูกนำเสนอโดย LVM นั้นไม่จำเป็นต้องประกอบด้วย Physical Extents ที่ต่อเนื่องกัน LVM สามารถคัดลอกหรือจัดเรียง Physical Extents ใหม่ได้โดยไม่รบกวนการใช้งานของผู้ใช้ และสามารถขยายหรือลดขนาดของ Logical Volume ได้โดยการเพิ่มหรือลบ Extents
การใช้งานที่พบบ่อย
เมื่อคุณเข้าใจคำศัพท์และโครงสร้างของ LVM แล้ว คุณสามารถสำรวจการใช้งานที่พบบ่อยได้ ตัวอย่างเช่น การใช้ดิสก์สองลูกเพื่อสร้าง Logical Volumes สี่ตัว
ขั้นตอนการใช้งาน LVM
การกำหนดดิสก์เป็น Physical Volumes เริ่มต้นด้วยการสแกนหาดิสก์ในระบบที่ LVM สามารถจัดการได้ โดยใช้คำสั่งต่อไปนี้
sudo lvmdiskscan
คำเตือน: ตรวจสอบให้แน่ใจว่าอุปกรณ์ที่คุณตั้งใจจะใช้งานกับ LVM นั้นไม่มีข้อมูลสำคัญที่คุณต้องการเก็บไว้ การใช้อุปกรณ์เหล่านี้กับ LVM จะเขียนทับข้อมูลที่มีอยู่ หากมีข้อมูลสำคัญในเซิร์ฟเวอร์ ควรสำรองข้อมูลไว้ก่อนที่จะดำเนินการต่อ
หลังจากที่คุณทราบแล้วว่าอุปกรณ์จัดเก็บข้อมูลใดที่ต้องการใช้ ให้ทำเครื่องหมายอุปกรณ์เหล่านั้นเป็น Physical Volumes ใน LVM โดยใช้คำสั่ง pvcreate ดังนี้
sudo pvcreate /dev/sda /dev/sdb
คำสั่งนี้จะเขียน header ของ LVM ลงไปในอุปกรณ์เพื่อเตรียมไว้สำหรับการเพิ่มไปยัง Volume Groupจากนั้น ตรวจสอบว่า LVM ได้ลงทะเบียน Physical Volumes แล้วโดยการใช้คำสั่ง pvs
sudo pvs
จะเห็นอุปกรณ์ทั้งสองปรากฏในคอลัมน์ PV (Physical Volume)
PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 200.00g 200.00g
/dev/sdb lvm2 --- 100.00g 100.00g
การเพิ่ม Physical Volumes ลงใน Volume Group
หลังจากที่คุณสร้าง Physical Volumes จากอุปกรณ์จัดเก็บข้อมูลแล้ว คุณสามารถสร้าง Volume Group ได้ ในระบบทั่วไป มักจะสร้าง Volume Group เพียงกลุ่มเดียวเพื่อให้จัดสรรพื้นที่ได้อย่างยืดหยุ่น ในตัวอย่างนี้เราจะตั้งชื่อ Volume Group ว่า “LVMVolGroup” แต่คุณสามารถตั้งชื่อได้ตามต้องการ
ใช้คำสั่งต่อไปนี้เพื่อสร้าง Volume Group และเพิ่ม Physical Volumes ทั้งสองเข้าไป
sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
ตรวจสอบข้อมูล Physical Volumes อีกครั้งด้วยคำสั่ง pvs เพื่อดูว่า Physical Volumes ได้เชื่อมโยงกับ Volume Group ใหม่
sudo pvs
เพื่อดูสรุปสั้นๆ ของ Volume Group ให้ใช้คำสั่ง vgs
sudo vgs
VG #PV #LV #SN Attr VSize VFree
LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
ตอนนี้ Volume Group ของคุณมีสอง Physical Volumes ไม่มี Logical Volume และมีความจุรวมของอุปกรณ์ที่เชื่อมโยงทั้งหมด
การสร้าง Logical Volumes จาก Volume Group
เมื่อคุณมี Volume Group พร้อมใช้งานแล้ว คุณสามารถจัดสรรพื้นที่จาก Volume Group เพื่อสร้าง Logical Volumes ได้ LVM จะจัดการและทำแผนที่ข้อมูลให้เอง คุณเพียงแค่กำหนดขนาดและตั้งชื่อ Logical Volume ในตัวอย่างนี้ เราจะสร้าง Logical Volumes 4 ตัวจาก Volume Group ดังนี้
- ขนาด 10G สำหรับโวลุ่ม “projects”
- ขนาด 5G สำหรับโวลุ่ม “www” ที่ใช้เก็บเนื้อหาเว็บ
- ขนาด 20G สำหรับโวลุ่ม “db” ที่ใช้เก็บฐานข้อมูล
Volume “workspace” ที่ใช้พื้นที่ที่เหลือทั้งหมด ใช้คำสั่ง lvcreate เพื่อสร้าง Logical Volumes โดยระบุ Volume Group ที่ต้องการดึงพื้นที่มาใช้งาน พร้อมตั้งชื่อด้วยออปชัน -n และระบุขนาดด้วย -L
sudo lvcreate -L 10G -n projects LVMVolGroup
sudo lvcreate -L 5G -n www LVMVolGroup
sudo lvcreate -L 20G -n db LVMVolGroup
คุณสามารถดูรายการ Logical Volumes และความสัมพันธ์กับ Volume Group ได้ด้วยคำสั่ง vgs พร้อมการแสดงผลเพิ่มเติม
sudo vgs -o +lv_size,lv_name
VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 10.00g projects
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 5.00g www
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 20.00g db
การใช้คำสั่งนี้จะเพิ่มคอลัมน์ lv_size และ lv_name เพื่อแสดงขนาดและชื่อของ Logical Volumes ที่ได้สร้างขึ้นสำหรับโวลุ่มสุดท้าย “workspace” คุณสามารถใช้พื้นที่ที่เหลือทั้งหมดได้โดยใช้ -l เพื่อระบุขนาดเป็นเปอร์เซ็นต์ ในที่นี้เราใช้ 100% ของพื้นที่ที่เหลือ
sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
ตรวจสอบข้อมูล Volume Group ด้วยคำสั่ง vgs พร้อมการแสดงข้อมูลเพิ่มเติม เพื่อดูว่าพื้นที่ทั้งหมดถูกใช้งานแล้ว
sudo vgs -o +lv_size,lv_name
VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 4 0 wz--n- 299.99g 0 10.00g projects
LVMVolGroup 2 4 0 wz--n- 299.99g 0 5.00g www
LVMVolGroup 2 4 0 wz--n- 299.99g 0 20.00g db
LVMVolGroup 2 4 0 wz--n- 299.99g 0 264.99g workspace
ตอนนี้ “workspace volume” ถูกสร้างขึ้น และ Volume Group “LVMVolGroup” ถูกใช้จนเต็ม
Formatting and Mounting the Logical Volumes
ตอนนี้คุณได้สร้าง Logical Volumes เรียบร้อยแล้ว คุณสามารถใช้งานพวกมันได้เหมือนกับ block devices ทั่วไปLogical Devices เหล่านี้สามารถเข้าถึงได้จากไดเร็กทอรี /dev เหมือนกับอุปกรณ์จัดเก็บข้อมูลอื่น ๆ โดยมีสองเส้นทางที่คุณสามารถเข้าถึงได้
- /dev/volume_group_name/logical_volume_name
- /dev/mapper/volume_group_name-logical_volume_name
เพื่อ format Logical Volumes ทั้ง 4 ด้วยไฟล์ระบบ Ext4 ให้ใช้คำสั่งต่อไปนี้
sudo mkfs.ext4 /dev/LVMVolGroup/projects
sudo mkfs.ext4 /dev/LVMVolGroup/www
sudo mkfs.ext4 /dev/LVMVolGroup/db
sudo mkfs.ext4 /dev/LVMVolGroup/workspace
หรือคุณสามารถใช้เส้นทาง /dev/mapper ดังนี้
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace
หลังจาก format แล้ว ให้สร้างจุดเมานต์ (Mount Points) สำหรับ Logical Volumes แต่ละตัว
sudo mkdir -p /mnt/{projects,www,db,workspace}
จากนั้นเมานต์ Logical Volumes ไปยังจุดที่คุณสร้างขึ้น
sudo mount /dev/LVMVolGroup/projects /mnt/projects
sudo mount /dev/LVMVolGroup/www /mnt/www
sudo mount /dev/LVMVolGroup/db /mnt/db
sudo mount /dev/LVMVolGroup/workspace /mnt/workspace
เพื่อให้ระบบเมานต์ Logical Volumes โดยอัตโนมัติทุกครั้งที่บูต ให้แก้ไขไฟล์ /etc/fstab โดยใช้โปรแกรมแก้ไขข้อความที่คุณชื่นชอบ ในตัวอย่างนี้เราจะใช้ nano
sudo nano /etc/fstab
หลังจากแก้ไขไฟล์เรียบร้อยแล้ว ให้บันทึกและออกจากโปรแกรม ถ้าคุณใช้ nano ให้กด CTRL+c, จากนั้น y, แล้วกด ENTER ระบบปฏิบัติการของคุณจะทำการเมานต์ LVM Logical Volumes โดยอัตโนมัติเมื่อมีการ boot