วันอาทิตย์ที่ 12 พฤศจิกายน พ.ศ. 2549

Linux กับ software RAID part I

เดิมผมค่อนข้างเชื่อมั่นกับ hardware RAID (แท้ๆ) มากกว่า ด้วยว่าเคยใช้งานมัน ชอบที่มันทำงานที่ระดับล่างไปเลย และเชื่อว่า hardware RAID ทำงานเร็วกว่า software RAID และทราบว่าจะจัดการกับมันอย่างไรเมื่อดิสก์มีปัญหา อีกอย่างคือสะดวกดี ไม่ต้องทำอะไรที่ตัว OS คือ ทำ volume RAID เสร็จแล้ว OS จะมองเห็นเป็นฮาร์ดดิสก์ลูกใหญ่ๆ ลูกเดียว

พอดีว่าเครื่องพีซีที่บ้าน จะลง Gentoo ใหม่อยู่แล้ว ก็มีโจทย์ว่า Gentoo มันต้องคอมไพล์อะไรๆ ใหม่ค่อนข้างบ่อย และสังเกตว่า มันคอมไพล์ช้าเพราะดิสก์ ถ้าทำ raid-0 ได้ก็คงช่วยได้มาก เลยศึกษาเกี่ยวกับ software RAID บน Linux ดีๆ ก็พบว่า มันก็น่าใช้เหมือนกันนะ มันยืดหยุ่นกว่าด้วย และเรื่องประสิทธิภาพเค้าก็บอกว่าด้วยประสิทธิภาพอันเหลือเฟือของคอมพิวเตอร์ทั่วไปในปัจจุบัน ทำให้ software RAID มีประสิทธิภาพไม่ด้อยกว่า hardware RAID เลย

จุดเด่นของการใช้ software RAID คือความยืดหยุ่นในการเลือกใช้ RAID เพราะว่าการคอนฟิกจะทำในระดับ partition ไม่ใช่ทั้งดิสก์เหมือน hardware RAID เราจึงสามารถใช้ได้ทั้ง RAID0, RAID1 หรืออื่นๆ ได้พร้อมๆ กันโดยแบ่งพาร์ทิชันกัน ดังนั้น มีฮาร์ดดิสก์แค่สองลูก ขนาดอาจจะไม่เท่ากันก็ได้ ก็ทำ RAID ได้แล้ว

ข้อดีของการใช้ RAID จะมุ่งไปที่ 3 เรื่อง คือ ความปลอดภัย, ความเร็ว และการรวมขนาดให้ใหญ่ขึ้น ซึ่ง RAID แต่ละ level จะไม่เหมือนกัน เช่น RAID0 (stripping) จะได้ขนาดรวมที่เพิ่มขึ้นตามขนาดจริง เช่น 10G 2 ตัว ก็เป็น 20G ได้ความเร็วเพิ่มขึ้น (ปกติก็เกือบๆ 2 เท่า ตามทฤษฎี) แต่ความปลอดภัยกลับลดลง เพราะฮาร์ดดิสก์เสียเพียงตัวเดียว ข้อมูลก็เสียหมด ส่วน RAID1 (mirrorring) ขนาดจะเท่ากับดิสก์เพียงตัวเดียว ความเร็วเท่าเดิม แต่ความปลอดภัยสูงขึ้น คือมีดีที่ความปลอดภัยอย่างเดียว นอกจากนี้ยังมี RAID level อื่นๆ ซึ่งจะได้กล่าวถึงในโอกาสต่อไป

ภาคนี้จะมาดูคำสั่งในการสร้าง RAID อย่างง่ายๆ กันก่อน โดยจะใช้ mdadm นะครับ เพราะใช้ง่ายกว่า raidtools สมมติว่าจะเอา /dev/hda1 กับ /dev/hdb1 มาทำเป็น raid1 หรือ mirror อ่อ สอง device นี้ควรมีขนาดเท่ากัน ถ้าไม่เท่า มันจะยึดตัวที่ขนาดเล็กกว่าเป็นหลัก

คำเตือน: การแบ่งพาร์ทิชันใหม่ จะทำให้สูญเสียข้อมูล ควรทดลองกับ ฮาร์ดดิสก์ที่ไม่มีข้อมูลเท่านั้น

ขั้นแรกก็สร้างพาร์ทิชัน hda1 กับ hdb1 โดยอาจจะใช้คำสั่ง fdisk หรือ cfdisk และกำหนดชนิดเป็น "Linux raid autodetect" มี id = fd จากนั้นก็

# mdadm --create /dev/md0 --auto=yes --level=raid1 \
 --raid-devices=2 /dev/hda1 /dev/hdb1


ถ้า device ทั้งสองมี filesystem อยู่แล้ว จะมีข้อความเตือน และถ้า device แรกที่ระบุ มี filesystem มันจะ mirror ไปตัวที่สองทันที แต่ยังไงก็แนะนำว่าควรสร้าง filesystem ใหม่ดีกว่าครับ เพราะผมลองไม่สร้างใหม่ fsck มันจะบ่นตอนบูตทุกที ตอนนี้ลองดูสถานะของ md หน่อยแล้วกันครับ

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hdb1[1] hda1[0]
      104320 blocks [2/2] [UU]

unused devices: 


สร้าง filesystem แนะนำให้ใช้ ext3 ครับ ผมว่า stable ที่สุดแล้วในขณะนี้

# mkfs.ext3 /dev/md0
# mkdir /mnt/raid1
# mount /dev/md0 /mnt/raid1


ก็จะสามารถบันทึกข้อมูลไว้ที่ /mnt/raid1 โดยข้อมูลจะถูกบันทึกไว้พร้อมๆ กันทั้ง /dev/hda1 และ /dev/hdb1 ซึ่งหากฮาร์ดดิสก์ตัวใดตัวหนึ่งมีปัญหา ก็ยังสามารถเมานท์โดยตรงเป็น ext3 ได้เลย

2 ความคิดเห็น :

  1. ได้ยินมาว่า swraid นั้น เร็วกว่า hwraid มากพอสมควร
    http://www.thaihosttalk.com/th1/index.php?topic=1...

    ตอบลบ
  2. โอว ขอบคุณครับ สำหรับลิงก์



    เป้นแหล่งข้อมูลที่บอกว่า swraid เร็วกว่า hwraid ไม่ใช่แค่ "ไม่ด้อยกว่า" อย่างที่ผมบอกไป



    ว่างๆ จะมาเขียนประสบการณ์ sw raid ต่อ

    ตอบลบ