แสดงบทความที่มีป้ายกำกับ logival volume แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ logival volume แสดงบทความทั้งหมด

วันจันทร์ที่ 29 กรกฎาคม พ.ศ. 2556

setup filesystemที่สร้างใหม่ ให้ mount อัตโนมัติ

ในครั้งที่แล้ว ผมได้พูดถึงวิธีการสร้าง filesystem จาก  Logical Volume เหลืออีกขั้นตอนหนึ่งคือการกำหนดให้ filesystem ที่เราสร้าง  mount อัตโนมัติทุกครั้งที่เครื่อง boot

วิธีการง่ายๆ ครับ คือเพิ่มบรรทัดในไฟล์ /etc/fstab ไฟล์นี้ จะเป็นที่เก็บข้อมูลที่ช่วยในเราในการ mount  filesystem เข้า file structure ครับ โดย แต่ละบรรทัดใน /etc/fstab จะมีรูปแบบดังนี้ครับ

block_device    mount_point   filesystem_type   mount_options    fs_dump   check_on_boot

block_device : เป็นชื่อ device ที่จะทำการ mount
mount_point  :  directory ที่จะ mount filsystem
filesystem_type : ชนิดของ filesystem (ต้องตรงกับ ชนิดของ block_device)
mount_options  :  option ของการ mount ถ้ามี option  หลายตัวใช้ "," คั่นแต่ละ option ปกติเรากำหนดให้เป็น defaults
fs_dump :  เป็นการระบุว่า ให้คำสั่ง dump ทำการเก็บข้อมูลของ filesystem นี้ไว้(โดยใช้คำสั่ง dump) หรือเปล่า field นี้เป็นปัจจุบันนี้ field นี้ไม่ได้ใช้แล้วครับ แต่เราต้องระบุค่าไว้
check_on_boot : เป็นการบอกลำดับของการตรวจสอบ filesystem นี้ขณะที่มีการ  boot (โดยใช้คำสั่ง fsck )  ปกติ สำหรับ filesystem ทั่วไป ค่าจะเป็น 2 ยกเว้น  root filesystem (mount ที่  / ) ค่าจะเป็น 1  ครับ  ส่วน  filesystem ที่ไม่ต้องการใช้ ตรวจสอบ ค่าจะเป็น  0

จากตัวอย่างในครั้งที่แล้ว ผมจะเพิ่มบรรทัดนี้เข้าไปใน /etc/fstab


/dev/vol2/lvol0         /opt/zimbra         ext4     defaults 1   2

เป็นการบอก Linux ว่า ให้ mount /dev/vol2/lvol0  ซึ่งเป็น filesystem ชนิด ext4 ไปที่ /opt/zimbra  โดยใช้ default mount option ของ ext4 ครับ  ส่วนสอง field สุดท้าย ระบุเป็น 1 กับ 2 ไป

อีกอย่างนึงครับ เวลาเราจะ mount filesystem ไปที่ directory ไหน หรือที่ภาษา *nix (พวก Unix และ linux) เรียกว่า mount point ต้องดูให้ดีนะครับว่า directory นั้นต้องมีอยู่ ถ้าไม่มี ก็จัดการสร้าง directory  นั้นซะ
หลังจากเพิ่มบรรทัดนี้ ทดสอบการ mount โดยใช้คำสั่ง mount -a (mount all) หรือ reboot เครื่อง ก็ได้ครับ จะเห็น filesystem  ที่เราเพิ่งเพิ่มเข้าไปถูก mount  โดยอัตโนมัติ

หลังจากพูดปูพื้นฐานมาซะหลายตอน ครั้งหน้าผมจะพูดถึงวิธีการทำ snapshot logical volume เพื่อ backup zimbra กันนะครับ


วันอังคารที่ 16 กรกฎาคม พ.ศ. 2556

การนำ Logical Volume มาสร้างเป็น filesystem

จากตอนที่แล้ว เราได้ Logical Volume ที่พร้อมจะนำสร้างเป็น filesystem และ ไปใช้งานแล้วครับ

แต่ก่อนอื่น เราจะต้องนำ Logical Volume ที่ได้นี้ มาสร้างเป็น filesystem กันก่อนครับ วิธีการจะเหมือนกับการสร้าง filesystem จาก disk partition ทั้วไปครับ  เราใช้คำสั่ง  mkfs  ซึ่งมีรูปแบบดังนี้ครับ

mkfs -t fs_type  partition_name

fs_type  คือ ชนิดของ filesystem โดยปกติ จะเป็น ext3 หรือ ext4 ใน Linux รุ่นใหม่ๆ  จะใช้เป็น ext4 ครับ
partition_name คือ ชื่อของ disk partition ที่เรากำลังจะสร้างเป็น filesystem ในกรณีของเรา ก็คือชื่อของ Logical Volume โดยเราต้องระบบแบบเต็มคือขึ้นต้นด้วย /dev นะครับ โดยปกติ เป็น /dev/pv_name/lv_name

pv_name  จะเป็นชื่อของ physical volume ที่ logical volume นั้นอยู่ ส่วน lv_name เป็น ชื่อของ logical volume  ดังนั้นจากบทความที่แล้ว ชื่อของ disk partition  จะเป็น  /dev/vol2/lvol0

เมื่อ run คำสั่ง mkfs ถ้าไม่ติดอะไร จะได้ผลลัพท์คือ filesystem ที่สามารถนำไป mount (เชื่อมต่อ) เข้ากับ directory system ได้เลย จากตัวอย่างในรูป ผมสร้าง filesystem ชนิด ext4 บน  /dev/vol2/lvol0 เสร็จแล้ว mount  ไปที่ /opt/zimbra ครับ


รูป แบบของคำสั่ง mount คือ

mount device_name mount_point_dir

หลังจากที่เรา mount เสร้จ ต่อจากนี้ถ้าเรามีการสร้างไฟล์หรือ directory ภายใต้ mount_point_dir จะเป็นการใช้เนื้อที่บน device ที่เราเพิ่งทำการ  mount เข้าไปนะครับ

แต่อย่างไรก็ตาม การ mount แบบนี้ ถ้าเครื่องมีการ reboot   filesystem ที่เรา mount แบบนี้ จะไม่ถูก mount (แต่ยังอยู่) จะให้ mount อัตโนมัติเวลา boot เครื่อง จะมีขั้นตอนเพิ่มเติม ว่ากันในครั้งหน้าครับ

วันอาทิตย์ที่ 30 มิถุนายน พ.ศ. 2556

สร้าง Volume Group และ Logical Volume

หลังจากที่เราสร้าง partition บน disk  เป็น ชนิด Linux LVM เรียบร้อยแล้ว  ขั้นตอนถัดมาของการสร้าง logical volume ก็คือ เอา partition หรือ disk ทั้งลูก add เข้าไปใน Volume Group  สำหรับตัวอย่างนี้ ผมจะสร้าง Volume Group ใหม่ก่อนก็แล้วกันนะครับ

จากตัวอย่าง ผมมี  disk /dev/sdb อยู่ ซึ่งมี partition /dev/sdb1 และ /dev/sdb2  ทีถูกกำหนด type เป็น Linux LVM เรียบร้อยแล้ว

คำสั่งทีใช้ในการสร้าง Volume Group ก็คือ vgcreate (ย่อมาจาก Volume Group Create) รูปแบบการเรียกใช้พื้นฐานก็คือ

vgcreate VolumeGroupName  PhysicalDevicePath

โดย VolumeGroupName คือชื่อ ของ Volume Group ที่เราจะสร้าง จากตัวอย่างผมจะให้ชือว่า vol2
ส่วน PhysicalDevicePath จะเป็นชื่อของ disk  หรือ partition  โดยต้องระบุแบบ full path name หรือต้องอ้างถึงแบบมี /dev นำหน้าชื่อด้วย ในตัวอย่าง ผมใช้ /dev/sdb1

ในกรณีนี้ คำสั่งที่เราเรียกใช้คือ

vgcreate  vol2  /dev/sdb

หลังจากที่คำสั่งนี้ทำงานเสร็จเรียบร้อย เราจะได้ Volume Group ชื่อ vol2  โดยจะถูกสร้างเป็น device file อยู่ที /dev/vol2

ต่อจากนั้น เราจะสร้าง Logical Volume จากเนื้อที่ใน  Volume Group  vol2 ที่เพิ่งถูกสร้างมาหมาดๆ โดยใช้คำสั่ง lvcreate (logical volume create) โดยมีรูปแบบก็คือ

lvcreate -L LogicalVolumeSize  VolumeGroupName|VolumeGroupPath

LogicalVolumeSize  :  เป็นขนาดของ  Logical Volume ที่เราจะสร้าง  เราสามารถระบบุหน่วยเป็น  K,M,G (kilobyte, Megabyte, Gigabyte) ได้ด้วย ตามตัวอย่าง ผมใส่เป็น 5G

VolumeGroupName|VolumeGroupPath : ตรงนี้เราระบุชื่อของ  Volume Group โดยจะระบุแค่ชื่อ หรือ ระบุแบบชื่อ device เต็มๆ คือมี /dev นำหน้าได้ด้วยครับ  จากตัวอย่าง ผมใช้ vol2

คำสั่งที่เรียกใช้จะเป็น

lvcreate -L 5G  vol2



เมื่อคำสั่งทำงานเสร็จ มันจะบอกชื่อของ Logical Volume ทีถุกสร้างขึ้นมา ซึ่งในกรณีนี้ผมไม่ได้ระบุชื่อ Logical Volume ที่จะสร้าง ระบบจะกำหนดชื่อให้เราเอง ในกรณีนี้คือ  lvol0  โดยจะมือชื่อ  device แบบเต็มๆ คือ /dev/vol2/lvol0  ซึ่งเป็น symbolic link ชี้ไปยังชื่อ device คือ /dev/dm-6 (บน CentOS 6) แต่ผมแนะนำให้ใช้ /dev/vol2/lvol0 ในการอ้างถึง Logical Volume นะครับ เพราะบางกรณี ถ้าเครื่องมีการ reboot ชื่อ device /dev/dm-N นี้ระบบอาจจะมีการกำหนดตัวเลข N กันใหม่ ซึ่งอาจจะเปลี่ยนแปลงไปได้

ถึงจุดนี้เราได้ Logical Volume ที่สามารถนำไปสร้างเป็น filesystem ได้แล้วครับ

วันศุกร์ที่ 21 มิถุนายน พ.ศ. 2556

การสร้าง Linux Partition เพื่อเป็น Physical Volume

ครั้งที่แล้วเราพูดถึงวิธีหาว่า disk ในระบบมีอะไรบ้าง ครั้งนี้ เราจะพูดถึงการสร้าง Linux Partition เพื่อจะใช้เป็น Physical Volume กันครับ
หลายๆ ท่านคงจะพอทราบแล้วว่า คำสั่งทั่วไปที่ใช้ในการสร้าง partition บน Linux คือ fdisk  รูปแบบพื้นฐานการเรียกใช้คำสั่งนี้ คือ  fdisk ตามด้วยชื่อ device  โดยชื่อ device นี้ต้องระบุแบบเต็มคือระบุ /dev ด้วย เช่น 

# fdisk /dev/sdb

อีกอย่างที่ไม่ควรลืมก็คือ การเรียกใช้คำสั่งนี้ ต้อง Login หรือ su เป็น root นะครับ


หลังจากที่เรียกใช้ fdisk แล้ว ถ้าเป็น disk ที่ไม่เคยมี partition อยุ่ก่อน คำสั่งนี้จะแสดง warning message ขึ้นมา ไม่ต้องสนใจก็ได้ครับ ต่อจากนั้น fdisk จะขึ้นบรรทัด prompt มาให้เราป้อนคำสั่ง

Command (m for help) :

ถึงตรงนี้ เราสามารถเรียกดูว่า มีคำสั่งอะไรให้ใช้ได้บ้าง โดยการกด  m ครับ 

คำสั่งที่ใช้สร้าง partition ใหม่ คือ n (new partition) ถ้าเรากด n จากนั้น  fdisk จะให้เราใส่ข้อมูลของ partition ที่เราจะสร้างตามนี้ครับ 
  • ชนิด partition สร้าง primary  (กด p ) หรือ extend partition (กดปุ่ม e)  เราเลือก p ครับ 
  • กำหนด partition number ใส่ค่าแรกที่ fdisk แนะนำ (1-4) คือ 1 ในกรณีที่มี  partition อื่นอยู่แล้ว เราก็ใส่หมายเลขต่อไปเลยครับ 
  • เลือก cylinder แรก ของ partition นี้ ปกติใช้ค่า default ที่ fdisk เลือกให้ ก็กด enter เลย
  • เลือก cylinder สุดทัายของ partition นี้ หรือเลือกขนาดของ  partition ปกติ ผมกำหนดขนาดของ partition ง่ายกว่า ในกรณีนี้เราต้องใส่เครื่องหมาย + ตามด้วยขนาด และตามด้วยหน่วยของขนาด (K,M,G) ครั้บ ถ้าไม่ใส่หน่วย fdisk จะเข้าใจว่าขนาดที่เราระบุ เป็น byte ครับ 
ถึงจุดนี้ fdisk จะทราบข้อมูลทั้งหมดที่จะใช้ในการสร้าง partition แล้ว แต่ยังไม่ได้สร้างจริงๆ
fdisk จะขึ้น prompt ให้เราป้อนคำสั่งถัดไป

ถึงตรงนี้ ถ้าเราอยากดูกว่า fdisk เตรียมจะสร้าง partition อะไรให้เราบ้าง เราสามารถกด p (print) เพื่อสั่งให้ fdisk พิมพ์ออกมาให้เราดู ในกรณีที่เรากำหนด partition ให้กับ  disk ว่างๆ ในตอนแรก ถ้าถึงขั้นตอนนี้เราจะเป็น /dev/sdb1


ขั้นตอนต่อมาคือ การกำหนด partition system id หรือชนิดของ system partition  ซึ่งเราต้องกด t (type)
จากนั้น fdisk จะให้เราป้อนเลขฐานสิบหก (hex code) ตามชนิดของ partition system id ที่เราจะระบุ ในกรณีของเรา ต้องป้อนค่า 8e ซึ่งก็คือ Linux LVM เสร็จแล้ว fdisk จะกลับมาที่  prompt 

ถ้าเราไม่สร้าง partition อื่นต่อ ขั้นตอนสุดท้ายคือ บอกให้ fdisk สร้าง partition ตามที่เราระบุไว้ โดยการป้อนคำสั่ง w (write) ซึ่งเป็นการบอก fdisk  ให้เขียนข้อมูลที่เรากำหนดไว้ทั้งหมด ลงไปใน disk เป็นอันเสร็จขั้นตอนครับ 

partition ที่เราสร้างได้ จะชื่อเหมือนกับ disk ครับ แล้วตามด้วยตัวเลข partition number ที่เราระบุตอนสร้าง เช่นในกรณีนี้เราสร้าง partition บน /dev/sdb  disk เราจะได้ partition ชื่อ /dev/sdb1 ครับ เอา partition นี้ไปทำอย่างอื่นต่อได้เลยครับ 

วันอังคารที่ 18 มิถุนายน พ.ศ. 2556

LVM : การเตรียม Physical Volume

หลังจากที่พูดถึงทฤษฏีของ LVM ไปกันแล้ว มาเข้าภาคปฏิบัติกันนะครับ

     สิ่งแรกที่ต้องทำ คือเราต้องเตรียมหรือจัดหา physical volume กันก่อน ตัว physical volume จะเป็น disk partition  หรือเป็น harddisk ทั้งลูกก็ได้ครับ ถ้าจะใช้  harddisk ทั้งลูก  harddisk ต้องไม่มี  partition อยู่เลยครับ ถ้ามีต้องลบออกให้หมด แต่ถ้าเป็น disk partition เราต้องกำหนดชนิดของ partition ให้เป็น Linux LVM ครับ
    คำสั่งทีใช้จัดการ partition บน Linux คือ fdisk แต่ก่อนที่จะจัดการ harddisk เราต้องรู้ว่าในเครื่องเราจะอ้างถึง harddisk ได้อย่างไร
    ใน Linux เราจะอ้างถึง  harddisk  โดยใช้ชื่อไฟล์ ปกติ จะอยู่ใน directory /dev  โดย harddisk ชื่อจะขึ้นต้นด้วย hd ถ้า Linux เห็นเป็น ATA disk และจะขึ้นต้นด้วย sd ถ้า Linux เห็นเป็น SATA disk และชื่อ disk จะลงท้ายด้วยตัวอักษร a-z  เรียงกันไปเรื่อยๆครับ  แต่ถ้าเราไม่ทราบจริงๆ เราสามารถใช้คำสั่ง lsblk (list block) เพื่อดูว่ามี block device (disk) อะไรอยู่ในระบบบ้าง ในกรณีที่ disk มีการแบ่งเป็น partition ไว้แล้ว คำสั่งนี้จะแสดงถึง  partition ที่ถูกแบ่งไว้ด้วย ลองดูตัวอย่างในรูปครับ


      จากตัวอย่างนี้ มี disk อยู่สองลูกครับ ดูที่บรรทัดที่คอลัมน์ TYPE เป็น disk จะเห็นว่ามีสองบรรทัดคือ sda และ sdb โดย sda มีการแบ่ง partition อยู่แล้ว ส่วน sdb เป็น disk เปล่าๆ ยังไม่มีแบ่ง  partition  ครับ สำหรับคำสั่งนี้จะละ /dev/ ที่อยู่หน้าชื่อ disk ไว้นะครับ
     จากตัวอย่างนี้เราสามารถนำ /dev/sdb ไปสร้างเป็น volume group ได้เลยครับ ในครั้งต่อไป ผมจะพูดถึงวิธีการสร้าง partition ของ disk ที่จะนำไปใช้เป็น physical volume กันครับ

วันจันทร์ที่ 3 มิถุนายน พ.ศ. 2556

Logical Volume Manager(LVM): Concept

ครั้งที่แล้ว ผมได้พูดถึงการเพิ่มเนื้อที่ในระบบของ filesystem ก่อนที่จะมี LVM กันไปแล้ว เรามาดูกันว่า LVM คืออะไร ทำงาน และ ช่วยแก้ปัญหาอย่างไร

Logical Volume Manager (LVM) เป็นโปรแกรมระบบ (system software) ทำหน้าที่ช่วย map disk partition ที่กระจัดกระจาย อยู่ใน disk ลูกเดียวกัน หรือ อยู่ข้ามลูกกัน นำมายำรวมกันแล้วสร้างเป็น partition จำลอง ที่เสมือนมีเนื้อที่ติดกัน ที่พร้อมจะนำไปสร้างเป็น filesystem


เราเริ่มจาก มี disk ซึ่งมีที่ว่างอยู่ อาจจะว่างทั้งลูกเหมือนในรูป หรือว่างเป็นส่วนๆ ก็ได้ครับ เนื้อที่ว่างเหล่านี้แต่ละอันเรียกว่า physical volume (PV) เราเอาเนี้อที่เหล่านี้ มารวมกันสร้างเป็น disk จำลองก้อนใหญ่ หรือ ศัพท์ของ LVM  เรียกว่า volume group (VG) โดย เนื้อที่ใน PV จะถูกแบ่งย่อยออกเป็นส่วนย่อยๆอีก เรียกว่า physical extent (PE) ซึ่งปกติมีขนาด 4M ตัว PE นี้จะเป็น unit ย่อยของเนื้อ disk ที่เราจะสามารถจองให้กับ volume group ได้ ดังนั้น physical volume แต่ละอันต้องมีขนาดเป็นจำนวนเท่าของ physical extent  ด้วย

พอได้แบบนี้ เราก็ตัดแบ่งเนื้อที่ใน volume group มาสร้างเป็น partition ย่อยๆ โดยจะดึงจาก volume group มาเป็นส่วนๆ เท่ากับขนาดของ physical extent มาประกอบกัน เป็น partition จำลองหนึ่งอัน ศัพท์ของ LVM จะเรียก partition  นี้ว่า logical volume (LV)  เราก็เอา logical volume นี้หละครับ ไปสร้างเป็น filesystem แทน เนื้อที่แต่ละ partition จริงๆ บน disk

ถ้าเราสามารถดูในรายละเอียดย่อยในระดับ PE  ของ LV  ได้ จะพบว่า LV หนึ่งก้อน ประกอบด้วย PE ซึ่งอาจจะมาจากหลากหลาย  PV ครับ


วันพฤหัสบดีที่ 23 พฤษภาคม พ.ศ. 2556

ระบบ filesystem ก่อนจะมี Logical Volume Manager (LVM)

ตามที่ได้เขียนไว้ครั้งที่แล้ว ว่าเราจะเกริ่นเรื่อง  Logical Volume Manager (LVM)  กัน แต่พอลองเรียบเรียงแล้ว เพื่อให้เนี้อหาในแต่ละตอนไม่ยาวมาก เลยจะขอตัดเป็นตอนสั้นๆ ก็แล้วกันนะครับ โดยตอนนี้ จะเล่าถึงประวัติศาสตร์ ระบบการใช้งาน disk และ Linux partition ในยุคแรกๆ ก่อนจะมี LVM

บน Linux (และ Unix)  การนำเนื้อที่ของ disk มาใช้งาน เราจะต้องจอง disk เป็นส่วนๆ (partition) แล้ว นำมา format สร้างเป็น filesystem หลังจากนั้นก็นำไป เชื่อมต่อ (mount) กับ directory  โดยการ mount เราต้องกำหนด mount point ด้วยครับ ว่า disk partition นั้น จะ mount ที่จุดไหน

โดยปกติ จะมี disk partition แรก mount  ที่ "/" directory หรือที่เราเรียกว่า root directory ครับ ใน directory นี้ และ directory ย่อยๆ ลงไป ถ้ามีการสร้างไฟล์ ก็จะกินเนื้อที่ของ disk partition นี้

แต่ถ้าเรามี disk อีก partition ที่สอง เพิ่มเข้ามา และ mount อยู่ที่ /usr การสร้างไฟล์ หรือ sub directory ย่อย ภายใต้ /usr จะใช้เนื้อที่ของ partition ที่สองครับ ไม่เกี่ยวข้องกับ partition แรก

disk แต่ละ partition ที่เรานำมา mount เข้ากับ directory tree  ถ้าเราจะดูว่าในเครื่องเรา มี filesystem  อะไรอยู่บ้าง mount อยู่ที่ไหน ก็ใช้คำสั่ง df ดูได้ครับ

การเพิ่มขยาย disk ของ Unix และ Linux ยุคแรกๆ ก็จะใช้วิธีการ mount disk เพิ่มแบบนี้หละครับ


การจอง partition เพื่อจะนำมาสร้างเป็น filesystem แบบนี้ มีข้อจำกัดคือ

1) เนื้อที่ในแต่ละ partition ต้องเป็นเนื้อที่ที่อยู่ติดต่อกัน 
2) ต้องอยู่บน harddisk ลูกเดียวกันเท่านั้น

การขยายเนื้อที่ใน filesystem  จะลำบากมาก ถ้าไม่มีเนื้อที่ติดกันกับ filesystem เดิมเหลืออยู่ ปกติก็คือ

1) ต้องจองเนื้อที่ใน partition ใหม่ ที่ใหญ่กว่าเดิม
2) copy ข้อมูลไป ยัง partition ใหม่
3) unmount filesystem เดิม
4) mount filesystem ใหม่ที่ mount point เดิม

วุ่นวายดีไหมครับ นี่แบบย่อๆ นะที่จริงซับซ้อนกว่านี้อีกนะ

ซึ่งการ unmount filesystem ได้นั้น จะต้องไม่มี process ไหนใช้งาน file หรือ directory บน filesystem นั้น ทำให้ การขยายบาง filesytem ที่ระบบใช้งานตลอด เช่น /usr หรือ /var ทำได้ค่อนข้างยาก ครับ

ถ้าทำได้ ก็จะมีปัญหาอีกอย่างคือ เนื้อที่ filesystem ของเดิมที่เลิกใช้แล้ว จะมีอยู่กระจัดกระจาย ไม่ติดต่อกัน บางที่เนื้อที่ว่างทั้ง disk เหลือพอ แต่อยู่กระจัดกระจาย จะเอามา recycle เพื่อสร้างเป็น filesytem ใหม่ ก็ทำได้แค่ filesystem ขนาดเล็กกว่า partition ที่มีอยู่ หรือเท่าเดิมเท่านั้นครับ

วันพุธที่ 15 พฤษภาคม พ.ศ. 2556

เกริ่นนำ zimbra backup

เรื่องที่กวนใจคนใช้ Zimbra Open Source version อย่างหนึ่งก็คือ ไม่มีระบบ backup มาให้

ที่จริง เราสามารถ backup zimbra ได้หลายแบบ แบบที่ง่ายๆ (ถึกๆ) ก็คือ backup ทั้ง /opt/zimbra (หรือ path ที่เราลง zimbra) ทั้งก้อนเลย เวลาเราจะ restore ก็  restore กลับมาทับทั้งหมด ก็สดวกดี

ข้อดีของวิธีนี้ก็คือ เราได้ตัว zimbra ในส่วนของ binary และรวมไปถึง data ทุกอย่างทั้ง mysql data, openldap data เนื้อเมล์ใน /opt/zimbra/store และ index ใน /opt/zimbra/index  เรียกว่าครบทุกอย่างเลย

แต่อย่างไรก็ตาม การ backup /opt/zimbra มีข้อควรระวังก็คือในระหว่างการ backup ต้องมีการ stop zimbra เสียก่อน ตามคำแนะนำของ zimbra open source ครับ (ส่วนเรื่องทำไมต้อง backup ระหว่างที่ zimbra หยุดทำงาน ผมจะเขียนถึงที่หลังละกัน) ปัญหาก็คือ ถ้า data ของ zimbra มีจำนวนมาก เวลาในการ backup จะใช้เวลานาน ซึ่งหมายถึง zimbra จะต้องหยุดทำงานเป็นเวลานานไปด้วย ซึ่งไม่ค่อยดีเท่าไหร่ ใช่ไหมครับ

จุดนี้ไม่ใช่ปัญหาใหญ่ เราสามารถดัดแปลงสิ่งที่ Linux มีมาให้อยู่แล้ว ใช้ในการ backup zimbra ได้ครับ โดยใช้ สิ่งที่เรียกว่า snapshot ของ Logical Volume Manager (LVM) ครับ โดยวิธีนี้  เราต้องสร้าง filesystem /opt/zimbra  ให้อยู่บน partition ที่เป็น Logical Volume(LV) แทนที่จะเป็น partition ที่สร้างจากการแบ่งเนื้อที่บน hardisk ตรงๆ  ซึ่งผมเคยแนะนำใน Zimbra Tips & Technique ตอนต้นๆ แล้วนะครับ แต่ผมขอสรุปอีกที สำหรับหลายๆท่านที่เพิ่งกด like  Thai Zimbra fan page ครับ

เหตุผลที่เราต้องทำแบบนี้ ก็เพราะ เราสามารถที่จะสร้าง copy ที่เสมือนถูก "หยุดเวลา" ไว้ ของ filesystem ที่ถูกสร้างอยู่บน LV ได้ เราเรียกสิ่งนี้หรือการทำแบบนี้ว่า snapshot โดยตัว filesystem ที่เป็นต้นแบบจะสามารถถูกใช้งานต่อ (มีการเปลี่ยนแปลงแก้ไขข้อมูล) ส่วน snapshot จะยังคงมีข้อมูลค้าง ณ.เวลาที่เราสร้าง snapshot นั้นไว้

พอเห็นภาพแล้วใช่ไหมครับ พอเราสามารถ สร้าง copy ที่ถูก "หยุดเวลา" ของ /opt/zimbra ได้ เราจะเสียเวลาในการ stop zimbra อยู่แค่ช่วงที่เราสร้าง snapshot filesystem ของ /opt/zimbra (ซึ่งกินเวลาแป็บเดียว) หลังจากนั้น เราสามารถ start zimbra ขึ้นมาทำงานต่อได้ ส่วนการ backup เราก็ทำในขณะที่ zimbra ทำงานอยู่ได้ โดย backup ข้อมูลจาก snapshot แทน

ตัว snapshot filesystem เอง ก็เสมือนเป็น filesystem ปกติธรรมดา ครับ ต้องมีการ mount ไปยัง directory ในระบบ จึงจะสามารถถูกใช้งานได้ เพียงแต่เราจะอ่านข้อมูลได้อย่างเดียว เปลียนแปลงแก้ไขข้อมูลไม่ได้

ปกติตัว snapshot จะไม่กินเนื้อที่ disk มาก ยกเว้นในกรณีที่ตัว disk ต้นแบบมีข้อมูลเปลี่ยนแปลงไปหลังจากที่มีการทำ snapshot ซึ่งตรงนี้ จะทำให้ snapshot กินเนื้อที่บน disk ครับ ดังนั้น ยิ่งปล่อยให้ snapshot filesystem อยู่ในระบบนาน ก็จะยิ่งกินเนื่อที่ disk ไปเรื่อยๆ แต่พอเราลบ snapshot LV ทิ้ง เนื้อที่ที่ใช้ไป ก็จะถูกคืนกลับสู่ LVM ครับ

บางระบบอาจมีการสร้าง filesystem  ที่ /opt/zimbra อยู่ มาจาก disk ที่อยู่บน NAS หรือ SAN ซึ่งพวกนี้ส่วนใหญ่ก็สามารถทำ snapshot ได้นะครับ ไม่ต้องใช้ความสามารถของ LVM  เลย

ครั้งต่อไป ผมจะพูดถึงทฤษฏีเบื้องต้นของ Logical Volume Manager เพื่อปูพื้นฐาน ก่อนจะพูดถึงเรื่องการทำ snapshot ในตอนต่อๆไป ครับ




วันเสาร์ที่ 16 มีนาคม พ.ศ. 2556

Zimbra Tip and Technique #3 : เหลือที่ว่างใน volume group

volume group ที่ filesystem /opt/zimbra อยู่ ควรเหลือเนื้อที่ไว้บ้างนะครับ อย่าใช้หมด (เอาไปให้กับ logical volume ที่อยู่ใน volume group จนหมด)

ที่ต้องเหลือว่างไว้ ก็เพื่อเผื่อทำ snapshot ของ filesystem /opt/zimbra ที่ผมพูดถึงในตอนที่แล้ว
การทำ snapshot ก็ของ logical volume ก็เหมือนกับการสร้าง copy ของ logical volume ณ. เวลาที่สร้างไว้ โดย ถ้าข้อมูลของต้นฉบับ ไม่มีการเปลี่ยนแปลง ข้อมูลใน logical volume ต้นฉบับกับ snapshot จะใช้ร่วมกัน ซึ่งทำให้ไม่กินเนื้อที่โดยรวมของ volume group เพิ่ม แต่ถ้าี ต้นฉบับมีการเปลี่ยนแปลง เนื้อที่ส่วนนั้น จะถูก copy เป็นสองชุด และข้อมูลที่ถูกแก้ไขจะถูกเขียนใน logical volume  ต้นฉบับ

จากที่ผมเขียนใน ตอนที่ 1  ตอนที่ 2 และตอนที่  3 นี้ จุดประสงค์ก็เพื่อจะ backup /opt/zimbra ครับ

ที่เราต้องทำ snapshot ก็เพราะ  โดยปกติ ใน zimbra open source จะbackup ต้อง stop zimbra ก่อน แล้วค่อย backup เสร็จแล้ว ค่อย start zimbra ขึ้นมาใหม่ ถ้าข้อมูลเยอะ backup นาน ก็หมายถึง zimbra ต้องหยุดทำงานนาน ซึ่งคงไม่ค่อยดีเท่าไหร่

แต่ถ้าทำ snapshot ระหว่างที่เรา stop zimbra เราก็แค่ทำ snapshot ของ  /opt/zimbra เสร็จแล้วก็ start zimbra ให้ทำงานต่อ แล้วเราก็ทำการ backup จาก snapshot  แทน แบบนี้ลดเวลา downtime ของการ  backup zimbra ไปได้เยอะเลยครับ