เครื่องลูกในระบบ Diskless
เมื่อเราลง Windows แล้วจะต้องทำตามขั้นตอนนี้
ก่อนที่จะส่งระบบ Windows นี้ขึ้นไปยัง Diskless Server
และกลายเป็น Image บนเครื่อง Server
เมื่อเราลง Windows แล้วจะต้องทำตามขั้นตอนนี้
ก่อนที่จะส่งระบบ Windows นี้ขึ้นไปยัง Diskless Server
และกลายเป็น Image บนเครื่อง Server
diskless,
nohdd, ... ฯลฯ มาบ่นความคิดพื้นฐานกันก่อนจะเริ่ม
diskless, nohdd,.. ฯลฯ คือชื่อเรียกของ
ระบบคอมพิวเตอร์ที่ไม่ต้องใช้ฮาร์ดดิสก์
ไม่มีฮาร์ดดิสก์ในเครื่องคอมพิวเตอร์
อันที่จริงก็ไม่ใช่เรื่องแปลกใหม่อะไร
จริงๆแล้วตั้งแต่เด็กๆ ที่ผมเริ่มใช้เครื่องคอมพิวเตอร์
จำได้ว่า ตอนนั้นเครื่องคอมพิวเตอร์ของผม
ก็ไม่มีฮาร์ดดิสก์เหมือนกัน.. ฮ่า!
ฮาร์ดดิสก์ไม่ใช่ส่วนสำคัญยิ่งยวดของระบบเครื่องคอมพิวเตอร์
มันก็คืออุปกรณ์สำหรับใช้ในการเก็บ ข้อมูล data โปรแกรม
ที่มีขนาดใหญ่ ราคาถูก ความเร็วสูง คุ้มค่าที่สุดในการใช้งาน
สิ่งสำคัญสำหรับเครื่องคอมพิวเตอร์ก็คือ os ต่างหาก
หากเครื่องคอมพิวเตอร์ไม่มี os (Operating System)
เครื่องคอมพิวเตอร์เครื่องนั้น ไม่สามารถทำอะไรได้เลย
เหมือนอ๊อฟติมัส ไพรม์ โดนแทงจากข้างหลัง
นอนแอ่งแม้ง ทำอะไรไม่ได้ เหมือนตายไปแล้ว
ถ้าเปรียบ hardware ในระบบคอมพิวเตอร์คือ ร่างกายมนุษย์
os ก็เปรียบเสมือนจิตวิญญาณ เครื่องคอมพิวเตอร์ที่ไม่มี os
ก็เปรียบเสมือนร่างกายที่ไม่มีจิตวิญญาณ นอนรอวันเน่าเปื่อยพุพัง
อ่า........ ~ ฟินาเล่!
os เป็น software เป็น data เป็นข้อมูล
ซึ่ง "จะต้อง" ถูกบรรจุอยู่ในอุปกรณ์เก็บข้อมูล
ชนิดใดชนิดหนึ่ง เพื่อให้เครื่องคอมพิวเตอร์เปิดนำไปใช้งานได้
สมัยก่อนที่ยังไม่มีฮาร์ดดิสก์ os ถูกเก็บเอาไว้ในแผ่นดิสก์
แผ่นขนาดเล็ก 3.5" นั่นแหละครับ..
ต่อเมื่อ os มีขนาดใหญ่มากขึ้น
จึงได้ขยับมาใส่ไว้ในฮาร์ดดิสก์แทน
กลับมาที่ diskless .. คือ
ระบบที่เครื่องคอมพิวเตอร์ไม่ต้องมีฮาร์ดดิสก์
หรือไม่มีพื้นที่เก็บข้อมูลใดๆในเครื่อง
คำถามแรกก็คือ "แล้วจะเอา OS ไปเก็บไว้ที่ไหน?"
ระบบ diskless นั้น เราจะเอา OS ไปฝากไว้เครื่องอื่น
ที่เชื่อมต่อกันอยู่ด้วยระบบเครือข่าย และเครื่องคอมพิวเตอร์
ก็จะต้องมีความสามารถทางด้าน network boot ด้วย
ความสามารถนี้อยู่ที่การ์ดแลน ซึ่งมีทั้ง onboard และการ์ดแลนแยก
ระบบ diskless เมื่อไม่มีฮาร์ดดิสก์ ความสำคัญจึงตกมาอยู่ที่การ์ดแลนแทน
อยากให้ดูว่าปกติแล้ว ฮาร์ดดิสก์ที่เราเชื่อมต่อกับระบบคอมพิวเตอร์
ที่เราใช้สาย IDE สาย SATA นั้นมีความเร็วสูงกว่าสายแลนมาก
เช่นสาย SATA 2.0 นั้นมีความเร็วที่ 3Gb/s ส่วนสายแลนนั้นมีสองแบบ
คือแบบ 10/100 ความเร็วสูงสุดที่ 100Mb/s หรือ
10/100/1000 ความเร็วสูงสุดที่ 1Gb/s ตามทฤษฎี
การเปลี่ยนจากสาย SATA 2.0 มาถ่ายโอนข้อมูลผ่านสายแลน
ซึ่งมีขนาดเล็กลง จึงทำให้ดูเหมือนว่าจะเป็นคอขวด
แต่.. จริงๆแล้วถึงแม้ว่าสาย SATA 2.0
จะส่งผ่านข้อมูลได้ความเร็วถึง 3Gb/s ก็ตาม
แต่ฮาร์ดดิสก์ทั่วๆไป ไม่ได้ใช้ความเร็วสูงถึงขนาดนั้น
จากการทดลองฮาร์ดดิสก์ความเร็วสูงในขณะนี้
อย่างเช่นรุ่น WD AAKS ก็จะมีความเร็วอยู่ประมาณ
100-120MB/s หรือประมาณ ไม่เกิน 1Gb/s
ก็ถือว่าเป็นการส่งผ่านข้อมูลที่สูง
สำหรับการใช้งานฮาร์ดดิสก์โดยทั่วไปอยู่แล้ว
ดังนั้น การใช้สายแลนระดับ 10/100/1000
จึงสามารถทดแทนความเร็วการเชื่อมต่อฮาร์ดดิสก์ในเครื่องได้
หรือสำหรับ 10/100 ก็จะทดแทนการใช้ฮาร์ดดิสกฺ์ได้
แต่ความเร็วก็จะค่อนข้างช้า อาจเทียบได้กับฮาร์ดดิสก์ยุคเก่า
ที่ความเร็วประมาณ 10-15MB/s เท่านั้น
สรุปตรงนี้ก็คือ diskless นั้นการส่งผ่านข้อมูลต้องทำผ่านสายแลน
ทั้งนั้นเราให้ความสำหรับกับการ์ดแลน และระบบเครือข่าย
โดยถ้าเป็นไปได้ ควรใช้ระบบเครือข่ายแบบ 10/100/1000 จะดีกว่า
ปัญหาต่อมาก็คือ การใช้งานระบบ diskless นั้น
ถ้าหากเราแค่ย้ายการใช้งานฮาร์ดดิสก์
ในเครื่องคอมพิวเตอร์เครื่องเดียวมาไว้บนเซิร์ฟเวอร์
ก็คงเป็นเรื่องที่ค่อนข้างพิลึก
ด้วยความยุ่งยากของการติดตั้ง การดูแล นั้น
ถ้าคุณมีเครื่องคอมพิวเตอร์เครื่องเดียว ขอแนะนำว่า
เก็บฮาร์ดดิสก์ไว้ในเครื่องเหอะ
diskless นั้น เหมาะกับระบบเครือข่ายที่มีเครื่องคอมพิวเตอร์หลายๆเครื่อง
เพราะเราเอาฮาร์ดดิสก์ของเครื่องคอมพิวเตอร์ในเครือข่ายออกไป
มาใช้ฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์เครื่องเดียว
ทีนี้ปัญหาจะเกิด เพราะการใช้งานฮาร์ดดิสก์
บนเครื่องเซิร์ฟเวอร์เครื่องเดียว จากเครื่องคอมพิวเตอร์ทั้งเครือข่าย
ทำให้ฮาร์ดดิสก์เรา(ที่ทำงานช้ากว่าอุปกรณ์อื่นๆอยู่แล้ว) ทำงานไม่ทัน
เหมือนเครื่องคอมพิวเตอร์ทั้งเครือข่าย แย่งกันใช้ฮาร์ดดิสก์ลูกเดียว
เหมือนคุณไปอินเดีย แล้วให้เงินเด็กขอทานซักคน (ลองไปดูแล้วจะรู้)
ถ้ามองอีกด้านหนึ่ง อันที่จริงแล้ว
การใช้งานฮาร์ดดิสก์ในเครื่อง ก็ใช่ว่าจะทำงานอยู่ตลอดเวลา
มันก็มีทำงานบ้าง พักบ้าง นู้นบ้าง นี่บ้าง อะไรบ้าง..
ถ้าจะมองจริงๆแล้ว ก็อาจจะทำงานซัก 10-20% ของเวลาใช้งานทั้งหมด
เพราะจริงๆแล้วไม่ใช่ทุกคนที่จะรู้ว่า
ฮาร์ดดิสก์นั้นจริงๆแล้วเรียกว่า "หน่วยความจำสำรอง"
การทำงานของระบบคอมพิวเตอร์
เมื่ออ่านข้อมูลจากหน่วยความจำสำรอง
เอามาเก็บไว้ที่หน่วยความจำหลัก
แล้ว CPU จะทำงานกับหน่วยความจำหลักแทน
หน่วยความจำหลัก ก็คือ "แรม" นั้นเอง..
เหมือนเวลาคุณเข้าเกม DotA ไง..
ก่อนเริ่มเกม มันก็จะโหลดข้อมูลจากฮาร์ดดิสก์ก่อน
จากนั้นมันก็จะทำงานกับข้อมูลที่อยู่ในแรมแทน
ด้วยเหตุนี้ จึงเป็นเหตุผลสนับสนุนให้ระบบ diskless
เครื่องคอมพิวเตอร์หลายเครื่องในเครือข่าย
สามารถใช้งานฮาร์ดดิสก์ ในเครื่องเซิร์ฟเวอร์เครื่องเดียวได้
แต่กระนั้น การปรับแต่งระบบฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์
ก็ยังเป็นสิ่งที่จำเป็นอยู่ดีนะครับ..
diskless, nohdd,.. ฯลฯ คือชื่อเรียกของ
ระบบคอมพิวเตอร์ที่ไม่ต้องใช้ฮาร์ดดิสก์
ไม่มีฮาร์ดดิสก์ในเครื่องคอมพิวเตอร์
อันที่จริงก็ไม่ใช่เรื่องแปลกใหม่อะไร
จริงๆแล้วตั้งแต่เด็กๆ ที่ผมเริ่มใช้เครื่องคอมพิวเตอร์
จำได้ว่า ตอนนั้นเครื่องคอมพิวเตอร์ของผม
ก็ไม่มีฮาร์ดดิสก์เหมือนกัน.. ฮ่า!
ฮาร์ดดิสก์ไม่ใช่ส่วนสำคัญยิ่งยวดของระบบเครื่องคอมพิวเตอร์
มันก็คืออุปกรณ์สำหรับใช้ในการเก็บ ข้อมูล data โปรแกรม
ที่มีขนาดใหญ่ ราคาถูก ความเร็วสูง คุ้มค่าที่สุดในการใช้งาน
สิ่งสำคัญสำหรับเครื่องคอมพิวเตอร์ก็คือ os ต่างหาก
หากเครื่องคอมพิวเตอร์ไม่มี os (Operating System)
เครื่องคอมพิวเตอร์เครื่องนั้น ไม่สามารถทำอะไรได้เลย
เหมือนอ๊อฟติมัส ไพรม์ โดนแทงจากข้างหลัง
นอนแอ่งแม้ง ทำอะไรไม่ได้ เหมือนตายไปแล้ว
ถ้าเปรียบ hardware ในระบบคอมพิวเตอร์คือ ร่างกายมนุษย์
os ก็เปรียบเสมือนจิตวิญญาณ เครื่องคอมพิวเตอร์ที่ไม่มี os
ก็เปรียบเสมือนร่างกายที่ไม่มีจิตวิญญาณ นอนรอวันเน่าเปื่อยพุพัง
อ่า........ ~ ฟินาเล่!
os เป็น software เป็น data เป็นข้อมูล
ซึ่ง "จะต้อง" ถูกบรรจุอยู่ในอุปกรณ์เก็บข้อมูล
ชนิดใดชนิดหนึ่ง เพื่อให้เครื่องคอมพิวเตอร์เปิดนำไปใช้งานได้
สมัยก่อนที่ยังไม่มีฮาร์ดดิสก์ os ถูกเก็บเอาไว้ในแผ่นดิสก์
แผ่นขนาดเล็ก 3.5" นั่นแหละครับ..
ต่อเมื่อ os มีขนาดใหญ่มากขึ้น
จึงได้ขยับมาใส่ไว้ในฮาร์ดดิสก์แทน
กลับมาที่ diskless .. คือ
ระบบที่เครื่องคอมพิวเตอร์ไม่ต้องมีฮาร์ดดิสก์
หรือไม่มีพื้นที่เก็บข้อมูลใดๆในเครื่อง
คำถามแรกก็คือ "แล้วจะเอา OS ไปเก็บไว้ที่ไหน?"
ระบบ diskless นั้น เราจะเอา OS ไปฝากไว้เครื่องอื่น
ที่เชื่อมต่อกันอยู่ด้วยระบบเครือข่าย และเครื่องคอมพิวเตอร์
ก็จะต้องมีความสามารถทางด้าน network boot ด้วย
ความสามารถนี้อยู่ที่การ์ดแลน ซึ่งมีทั้ง onboard และการ์ดแลนแยก
ระบบ diskless เมื่อไม่มีฮาร์ดดิสก์ ความสำคัญจึงตกมาอยู่ที่การ์ดแลนแทน
อยากให้ดูว่าปกติแล้ว ฮาร์ดดิสก์ที่เราเชื่อมต่อกับระบบคอมพิวเตอร์
ที่เราใช้สาย IDE สาย SATA นั้นมีความเร็วสูงกว่าสายแลนมาก
เช่นสาย SATA 2.0 นั้นมีความเร็วที่ 3Gb/s ส่วนสายแลนนั้นมีสองแบบ
คือแบบ 10/100 ความเร็วสูงสุดที่ 100Mb/s หรือ
10/100/1000 ความเร็วสูงสุดที่ 1Gb/s ตามทฤษฎี
การเปลี่ยนจากสาย SATA 2.0 มาถ่ายโอนข้อมูลผ่านสายแลน
ซึ่งมีขนาดเล็กลง จึงทำให้ดูเหมือนว่าจะเป็นคอขวด
แต่.. จริงๆแล้วถึงแม้ว่าสาย SATA 2.0
จะส่งผ่านข้อมูลได้ความเร็วถึง 3Gb/s ก็ตาม
แต่ฮาร์ดดิสก์ทั่วๆไป ไม่ได้ใช้ความเร็วสูงถึงขนาดนั้น
จากการทดลองฮาร์ดดิสก์ความเร็วสูงในขณะนี้
อย่างเช่นรุ่น WD AAKS ก็จะมีความเร็วอยู่ประมาณ
100-120MB/s หรือประมาณ ไม่เกิน 1Gb/s
ก็ถือว่าเป็นการส่งผ่านข้อมูลที่สูง
สำหรับการใช้งานฮาร์ดดิสก์โดยทั่วไปอยู่แล้ว
ดังนั้น การใช้สายแลนระดับ 10/100/1000
จึงสามารถทดแทนความเร็วการเชื่อมต่อฮาร์ดดิสก์ในเครื่องได้
หรือสำหรับ 10/100 ก็จะทดแทนการใช้ฮาร์ดดิสกฺ์ได้
แต่ความเร็วก็จะค่อนข้างช้า อาจเทียบได้กับฮาร์ดดิสก์ยุคเก่า
ที่ความเร็วประมาณ 10-15MB/s เท่านั้น
สรุปตรงนี้ก็คือ diskless นั้นการส่งผ่านข้อมูลต้องทำผ่านสายแลน
ทั้งนั้นเราให้ความสำหรับกับการ์ดแลน และระบบเครือข่าย
โดยถ้าเป็นไปได้ ควรใช้ระบบเครือข่ายแบบ 10/100/1000 จะดีกว่า
ปัญหาต่อมาก็คือ การใช้งานระบบ diskless นั้น
ถ้าหากเราแค่ย้ายการใช้งานฮาร์ดดิสก์
ในเครื่องคอมพิวเตอร์เครื่องเดียวมาไว้บนเซิร์ฟเวอร์
ก็คงเป็นเรื่องที่ค่อนข้างพิลึก
ด้วยความยุ่งยากของการติดตั้ง การดูแล นั้น
ถ้าคุณมีเครื่องคอมพิวเตอร์เครื่องเดียว ขอแนะนำว่า
เก็บฮาร์ดดิสก์ไว้ในเครื่องเหอะ
diskless นั้น เหมาะกับระบบเครือข่ายที่มีเครื่องคอมพิวเตอร์หลายๆเครื่อง
เพราะเราเอาฮาร์ดดิสก์ของเครื่องคอมพิวเตอร์ในเครือข่ายออกไป
มาใช้ฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์เครื่องเดียว
ทีนี้ปัญหาจะเกิด เพราะการใช้งานฮาร์ดดิสก์
บนเครื่องเซิร์ฟเวอร์เครื่องเดียว จากเครื่องคอมพิวเตอร์ทั้งเครือข่าย
ทำให้ฮาร์ดดิสก์เรา(ที่ทำงานช้ากว่าอุปกรณ์อื่นๆอยู่แล้ว) ทำงานไม่ทัน
เหมือนเครื่องคอมพิวเตอร์ทั้งเครือข่าย แย่งกันใช้ฮาร์ดดิสก์ลูกเดียว
เหมือนคุณไปอินเดีย แล้วให้เงินเด็กขอทานซักคน (ลองไปดูแล้วจะรู้)
ถ้ามองอีกด้านหนึ่ง อันที่จริงแล้ว
การใช้งานฮาร์ดดิสก์ในเครื่อง ก็ใช่ว่าจะทำงานอยู่ตลอดเวลา
มันก็มีทำงานบ้าง พักบ้าง นู้นบ้าง นี่บ้าง อะไรบ้าง..
ถ้าจะมองจริงๆแล้ว ก็อาจจะทำงานซัก 10-20% ของเวลาใช้งานทั้งหมด
เพราะจริงๆแล้วไม่ใช่ทุกคนที่จะรู้ว่า
ฮาร์ดดิสก์นั้นจริงๆแล้วเรียกว่า "หน่วยความจำสำรอง"
การทำงานของระบบคอมพิวเตอร์
เมื่ออ่านข้อมูลจากหน่วยความจำสำรอง
เอามาเก็บไว้ที่หน่วยความจำหลัก
แล้ว CPU จะทำงานกับหน่วยความจำหลักแทน
หน่วยความจำหลัก ก็คือ "แรม" นั้นเอง..
เหมือนเวลาคุณเข้าเกม DotA ไง..
ก่อนเริ่มเกม มันก็จะโหลดข้อมูลจากฮาร์ดดิสก์ก่อน
จากนั้นมันก็จะทำงานกับข้อมูลที่อยู่ในแรมแทน
ด้วยเหตุนี้ จึงเป็นเหตุผลสนับสนุนให้ระบบ diskless
เครื่องคอมพิวเตอร์หลายเครื่องในเครือข่าย
สามารถใช้งานฮาร์ดดิสก์ ในเครื่องเซิร์ฟเวอร์เครื่องเดียวได้
แต่กระนั้น การปรับแต่งระบบฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์
ก็ยังเป็นสิ่งที่จำเป็นอยู่ดีนะครับ..
diskless
มาต่อกันที่เรื่องขั้นตอนการทำนะครับ..
มาต่อกันเลย กับเรื่องของ diskless
จากตอนที่แล้วพูดถึงเรื่องของความสำคัญของระบบเครือข่าย
และการต่อใช้งานฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์
โดยสรุปก็คือ
หากเราต้องการให้ระบบการใช้งานฮาร์ดดิสก์
บนเซิร์ฟเวอร์ผ่านสายแลน มีประสิทธิภาพที่ดีนั้น
ควรต้องให้ความพิถีพิถัน กับการเดินสาย การวางเครื่อง
ผมคิดว่าร้านเน็ตที่มีสายแลนจำนวนมาก
และมักจะเดินไปคู่กับสายไฟ
บางร้าน เอาสายไฟเข้าไปวางในรางสายแลนก็มี
ผมเคยไปเข้าอบรมเรื่องของสายแลนที่ interlink
เค้าแนะนำว่า สายแลนนั้น ถึงแม้ว่าจะเป็นสายบิดเกลียว
แต่ก็ยังสามารถถูกรบกวนสัญญาณได้จากกระแสไฟฟ้า 220V ได้
ดังนั้น หากคุณจะเดินสายไฟไปคู่กับสายแลน
อย่างน้อยควรจะให้ห่างกันซัก 6 นิ้วขึ้นไป
และการเดินสายแลนนั้น ตามมุมห้อง
ไม่ควรหักสาย 90องศา ให้ดัดโค้งแทน
ผมก็ไม่รู้ว่าถูกหรือผิด เพียงแต่เค้าบอกมาแบบนี้ผมก็มาบอกต่อ
ที่ interlink เค้ามีอบรมความรู้ฟรี เดือนละ 3 รอบ(ถ้าจำไม่ผิด)
รอบนึงก็ทั้งวันเลย ถ้าจำไม่ผิด มีกินฟรีด้วยนะครับ อิอิ
ใครอยู่แถวรัชดา ก็ลองไปดูได้ครับ..
ผมเองได้ลองเข้าหัวสายใยแก้วก็ที่นี่แหละ
สรุปเรื่องของระบบเครือข่ายที่ใช้ ที่ว่าเป็นกิกะบิต
ก็จะประกอบไปด้วย
1. การ์ดแลนที่สามารถ boot ผ่าน network ได้
2. สายแลนที่มีความสามารถในระบบ Gigabit เช่น Cat5e หรือ Cat6 ขึ้นไป
3. Gigabit Switching Hub
4. การเดินสายจัดวาง
กลับมาที่ diskless อีกเรื่องคือ
เรื่องของการใช้ระบบฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์
การใช้งานฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์จากเครื่องในวงแลน
ปริมาณการใช้งานข้อมูลมหาศาล ทำให้ต้องเพิ่มประสิทธิภาพของฮาร์ดดิสก์
ไม่ว่าจะเป็นการทำ Raid ที่จะเพิ่มขนาด ความเร็ว
หรือเพิ่มความปลอดภัยโดยการสำรองข้อมูล
ก็เป็นสิ่งที่ควรทำ ทั้งนี้ขึ้นอยู่กับขนาดของระบบที่คุณมี
แต่เรื่องนี้เป็นเรื่องที่จะพูดคุยกันภายหลัง
เพราะมันอยู่ในส่วนของ performance tuning
สำหรับการทำ diskless นั้น สิ่งสำคัญเรื่องหนึ่งที่คุณจะต้องประสบ
พบเจออยู่เป็นประจำ นั่นคือคำว่า image
image คืออะไร?
image file ก็คือไฟล์ที่รวบรวมข้อมูลของดิสก์ที่เราต้องการให้เป็นไฟล์ๆเดียว
ถ้าหากลองเปิด My Computer คุณจะเห็น Drive C:
และภายในจะมีโฟลเดอร์และไฟล์ต่างๆ เก็บเอาไว้มากมาย
เราสามารถเอาข้อมูลทั้งหมดนั้น มาเก็บเอาไว้ใน image file อันเดียวได้
ถ้าหากคุณเคย Ghost ข้อมูลมาบ้างก็จะเข้าใจโดยไม่ยาก
สำหรับคนไม่เคย การ Ghost นั้นก็คือการคัดลอกข้อมูล
ภายในไดร์ฟต้นฉบับไปเก็บไว้ที่อีกไดร์ฟหนึ่ง หรือเก็บไว้เป็น image file ก็ได้
สิ่งที่คุณต้องทำในระบบ diskless ก็คือการเล่นกับ image นั่นเอง
คุณมีเครื่องคอมพิวเตอร์ต้นฉบับ มีฮาร์ดดิสก์ในเครื่องนั้น
คุณติดตั้ง Windows ลงไปในเครื่องนั้น
จากนั้นทำให้ข้อมูลภายในฮาร์ดดิสก์กลายเป็น image file ไปเก็บไว้ใน server
แล้วให้เครื่อง server ทำการปล่อย image file นั้นออกมาในระบบ diskless
เพื่อให้เครื่องคอมพิวเตอร์เครื่องอื่นๆไปใช้ image file นั้น
เปรียบเสมือนฮาร์ดดิสก์ลูกหนึ่งในเครื่อง
สิ่งแรกที่เราจะลองทำกันเป็นตัวอย่างก็คือ
การจัดการเอาข้อมูลในฮาร์ดดิสก์ให้กลายเป็น image ไปเก็บไว้ในเครื่อง server
และจัดการเซ็ตเซิร์ฟเวอร์ให้ปล่อย image นั้นออกมาในระบบ diskless
ให้เครื่องคอมพิวเตอร์ที่ไม่มีฮาร์ดดิสก์ได้ใช้งานระบบ diskless นั้น
นี่เป็นระบบพื้นฐานที่สุดที่เราจะมาลองกันก่อน
โดยผมจะค่อยๆเริ่มอย่างง่ายๆไปยากๆครับ
ขั้นตอนที่จะทดลองกันก็คือ
1. ลง Windows XP ในเครื่องคอมพิวเตอร์
2. จัดการให้ Windows XP นั้นพร้อมที่จะเป็น image สำหรับ diskless
3. ทำให้ Windows XP ในฮาร์ดดิสก์นั้นกลายเป็น image ในเครื่อง server
4. เซ็ตเซิร์ฟเวอร์ให้ปล่อย image นั้นออกมาในระบบ diskless โดยเลือกใช้งานแบบ AoE (ATA over Ethernet) ซึ่งง่ายที่สุด
5. เซ็ตเซิร์ฟเวอร์ส่วนอื่นๆเช่น tftp, dhcp ให้พร้อมใช้งานระบบ diskless
6. ทดลองใช้งานเครื่องคอมพิวเตอร์ที่ไม่มีฮาร์ดดิสก์
สำหรับขั้นตอนที่ 1 และ 2 นั้น ได้นำเสนอในรูปแบบวีดีโอไปแล้ว
ต่อไปจะทำในขั้นตอนที่ 3 - 6 ครับ
คอยติดตามตอนต่อไป
มาต่อกันเลย กับเรื่องของ diskless
จากตอนที่แล้วพูดถึงเรื่องของความสำคัญของระบบเครือข่าย
และการต่อใช้งานฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์
โดยสรุปก็คือ
หากเราต้องการให้ระบบการใช้งานฮาร์ดดิสก์
บนเซิร์ฟเวอร์ผ่านสายแลน มีประสิทธิภาพที่ดีนั้น
ควรต้องให้ความพิถีพิถัน กับการเดินสาย การวางเครื่อง
ผมคิดว่าร้านเน็ตที่มีสายแลนจำนวนมาก
และมักจะเดินไปคู่กับสายไฟ
บางร้าน เอาสายไฟเข้าไปวางในรางสายแลนก็มี
ผมเคยไปเข้าอบรมเรื่องของสายแลนที่ interlink
เค้าแนะนำว่า สายแลนนั้น ถึงแม้ว่าจะเป็นสายบิดเกลียว
แต่ก็ยังสามารถถูกรบกวนสัญญาณได้จากกระแสไฟฟ้า 220V ได้
ดังนั้น หากคุณจะเดินสายไฟไปคู่กับสายแลน
อย่างน้อยควรจะให้ห่างกันซัก 6 นิ้วขึ้นไป
และการเดินสายแลนนั้น ตามมุมห้อง
ไม่ควรหักสาย 90องศา ให้ดัดโค้งแทน
ผมก็ไม่รู้ว่าถูกหรือผิด เพียงแต่เค้าบอกมาแบบนี้ผมก็มาบอกต่อ
ที่ interlink เค้ามีอบรมความรู้ฟรี เดือนละ 3 รอบ(ถ้าจำไม่ผิด)
รอบนึงก็ทั้งวันเลย ถ้าจำไม่ผิด มีกินฟรีด้วยนะครับ อิอิ
ใครอยู่แถวรัชดา ก็ลองไปดูได้ครับ..
ผมเองได้ลองเข้าหัวสายใยแก้วก็ที่นี่แหละ
สรุปเรื่องของระบบเครือข่ายที่ใช้ ที่ว่าเป็นกิกะบิต
ก็จะประกอบไปด้วย
1. การ์ดแลนที่สามารถ boot ผ่าน network ได้
2. สายแลนที่มีความสามารถในระบบ Gigabit เช่น Cat5e หรือ Cat6 ขึ้นไป
3. Gigabit Switching Hub
4. การเดินสายจัดวาง
กลับมาที่ diskless อีกเรื่องคือ
เรื่องของการใช้ระบบฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์
การใช้งานฮาร์ดดิสก์ในเครื่องเซิร์ฟเวอร์จากเครื่องในวงแลน
ปริมาณการใช้งานข้อมูลมหาศาล ทำให้ต้องเพิ่มประสิทธิภาพของฮาร์ดดิสก์
ไม่ว่าจะเป็นการทำ Raid ที่จะเพิ่มขนาด ความเร็ว
หรือเพิ่มความปลอดภัยโดยการสำรองข้อมูล
ก็เป็นสิ่งที่ควรทำ ทั้งนี้ขึ้นอยู่กับขนาดของระบบที่คุณมี
แต่เรื่องนี้เป็นเรื่องที่จะพูดคุยกันภายหลัง
เพราะมันอยู่ในส่วนของ performance tuning
สำหรับการทำ diskless นั้น สิ่งสำคัญเรื่องหนึ่งที่คุณจะต้องประสบ
พบเจออยู่เป็นประจำ นั่นคือคำว่า image
image คืออะไร?
image file ก็คือไฟล์ที่รวบรวมข้อมูลของดิสก์ที่เราต้องการให้เป็นไฟล์ๆเดียว
ถ้าหากลองเปิด My Computer คุณจะเห็น Drive C:
และภายในจะมีโฟลเดอร์และไฟล์ต่างๆ เก็บเอาไว้มากมาย
เราสามารถเอาข้อมูลทั้งหมดนั้น มาเก็บเอาไว้ใน image file อันเดียวได้
ถ้าหากคุณเคย Ghost ข้อมูลมาบ้างก็จะเข้าใจโดยไม่ยาก
สำหรับคนไม่เคย การ Ghost นั้นก็คือการคัดลอกข้อมูล
ภายในไดร์ฟต้นฉบับไปเก็บไว้ที่อีกไดร์ฟหนึ่ง หรือเก็บไว้เป็น image file ก็ได้
สิ่งที่คุณต้องทำในระบบ diskless ก็คือการเล่นกับ image นั่นเอง
คุณมีเครื่องคอมพิวเตอร์ต้นฉบับ มีฮาร์ดดิสก์ในเครื่องนั้น
คุณติดตั้ง Windows ลงไปในเครื่องนั้น
จากนั้นทำให้ข้อมูลภายในฮาร์ดดิสก์กลายเป็น image file ไปเก็บไว้ใน server
แล้วให้เครื่อง server ทำการปล่อย image file นั้นออกมาในระบบ diskless
เพื่อให้เครื่องคอมพิวเตอร์เครื่องอื่นๆไปใช้ image file นั้น
เปรียบเสมือนฮาร์ดดิสก์ลูกหนึ่งในเครื่อง
สิ่งแรกที่เราจะลองทำกันเป็นตัวอย่างก็คือ
การจัดการเอาข้อมูลในฮาร์ดดิสก์ให้กลายเป็น image ไปเก็บไว้ในเครื่อง server
และจัดการเซ็ตเซิร์ฟเวอร์ให้ปล่อย image นั้นออกมาในระบบ diskless
ให้เครื่องคอมพิวเตอร์ที่ไม่มีฮาร์ดดิสก์ได้ใช้งานระบบ diskless นั้น
นี่เป็นระบบพื้นฐานที่สุดที่เราจะมาลองกันก่อน
โดยผมจะค่อยๆเริ่มอย่างง่ายๆไปยากๆครับ
ขั้นตอนที่จะทดลองกันก็คือ
1. ลง Windows XP ในเครื่องคอมพิวเตอร์
2. จัดการให้ Windows XP นั้นพร้อมที่จะเป็น image สำหรับ diskless
3. ทำให้ Windows XP ในฮาร์ดดิสก์นั้นกลายเป็น image ในเครื่อง server
4. เซ็ตเซิร์ฟเวอร์ให้ปล่อย image นั้นออกมาในระบบ diskless โดยเลือกใช้งานแบบ AoE (ATA over Ethernet) ซึ่งง่ายที่สุด
5. เซ็ตเซิร์ฟเวอร์ส่วนอื่นๆเช่น tftp, dhcp ให้พร้อมใช้งานระบบ diskless
6. ทดลองใช้งานเครื่องคอมพิวเตอร์ที่ไม่มีฮาร์ดดิสก์
สำหรับขั้นตอนที่ 1 และ 2 นั้น ได้นำเสนอในรูปแบบวีดีโอไปแล้ว
ต่อไปจะทำในขั้นตอนที่ 3 - 6 ครับ
คอยติดตามตอนต่อไป
diskless
ขั้นตอนต่อไป ถึงการ upload ข้อมูลใน harddisk
ขึ้นสู่ server
ขั้นตอนต่อไปคือการเอาข้อมูล Harddisk ส่งขึ้นไปบน ubuntu server
ซึ่งมีอยู่หลายวิธี ดังที่ได้บอกไปแล้วในตอนที่ผ่านมา
สำหรับทางที่ง่ายที่สุดก็คือการเปิด samba service บน ubuntu
แล้วใช้โปรแกรม dd for windows ทำการ upload ข้อมูลขึ้นไป ดังวีดีโอที่จะแสดงต่อไปนี้
วีดีโออันแรกจะแสดงถึงการเซ็ต samba บน ubuntu แบบง่ายๆ
ขั้นตอนต่อไปคือการเอาข้อมูล Harddisk ส่งขึ้นไปบน ubuntu server
ซึ่งมีอยู่หลายวิธี ดังที่ได้บอกไปแล้วในตอนที่ผ่านมา
สำหรับทางที่ง่ายที่สุดก็คือการเปิด samba service บน ubuntu
แล้วใช้โปรแกรม dd for windows ทำการ upload ข้อมูลขึ้นไป ดังวีดีโอที่จะแสดงต่อไปนี้
วีดีโออันแรกจะแสดงถึงการเซ็ต samba บน ubuntu แบบง่ายๆ
และไปที่ windows client จะโหลดโปรแกรม dd
for windows มา
สั่งคัดลอกข้อมูลจากฮาร์ดดิสก์เราขึ้นไปยังโฟลเดอร์ที่อยู่บน ubuntu ที่แชร์ไว้โดย samba
โปรแกรม dd นั้นต้องใช้ผ่านทาง command prompt
โดยให้คุณใช้คำสั่ง dd --list เพื่อแสดงรายชื่อ device ที่มีในเครื่องทั้งหมด
จากนั้นคำสั่งที่ใช้คือ
dd if=...ต้นทาง... of=...ปลายทาง... bs=512k --size --progress
ลองดูในวีดีโอนะครับ
http://www.youtube.com/watch?v=Guts3Uw_naQ&feature=player_embedded
สั่งคัดลอกข้อมูลจากฮาร์ดดิสก์เราขึ้นไปยังโฟลเดอร์ที่อยู่บน ubuntu ที่แชร์ไว้โดย samba
โปรแกรม dd นั้นต้องใช้ผ่านทาง command prompt
โดยให้คุณใช้คำสั่ง dd --list เพื่อแสดงรายชื่อ device ที่มีในเครื่องทั้งหมด
จากนั้นคำสั่งที่ใช้คือ
dd if=...ต้นทาง... of=...ปลายทาง... bs=512k --size --progress
ลองดูในวีดีโอนะครับ
diskless
จบภาค 1
หลังจากที่เรานำ image ไปเก็บไว้บน ubuntu server แล้ว
สิ่งที่จะต้องทำต่อไปก็คือ ทำให้ ubuntu server ให้บริการ image นั้น
แก่เครื่อง client ที่ร้องขอ ผ่านทางบริการ aoe
โดยโปรแกรม vblade
ซึ่งโปรแกรม vblade นั้นสามารถ download โดยใช้คำสั่ง
apt-get install vblade
ซึ่งโปรแกรม vblade สามารถเรียกใช้ได้สองแบบคือ
vblade และ vbladed (ต่างกันที่ตัว d ตามหลัง)
ตัวที่เราจะเรียกใช้ก็คือ vbladed
มันจะทำงานในลักษณะ background
ลักษณะคำสั่งก็คือ
vbladed [number] [number] [interface] [image]
[number] ทั้งสองตัวนั้น เป็นตัวระบุตำแหน่งของการปล่อยของ
โดยที่เครื่อง client ที่ต้องการใช้ image ที่ปล่อย
จะต้องเข้ามาที่ตำแหน่งเดียวกับที่ปล่อย
เช่นถ้าเราใช้ vbladed 0 0 เครื่องที่เข้ามาใช้ก็จะต้องรู้ว่าเข้าที่ตำแหน่ง 0 0
เอาไว้ใช้ในกรณีที่ปล่อย image ให้เครื่องหลายๆเครื่อง
เราก็เปลี่ยนตำแหน่งไปตามเครื่องต่างๆ เช่น
0 0 สำหรับเครื่องที่ 1
0 1 สำหรับเครื่องที่ 2
เป็นต้น
[interface] คือการ์ดแลนที่เครื่อง ubuntu ใช้งาน
และต้องการจะปล่อย image ไปทางนั้น
[image] ก็ image นั่นแหละ ตรงตัวเลย..
ดูตามวีดีโอเลยครับผม
หลังจากที่เรานำ image ไปเก็บไว้บน ubuntu server แล้ว
สิ่งที่จะต้องทำต่อไปก็คือ ทำให้ ubuntu server ให้บริการ image นั้น
แก่เครื่อง client ที่ร้องขอ ผ่านทางบริการ aoe
โดยโปรแกรม vblade
ซึ่งโปรแกรม vblade นั้นสามารถ download โดยใช้คำสั่ง
apt-get install vblade
ซึ่งโปรแกรม vblade สามารถเรียกใช้ได้สองแบบคือ
vblade และ vbladed (ต่างกันที่ตัว d ตามหลัง)
ตัวที่เราจะเรียกใช้ก็คือ vbladed
มันจะทำงานในลักษณะ background
ลักษณะคำสั่งก็คือ
vbladed [number] [number] [interface] [image]
[number] ทั้งสองตัวนั้น เป็นตัวระบุตำแหน่งของการปล่อยของ
โดยที่เครื่อง client ที่ต้องการใช้ image ที่ปล่อย
จะต้องเข้ามาที่ตำแหน่งเดียวกับที่ปล่อย
เช่นถ้าเราใช้ vbladed 0 0 เครื่องที่เข้ามาใช้ก็จะต้องรู้ว่าเข้าที่ตำแหน่ง 0 0
เอาไว้ใช้ในกรณีที่ปล่อย image ให้เครื่องหลายๆเครื่อง
เราก็เปลี่ยนตำแหน่งไปตามเครื่องต่างๆ เช่น
0 0 สำหรับเครื่องที่ 1
0 1 สำหรับเครื่องที่ 2
เป็นต้น
[interface] คือการ์ดแลนที่เครื่อง ubuntu ใช้งาน
และต้องการจะปล่อย image ไปทางนั้น
[image] ก็ image นั่นแหละ ตรงตัวเลย..
ดูตามวีดีโอเลยครับผม
ขั้นตอนต่อไปของการเซ็ตก็คือการติดตั้ง
tftpd-hpa และ dhcp3-server
ซึ่งมีความจำเป็นมากในการเปิดระบบ diskless
ซึ่งมีความจำเป็นมากในการเปิดระบบ diskless
ตอนนี้เครื่อง server สามารถให้บริการ disless
ได้แล้ว
ขั้นตอนของการทำงานตั้งแต่เครื่องลูกเปิดเครื่องคือ
1. เครื่องลูกเปิดเครื่องแล้ว boot ด้วยระบบ network และหา dhcp server
2. dhcp server ตอบด้วย ip ของ tftp server และชื่อไฟล์คือ undionly.kpxe
3. เครื่องลูกติดต่อขอไฟล์ดังกล่าวจาก tftp server ที่ dhcp ระบุมาให้ (ค่า next-server ในการเซ็ต dhcp)
4. เมื่อได้ไฟล์ undionly.kpxe มาแล้วก็สั่งทำงาน มันจะติดต่อ dhcp server อีกครั้ง
5. เมื่อ undionly ติดต่อ dhcp จะได้รับ AoE target มา เช่น "aoe:e0.0"
6. สามารถใช้งาน AoE ได้แล้ว เปิดเครื่อง run Windows ตามปกติ
ขั้นตอนของการทำงานตั้งแต่เครื่องลูกเปิดเครื่องคือ
1. เครื่องลูกเปิดเครื่องแล้ว boot ด้วยระบบ network และหา dhcp server
2. dhcp server ตอบด้วย ip ของ tftp server และชื่อไฟล์คือ undionly.kpxe
3. เครื่องลูกติดต่อขอไฟล์ดังกล่าวจาก tftp server ที่ dhcp ระบุมาให้ (ค่า next-server ในการเซ็ต dhcp)
4. เมื่อได้ไฟล์ undionly.kpxe มาแล้วก็สั่งทำงาน มันจะติดต่อ dhcp server อีกครั้ง
5. เมื่อ undionly ติดต่อ dhcp จะได้รับ AoE target มา เช่น "aoe:e0.0"
6. สามารถใช้งาน AoE ได้แล้ว เปิดเครื่อง run Windows ตามปกติ
diskless
ภาค 2: ตอน blank file ทำความรู้จัก
และนำมาใช้งาน
Blank File การสร้างไฟล์เปล่าใน linux สามารถทำได้
โดยใช้คำสั่ง dd ที่เราเคยใช้งานกันมาแล้ว
คุณอาจสงสัยว่า ไฟล์เปล่า เราสร้างขึ้นมาทำไม? มีประโยชน์อะไร?
ด้วยคำสั่ง dd เราสามารถสร้างไฟล์เปล่าขึ้นมา
และสั่งให้มีขนาดเท่าไหร่ก็ได้ที่เราต้องการ
โดยข้อมูลที่อยู่ภายในไฟล์นั้น "ไม่มี" หรือพูดง่ายๆก็คือเป็น 0 ทั้งหมด
แต่ไฟล์ที่สร้างขึ้นนั้น ก็ไม่ได้ใช้เนื้อที่ในฮาร์ดดิสก์แต่อย่างใด
ตัวอย่างเช่น
คุณต้องการสร้างไฟล์เปล่า ขนาด 200G ขึ้นมา ชื่อว่า blank.file
ก็สามารถใช้คำสั่งดังนี้
dd if=/dev/zero of=blankfile bs=1 count=0 seek=200G
แค่นี้เอง ก็ได้ไฟล์เปล่าขึ้นมาใช้งานได้แล้ว
โดยไฟล์นี้มีชื่อว่า blankfile มีขนาด 200G
จะอธิบายรายละเอียดของคำสั่งโดยแยกเป็นส่วนๆดังนี้ครับ
dd if=/dev/zero
ส่วนแรกนี้เป็นการเรียกใช้โปรแกรม dd โดยสั่งให้
dump ข้อมูลจาก /dev/zero ซึ่งไม่มีข้อมูล (เพราะเราต้องการไฟล์เปล่า)
of=blankfile
และไฟล์ที่เราต้องการสร้างคือไฟล์ชื่อว่า blankfile
bs=1
ขนาดของ ฺBytes ที่ต้องการอ่านใน 1 ครั้ง
ซึ่งในทีนี้เรากำหนดให้มีขนาดเท่ากับ 1 Bytes
โดยทั่วไปอาจจะกำหนดให้มีขนาด 512 ก็ได้
แต่ที่ผมกำหนดให้เป็น 1 เพื่อให้สามารถใช้ร่วม
กับคำสั่ง count และ seek ได้โดยไม่สับสน (เดี๋ยวจะอธิบายอีกครั้ง)
count=0
หมายความว่า เราต้องการสร้างไฟล์เปล่า
คำสั่ง dd ที่ให้ dump ข้อมูลนั้น เราแค่เรียกใช้เพื่อสร้างไฟล์
โดยกำหนดให้ count=0 เพราะเราไม่ต้องการข้อมูลในไฟล์นั้นแต่อย่างใด
seek=200G
หมายความว่า เราต้องการเริ่มต้นการ dump ข้อมูลไปยังตำแหน่งที่ 200G
ซึ่งเป็นผลทำให้เกิดไฟล์ขนาด 200G
ความเกี่ยวข้องกันระหว่าง bs, count, seek
จริงๆแล้วคำสั่ง dd ใช้เพื่อการ dump ข้อมูลจากต้นทางไปยังปลายทาง
มีความสามารถในการใช้งานหลากหลาย
ทั้งเรื่องของการเปลี่ยนข้อมูลใน device ให้กลายเป็นไฟล์ธรรมดา
ลองจินตนาการนึกถึงการขนย้ายกองก้อนอิฐ จากที่นึงไปอีกที่นึง
สมมติว่ามีก้อนอิฐอยู่ 500 ก้อน ต้องการย้ายจากหลังบ้านไปหน้าบ้าน
คุณอาจจะย้ายโดยการ หยิบทีละ 1 ก้อน แล้วเดินทั้งหมด 500 เที่ยวจึงหมด
หรือหยิบทีละ 5 ก้อน แล้วเดินทั้งหมด 100 เที่ยว
ไม่ว่าวิธีใด ก็จะทำให้อิฐทั้ง 500 ก้อนนั้นย้ายจากหลังบ้านไปหน้าบ้านได้เหมือนกัน
แต่ประสิทธิภาพที่ใช้ก็จะแตกต่างกันไปตามรูปแบบการทำงานที่กำหนด
ค่า bs ก็เหมือนกับการกำหนดจำนวนก้อนอิฐ ที่จะขนในแต่ละเที่ยว
จะมากหรือน้อย ก็จะมีผลกับจำนวนเที่ยวที่จะต้องขน
ถ้าหากขนาดไฟล์ที่ต้องการคือ 100MB แล้วเรากำหนด bs=10MB
การขนถ่ายไฟล์ก็จะใช้แค่ 10 รอบ หรือ count=10
ถ้าเรากำหนด bs=10MB แล้วกำหนด count=15
การขนถ่ายไฟล์จากต้นทางไปปลายทางก็จะทำได้ทั้งหมด 150MB
ส่วน seek ก็จะคำนวณเหมือนกับ count
แต่เป็นการเว้นช่องว่าง ในส่วนหัวของไฟล์ตามขนาดที่กำหนด
ถ้าเรากำหนด bs=10MB แล้วกำหนด seek=10
ก็จะมีการเว้นระยะในส่วนหัวของไฟล์ปลายทางไป 100MB แล้วจึงค่อยเริ่ม dump ข้อมูล
ปล. bs ย่อมาจาก block size
คำสั่ง count และ seek เป็นการกำหนดจำนวน block ที่ต้องการ
การสั่งคำสั่ง
dd if=/dev/zero of=blankfile bs=1 count=0 seek=200G
จึง ทำให้เกิดไฟล์เปล่า ขนาด 200G เพราะคำสั่ง seek=200G นั้นจะทำการเว้นว่างส่วนหัวของไฟล์ให้ไม่มีข้อมูลใดๆ ไปจนถึงตำแหน่งที่ 200G แล้วจึงเริ่ม dump ข้อมูลจาก /dev/zero แต่การ dump ข้อมูลก็จะไม่เกิดขึ้นเพราะเราสั่งให้ count=0 ก็คือไม่ต้องการ dump ข้อมูลนั้นเอง ผลจึงทำให้เกิดไฟล์เปล่าขนาด 200G ขึ้นมา ถ้าหากเราเปลี่ยน bs เป็นค่าอื่น ก็จะต้องเปลี่ยน seek ด้วย เพราะมีผลซึ่งกันและกัน เช่นถ้าหากกำหนด bs=10 และ seek=200G ก็จะทำให้เกิดไฟล์เปล่าขนาด 2000G ขึ้นมา
แต่.. ขนาดของไฟล์นั้นก็เป็นแค่เฉพาะตัวมันเอง
ไม่ได้ใช้งานพื้นที่ในฮาร์ดดิสก์แต่อย่างใด
เป็นการจองเผื่อมาเท่านั้น
คุณสามารถตรวจสอบพื้นที่ใช้งานจริงในฮาร์ดดิสก์ได้โดยใช้คำสั่ง
du filename หรือ du -h filename
เพื่อดูขนาดของไฟล์ที่ต้องการ
เมื่อเราใช้คำสั่ง
dd if=/dev/zero of=blankfile bs=1 count=0 seek=200G
ทำให้เกิดไฟล์ชื่อว่า blankfile ขนาด 200G
ถ้าหากเราตรวจสอบโดยใช้คำสั่ง du blankfile ก็จะปรากฏว่า ใช้เนื้อที่ในฮาร์ดดิสก์ไปทั้งสิ้น 0 Bytes
ไฟล์เปล่านี้มีประโยชน์หลายอย่าง
ทั้งในเรื่องของ diskless หรือ iscsitarget
เช่นเราสร้างไฟล์เปล่าขนาด 200G มาแล้วสร้างเป็น iscsitarget
ปล่อยให้ Windows ใช้โปรแกรม Microsoft iSCSI Initiator ติดต่อเข้ามา
สร้างเป็นไดรฟ์ใหม่ มีขนาด 200G ก็สามารถทำได้ โดยเมื่อ Windows ใช้งานไดร์ฟนั้น
จึงค่อยมีข้อมูลปรากฏขึ้นในไฟล์ ซึ่งเมื่อใช้คำสั่ง du -h filename ตรวจสอบพื้นที่ใช้งาน
ก็จะเห็นว่ามันค่อยๆเพิ่มขึ้นทีหลัง
ยกตัวอย่างเช่น
เราสร้าง blankfile ขนาด 200G แล้วเราปล่อยเป็น iSCSI target
เพื่อให้ Windows ใช้โปรแกรม Microsoft iSCSI Initiator ติดต่อเข้ามา
นำ target นี้ไปใช้สร้างเป็น drive
ใน Windows ก็จะได้ drive ใหม่ขนาด 200G ในขณะที่เมื่อตรวจสอบพื้นที่ใช้งานใน linux
ก็จะเห็นว่าใช้พื้นที่ไปเพียง 0 Bytes
ต่อเมื่อ Windows สั่ง Format Drive ใหม่นั้น ก็จะเกิดการเปลี่ยนแปลงข้อมูลในไฟล์ blankfile
ซึ่งเมื่อตรวจสอบขนาดแล้วก็จะไปหยุดอยู่ที่ประมาณ 127MB นั้นหมายความว่า
การใช้พื้นที่เกิดขึ้นเมื่อมีการเปลี่ยนแปลงข้อมูลเท่านั้น
ไม่ใช่เป็นการจองพื้นที่เอาไว้ก่อน
พูดง่ายๆว่า การสร้างไฟล์เปล่าคือการเตรียมพื้นที่ล่วงหน้าโดยไม่เสียเนื้อที่จริงในฮาร์ดดิสก์
เนื้อที่ในฮาร์ดดิสก์จะถูกใช้ต่อเมื่อมีการใช้งานไฟล์เปล่าเท่านั้น
ประโยชน์ของไฟล์เปล่าอีกอย่างก็คือการทำ Copy-On-Write
ทั้งในส่วนของ iSCSI target และ diskless นั้น ต้องมีการใช้งานเรื่องของ Copy-On-Write
หรือเรียกสั้นๆว่า CoW หลักการทำงานของ CoW นั้น
ก็คือการที่เครื่องคอมพิวเตอร์หลายๆเครื่องต้องการใช้ข้อมูลจาก image เดียวกัน
แต่ก็มีการเปลี่ยนแปลงข้อมูลส่วนตัวของแต่ละเครื่อง
ในระบบ diskless หรือ iscsi นั้นเราจะมี image หลักอยู่ 1 ตัว
เวลาที่เรา update หรือลงเกม โปรแกรมใหม่ๆที่ต้องการให้มีผลไปทุกเครื่องคอมพิวเตอร์
เราก็จะทำกับ image หลักนี้ ทำให้เครื่องคอมพิวเตอร์ทุกเครื่องได้ข้อมูลใหม่ๆ
ซึ่งเป็นสาเหตุที่เราใช้ระบบเหล่านี้ นั่นคือลดเวลาการ maintain ระบบ
แต่ปัญหาก็คือ เมื่อทำการ update ตัว image แล้ว ในกรณีของ diskless นั้น
ตัว IP address ของแต่ละเครื่องก็จะนำมาจาก image เดียวกัน
เป็นผลทำให้ IP ชนกัน ซึ่งวิธีการแก้ปัญหาก็คือ CoW
เนื่องด้วยในระบบ diskless นั้น
เครื่องคอมพิวเตอร์แต่ละเครื่อง ไม่มีฮาร์ดดิสก์เป็นของตัวเอง
จึงจำเป็นต้องมีพื้นที่ในเครื่อง server เพื่อเก็บข้อมูลที่เปลี่ยนแปลงของ
เครื่องคอมพิวเตอร์แต่ละเครื่องที่ใช้งาน image หลัก
เป็นข้อมูลที่แตกต่างกันออกไปของแต่ละเครื่อง
ดังนั้นเราจึงต้องสร้างไฟล์เปล่า เพื่อรองรับตรงส่วนนั้น
เช่นเรามี image หลักที่แต่ละเครื่องจะใช้ร่วมกัน สมมติชื่อว่า main.image
และเราก็สร้างไฟล์เปล่าของเครื่องคอมพิวเตอร์แต่ละเครื่องจะใช้ในการเก็บข้อมูล
สมมติถ้าหากมีเครื่องคอมพิวเตอร์ที่ใช้ main.image อยู่ 5 เครื่อง
เราก็สร้างไฟล์เปล่าขึ้นมา 5 ไฟล์โดยกำหนดขนาดให้เท่ากับ main.image
ระบบของ CoW นั้น
เครื่อง client เวลาอ่านข้อมูลเริ่มต้นก็จะอ่านจาก main.image
และถ้าหากมีการเปลี่ยนแปลงข้อมูล ก็จะเขียนลงไปในไฟล์เปล่าที่ server เตรียมเอาไว้
เราจึงเรียกระบบนี้ว่า Copy on Write
ระบบ CoW ที่เราต้องเรียนรู้นั้น
ยังมีอีก 2 เรื่องที่จะต้องทำความเข้าใจก่อนก็คือเรื่องของ loop device และ device mapper
ซึ่งเป็นส่วนสำคัญในการสร้าง CoW
Blank File การสร้างไฟล์เปล่าใน linux สามารถทำได้
โดยใช้คำสั่ง dd ที่เราเคยใช้งานกันมาแล้ว
คุณอาจสงสัยว่า ไฟล์เปล่า เราสร้างขึ้นมาทำไม? มีประโยชน์อะไร?
ด้วยคำสั่ง dd เราสามารถสร้างไฟล์เปล่าขึ้นมา
และสั่งให้มีขนาดเท่าไหร่ก็ได้ที่เราต้องการ
โดยข้อมูลที่อยู่ภายในไฟล์นั้น "ไม่มี" หรือพูดง่ายๆก็คือเป็น 0 ทั้งหมด
แต่ไฟล์ที่สร้างขึ้นนั้น ก็ไม่ได้ใช้เนื้อที่ในฮาร์ดดิสก์แต่อย่างใด
ตัวอย่างเช่น
คุณต้องการสร้างไฟล์เปล่า ขนาด 200G ขึ้นมา ชื่อว่า blank.file
ก็สามารถใช้คำสั่งดังนี้
dd if=/dev/zero of=blankfile bs=1 count=0 seek=200G
แค่นี้เอง ก็ได้ไฟล์เปล่าขึ้นมาใช้งานได้แล้ว
โดยไฟล์นี้มีชื่อว่า blankfile มีขนาด 200G
จะอธิบายรายละเอียดของคำสั่งโดยแยกเป็นส่วนๆดังนี้ครับ
dd if=/dev/zero
ส่วนแรกนี้เป็นการเรียกใช้โปรแกรม dd โดยสั่งให้
dump ข้อมูลจาก /dev/zero ซึ่งไม่มีข้อมูล (เพราะเราต้องการไฟล์เปล่า)
of=blankfile
และไฟล์ที่เราต้องการสร้างคือไฟล์ชื่อว่า blankfile
bs=1
ขนาดของ ฺBytes ที่ต้องการอ่านใน 1 ครั้ง
ซึ่งในทีนี้เรากำหนดให้มีขนาดเท่ากับ 1 Bytes
โดยทั่วไปอาจจะกำหนดให้มีขนาด 512 ก็ได้
แต่ที่ผมกำหนดให้เป็น 1 เพื่อให้สามารถใช้ร่วม
กับคำสั่ง count และ seek ได้โดยไม่สับสน (เดี๋ยวจะอธิบายอีกครั้ง)
count=0
หมายความว่า เราต้องการสร้างไฟล์เปล่า
คำสั่ง dd ที่ให้ dump ข้อมูลนั้น เราแค่เรียกใช้เพื่อสร้างไฟล์
โดยกำหนดให้ count=0 เพราะเราไม่ต้องการข้อมูลในไฟล์นั้นแต่อย่างใด
seek=200G
หมายความว่า เราต้องการเริ่มต้นการ dump ข้อมูลไปยังตำแหน่งที่ 200G
ซึ่งเป็นผลทำให้เกิดไฟล์ขนาด 200G
ความเกี่ยวข้องกันระหว่าง bs, count, seek
จริงๆแล้วคำสั่ง dd ใช้เพื่อการ dump ข้อมูลจากต้นทางไปยังปลายทาง
มีความสามารถในการใช้งานหลากหลาย
ทั้งเรื่องของการเปลี่ยนข้อมูลใน device ให้กลายเป็นไฟล์ธรรมดา
ลองจินตนาการนึกถึงการขนย้ายกองก้อนอิฐ จากที่นึงไปอีกที่นึง
สมมติว่ามีก้อนอิฐอยู่ 500 ก้อน ต้องการย้ายจากหลังบ้านไปหน้าบ้าน
คุณอาจจะย้ายโดยการ หยิบทีละ 1 ก้อน แล้วเดินทั้งหมด 500 เที่ยวจึงหมด
หรือหยิบทีละ 5 ก้อน แล้วเดินทั้งหมด 100 เที่ยว
ไม่ว่าวิธีใด ก็จะทำให้อิฐทั้ง 500 ก้อนนั้นย้ายจากหลังบ้านไปหน้าบ้านได้เหมือนกัน
แต่ประสิทธิภาพที่ใช้ก็จะแตกต่างกันไปตามรูปแบบการทำงานที่กำหนด
ค่า bs ก็เหมือนกับการกำหนดจำนวนก้อนอิฐ ที่จะขนในแต่ละเที่ยว
จะมากหรือน้อย ก็จะมีผลกับจำนวนเที่ยวที่จะต้องขน
ถ้าหากขนาดไฟล์ที่ต้องการคือ 100MB แล้วเรากำหนด bs=10MB
การขนถ่ายไฟล์ก็จะใช้แค่ 10 รอบ หรือ count=10
ถ้าเรากำหนด bs=10MB แล้วกำหนด count=15
การขนถ่ายไฟล์จากต้นทางไปปลายทางก็จะทำได้ทั้งหมด 150MB
ส่วน seek ก็จะคำนวณเหมือนกับ count
แต่เป็นการเว้นช่องว่าง ในส่วนหัวของไฟล์ตามขนาดที่กำหนด
ถ้าเรากำหนด bs=10MB แล้วกำหนด seek=10
ก็จะมีการเว้นระยะในส่วนหัวของไฟล์ปลายทางไป 100MB แล้วจึงค่อยเริ่ม dump ข้อมูล
ปล. bs ย่อมาจาก block size
คำสั่ง count และ seek เป็นการกำหนดจำนวน block ที่ต้องการ
การสั่งคำสั่ง
dd if=/dev/zero of=blankfile bs=1 count=0 seek=200G
จึง ทำให้เกิดไฟล์เปล่า ขนาด 200G เพราะคำสั่ง seek=200G นั้นจะทำการเว้นว่างส่วนหัวของไฟล์ให้ไม่มีข้อมูลใดๆ ไปจนถึงตำแหน่งที่ 200G แล้วจึงเริ่ม dump ข้อมูลจาก /dev/zero แต่การ dump ข้อมูลก็จะไม่เกิดขึ้นเพราะเราสั่งให้ count=0 ก็คือไม่ต้องการ dump ข้อมูลนั้นเอง ผลจึงทำให้เกิดไฟล์เปล่าขนาด 200G ขึ้นมา ถ้าหากเราเปลี่ยน bs เป็นค่าอื่น ก็จะต้องเปลี่ยน seek ด้วย เพราะมีผลซึ่งกันและกัน เช่นถ้าหากกำหนด bs=10 และ seek=200G ก็จะทำให้เกิดไฟล์เปล่าขนาด 2000G ขึ้นมา
แต่.. ขนาดของไฟล์นั้นก็เป็นแค่เฉพาะตัวมันเอง
ไม่ได้ใช้งานพื้นที่ในฮาร์ดดิสก์แต่อย่างใด
เป็นการจองเผื่อมาเท่านั้น
คุณสามารถตรวจสอบพื้นที่ใช้งานจริงในฮาร์ดดิสก์ได้โดยใช้คำสั่ง
du filename หรือ du -h filename
เพื่อดูขนาดของไฟล์ที่ต้องการ
เมื่อเราใช้คำสั่ง
dd if=/dev/zero of=blankfile bs=1 count=0 seek=200G
ทำให้เกิดไฟล์ชื่อว่า blankfile ขนาด 200G
ถ้าหากเราตรวจสอบโดยใช้คำสั่ง du blankfile ก็จะปรากฏว่า ใช้เนื้อที่ในฮาร์ดดิสก์ไปทั้งสิ้น 0 Bytes
ไฟล์เปล่านี้มีประโยชน์หลายอย่าง
ทั้งในเรื่องของ diskless หรือ iscsitarget
เช่นเราสร้างไฟล์เปล่าขนาด 200G มาแล้วสร้างเป็น iscsitarget
ปล่อยให้ Windows ใช้โปรแกรม Microsoft iSCSI Initiator ติดต่อเข้ามา
สร้างเป็นไดรฟ์ใหม่ มีขนาด 200G ก็สามารถทำได้ โดยเมื่อ Windows ใช้งานไดร์ฟนั้น
จึงค่อยมีข้อมูลปรากฏขึ้นในไฟล์ ซึ่งเมื่อใช้คำสั่ง du -h filename ตรวจสอบพื้นที่ใช้งาน
ก็จะเห็นว่ามันค่อยๆเพิ่มขึ้นทีหลัง
ยกตัวอย่างเช่น
เราสร้าง blankfile ขนาด 200G แล้วเราปล่อยเป็น iSCSI target
เพื่อให้ Windows ใช้โปรแกรม Microsoft iSCSI Initiator ติดต่อเข้ามา
นำ target นี้ไปใช้สร้างเป็น drive
ใน Windows ก็จะได้ drive ใหม่ขนาด 200G ในขณะที่เมื่อตรวจสอบพื้นที่ใช้งานใน linux
ก็จะเห็นว่าใช้พื้นที่ไปเพียง 0 Bytes
ต่อเมื่อ Windows สั่ง Format Drive ใหม่นั้น ก็จะเกิดการเปลี่ยนแปลงข้อมูลในไฟล์ blankfile
ซึ่งเมื่อตรวจสอบขนาดแล้วก็จะไปหยุดอยู่ที่ประมาณ 127MB นั้นหมายความว่า
การใช้พื้นที่เกิดขึ้นเมื่อมีการเปลี่ยนแปลงข้อมูลเท่านั้น
ไม่ใช่เป็นการจองพื้นที่เอาไว้ก่อน
พูดง่ายๆว่า การสร้างไฟล์เปล่าคือการเตรียมพื้นที่ล่วงหน้าโดยไม่เสียเนื้อที่จริงในฮาร์ดดิสก์
เนื้อที่ในฮาร์ดดิสก์จะถูกใช้ต่อเมื่อมีการใช้งานไฟล์เปล่าเท่านั้น
ประโยชน์ของไฟล์เปล่าอีกอย่างก็คือการทำ Copy-On-Write
ทั้งในส่วนของ iSCSI target และ diskless นั้น ต้องมีการใช้งานเรื่องของ Copy-On-Write
หรือเรียกสั้นๆว่า CoW หลักการทำงานของ CoW นั้น
ก็คือการที่เครื่องคอมพิวเตอร์หลายๆเครื่องต้องการใช้ข้อมูลจาก image เดียวกัน
แต่ก็มีการเปลี่ยนแปลงข้อมูลส่วนตัวของแต่ละเครื่อง
ในระบบ diskless หรือ iscsi นั้นเราจะมี image หลักอยู่ 1 ตัว
เวลาที่เรา update หรือลงเกม โปรแกรมใหม่ๆที่ต้องการให้มีผลไปทุกเครื่องคอมพิวเตอร์
เราก็จะทำกับ image หลักนี้ ทำให้เครื่องคอมพิวเตอร์ทุกเครื่องได้ข้อมูลใหม่ๆ
ซึ่งเป็นสาเหตุที่เราใช้ระบบเหล่านี้ นั่นคือลดเวลาการ maintain ระบบ
แต่ปัญหาก็คือ เมื่อทำการ update ตัว image แล้ว ในกรณีของ diskless นั้น
ตัว IP address ของแต่ละเครื่องก็จะนำมาจาก image เดียวกัน
เป็นผลทำให้ IP ชนกัน ซึ่งวิธีการแก้ปัญหาก็คือ CoW
เนื่องด้วยในระบบ diskless นั้น
เครื่องคอมพิวเตอร์แต่ละเครื่อง ไม่มีฮาร์ดดิสก์เป็นของตัวเอง
จึงจำเป็นต้องมีพื้นที่ในเครื่อง server เพื่อเก็บข้อมูลที่เปลี่ยนแปลงของ
เครื่องคอมพิวเตอร์แต่ละเครื่องที่ใช้งาน image หลัก
เป็นข้อมูลที่แตกต่างกันออกไปของแต่ละเครื่อง
ดังนั้นเราจึงต้องสร้างไฟล์เปล่า เพื่อรองรับตรงส่วนนั้น
เช่นเรามี image หลักที่แต่ละเครื่องจะใช้ร่วมกัน สมมติชื่อว่า main.image
และเราก็สร้างไฟล์เปล่าของเครื่องคอมพิวเตอร์แต่ละเครื่องจะใช้ในการเก็บข้อมูล
สมมติถ้าหากมีเครื่องคอมพิวเตอร์ที่ใช้ main.image อยู่ 5 เครื่อง
เราก็สร้างไฟล์เปล่าขึ้นมา 5 ไฟล์โดยกำหนดขนาดให้เท่ากับ main.image
ระบบของ CoW นั้น
เครื่อง client เวลาอ่านข้อมูลเริ่มต้นก็จะอ่านจาก main.image
และถ้าหากมีการเปลี่ยนแปลงข้อมูล ก็จะเขียนลงไปในไฟล์เปล่าที่ server เตรียมเอาไว้
เราจึงเรียกระบบนี้ว่า Copy on Write
ระบบ CoW ที่เราต้องเรียนรู้นั้น
ยังมีอีก 2 เรื่องที่จะต้องทำความเข้าใจก่อนก็คือเรื่องของ loop device และ device mapper
ซึ่งเป็นส่วนสำคัญในการสร้าง CoW
diskless
ภาค 2: ตอน loop device ทำความรู้จัก
และมาใช้งานกัน
เครื่องมือตัวต่อไปที่ต้องทำความรู้จักคือ loop device
คุณสามารถหาอ่านรายละเอียดได้ที่
http://en.wikipedia.org/wiki/Loop_device
คำอธิบายง่ายๆของ loop device
ให้ลองนึกถึงโปรแกรม daemon tool, alcohol 120%
โปรแกรมพวกนี้จะทำให้เราสามารถใช้งานไฟล์ image ได้
เช่นถ้าเราโหลดหนัง dvd ที่เป็นไฟล์ iso มาดูในเครื่อง
เราก็ต้องทำการ mount ตัวไฟล์ iso เข้าไปใน virtual drive
โดยโปรแกรม daemon tool หรืออื่นๆ
ซึ่งลักษณะจะเหมือนกับ การใส่แผ่น dvd หนังลงไปใน drive ปกติ
คุณมีไฟล์ image ซึ่งถ้าหากมองโดยทั่วไป
ก็คือไฟล์ธรรมดาๆ เค้าเรียกว่า ordinary file
เพียงแต่ข้อมูลภายในไฟล์นั้น มี file system อยู่ด้วย
ไม่ว่าจะเป็น NTFS, FAT32, EXT3, EXT4 ก็ตาม
ข้อมูลทั้งหมดบรรจุอยู่ใน image file
คุณสามารถใช้ loop device ประกอบเข้ากับ image file
เพื่อทำให้ ordinary file ธรรมดาๆ
สามารถถูกใช้งานได้เหมือนฮาร์ดดิสก์ลูกหนึ่ง หรืออุปกรณ์เก็บข้อมูลธรรมดาๆ
มาลองดูใน linux จะมองฮาร์ดดิสก์ เป็น device ประเภท block device
หรืออุปกรณ์เก็บข้อมูล ซึ่งจะสามารถถูกใช้ เขียน/อ่าน ข้อมูลภายในได้
โดยที่ linux จะใช้ชื่อว่า /dev/sda, /dev/sdb เป็นต้น
และเมื่อแบ่งพาร์ทิชั่น ก็จะแบ่งออกเป็น /dev/sda1, /dev/sda2 เป็นต้น
โดยที่คุณสามารถทำการสร้าง file system ลงใน partition พวกนี้ได้
สำหรับการจัดการฮาร์ดดิสก์นั้นสามารถหาอ่านได้ในอินเตอร์เน็ตทั่วไป
คำอธิบายของ loop device ตามศัพท์ทางเทคนิคก็คือ
การเปลี่ยนให้ ordinary file ธรรมดา
ให้สามารถถูกใช้งานในรูปแบบ block device
ผ่านทาง loop device ได้
ซึ่งเมื่อใช้ loop device เปลี่ยน image file ให้กลายเป็น block device
คุณจะสามารถใช้งานได้เหมือนฮาร์ดดิสก์ ที่เพิ่มเข้ามาในเครื่อง linux
ทำอย่างที่ block device ทั่วไป ทำได้
loop device ภายในเครื่องคุณสามารถตรวจสอบได้โดยใช้คำสั่ง
ls /dev/loop*
เครื่องจะแสดงรายการ loop device ออกมาเช่น
/dev/loop0 /dev/loop2 /dev/loop4 /dev/loop6
/dev/loop1 /dev/loop3 /dev/loop5 /dev/loop7
แสดงว่าตอนนี้เครื่องเตรียม loop device เอาไว้ 8 ไฟล์
คุณสามารถเพิ่มทีหลังได้
คำสั่งที่จะจัดการ loop device คือ losetup
คุณสามารถหา loop device ที่ว่างอยู่โดยใช้คำสั่ง
losetup -f
เครื่องจะแสดง loop device ที่ว่างอยู่ โดยถ้าหากคุณยังไม่ได้ใช้
ก็น่าจะแสดงเป็น /dev/loop0 ออกมาให้
คำสั่งที่จะประกอบ loop device เข้ากับ image file คือ
losetup [loop device] [image file]
เช่น ถ้าหากคุณมีไฟล์ชื่อว่า windows.img
ที่คุณทำการ dd เข้ามาจากบทความก่อนหน้านี้
และสามารถใช้ vbladed ทำการปล่อย image นั้นออกไปทาง aoe target
ในกรณีนั้น การใช้งาน aoe target การเขียน/อ่านไฟล์
จะถูกกระทำกับ windows.img โดยตรง
การเปลี่ยนแปลงใดๆ ก็จะเปลี่ยนในไฟล์ windows.img ไปด้วย
ทีนี้เราลองมาใช้ loop device มาช่วยเสริมดู
ลองประกอบ /dev/loop0 เข้ากับ windows.img
ด้วยคำสั่ง
losetup /dev/loop0 windows.img
(คุณสามารถตรวจสอบการเรียกใช้ loop device โดยคำสั่ง losetup -a)
เมื่อประกอบกันเสร็จแล้ว คุณสามารถเอา /dev/loop0 ไปปล่อยทาง vbladed ได้เลย
ซึ่งสามารถใช้งานได้เช่นเดียวกัน กับการ vblade กับ windows.img โดยตรง
... คุณอาจจะคิดว่า ถ้ามันใช้งานได้เหมือนกัน แล้วจะต้องเอา loop device มาใช้ทำไม?
ลองปรับเปลี่ยนนิดหน่อย ขั้นตอนการประกอบ loop device เข้ากับ image
เพิ่มคำสั่ง -r เข้าไป เช่น
losetup -r /dev/loop0 windows.img
คำสั่งนี้คือคำสั่ง read only
หมายความว่าการใช้งาน image file นั้นจะเป็นแบบอ่านอย่างเดียว
ผลจากการนำ /dev/loop0 มาใช้เป็น AoE target
แล้วให้เครื่องนำไปใช้งาน
ทุกครั้งที่เครื่องลูก restart และติดต่อเข้ามายัง AoE target
ก็จะมีผลเหมือนติด undo card หรือโปรแกรมประเภท recovery เลย
คำสั่งยกเลิกการใช้งาน loop device ใช้คำสั่งว่า
losetup -d /dev/loop0
สามารถทำได้เมื่อไม่มีการใช้งาน loop device นั้นแล้วเท่านั้น
**เทคนิคพิเศษ**
ใน ubuntu 9.10 ปกติแล้วจะมี loop device มาให้ 8 ตัว
ซึ่งเรามักจะใช้ loop device 1 ตัวต่อเครื่องลูก 1 เครื่อง
ซึ่งมันจะไม่เพียงพอ เราจำเป็นต้องเพิ่มจำนวน loop device ในระบบ
วิธีการมีดังนี้
* แก้ไขไฟล์ /etc/defaults/grub เช่นคำสั่ง nano /etc/defaults/grub
* เพิ่มคำสั่ง max_loop=(จำนวน device ที่ต้องการ) เข้าไปในบรรทัดนี้
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash
เช่น ถ้าต้องการใช้งาน loop device จำนวน 100 ตัว
ก็แก้ไขเป็น
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash max_loop=100"
* จากนั้นใช้คำสั่ง update-grub แล้ว reboot เครื่อง
* ทดลองใช้คำสั่ง ls /dev/loop* เพื่อตรวจสอบ loop device ที่เพิ่มขึ้นมา
เครื่องมือตัวต่อไปที่ต้องทำความรู้จักคือ loop device
คุณสามารถหาอ่านรายละเอียดได้ที่
http://en.wikipedia.org/wiki/Loop_device
คำอธิบายง่ายๆของ loop device
ให้ลองนึกถึงโปรแกรม daemon tool, alcohol 120%
โปรแกรมพวกนี้จะทำให้เราสามารถใช้งานไฟล์ image ได้
เช่นถ้าเราโหลดหนัง dvd ที่เป็นไฟล์ iso มาดูในเครื่อง
เราก็ต้องทำการ mount ตัวไฟล์ iso เข้าไปใน virtual drive
โดยโปรแกรม daemon tool หรืออื่นๆ
ซึ่งลักษณะจะเหมือนกับ การใส่แผ่น dvd หนังลงไปใน drive ปกติ
คุณมีไฟล์ image ซึ่งถ้าหากมองโดยทั่วไป
ก็คือไฟล์ธรรมดาๆ เค้าเรียกว่า ordinary file
เพียงแต่ข้อมูลภายในไฟล์นั้น มี file system อยู่ด้วย
ไม่ว่าจะเป็น NTFS, FAT32, EXT3, EXT4 ก็ตาม
ข้อมูลทั้งหมดบรรจุอยู่ใน image file
คุณสามารถใช้ loop device ประกอบเข้ากับ image file
เพื่อทำให้ ordinary file ธรรมดาๆ
สามารถถูกใช้งานได้เหมือนฮาร์ดดิสก์ลูกหนึ่ง หรืออุปกรณ์เก็บข้อมูลธรรมดาๆ
มาลองดูใน linux จะมองฮาร์ดดิสก์ เป็น device ประเภท block device
หรืออุปกรณ์เก็บข้อมูล ซึ่งจะสามารถถูกใช้ เขียน/อ่าน ข้อมูลภายในได้
โดยที่ linux จะใช้ชื่อว่า /dev/sda, /dev/sdb เป็นต้น
และเมื่อแบ่งพาร์ทิชั่น ก็จะแบ่งออกเป็น /dev/sda1, /dev/sda2 เป็นต้น
โดยที่คุณสามารถทำการสร้าง file system ลงใน partition พวกนี้ได้
สำหรับการจัดการฮาร์ดดิสก์นั้นสามารถหาอ่านได้ในอินเตอร์เน็ตทั่วไป
คำอธิบายของ loop device ตามศัพท์ทางเทคนิคก็คือ
การเปลี่ยนให้ ordinary file ธรรมดา
ให้สามารถถูกใช้งานในรูปแบบ block device
ผ่านทาง loop device ได้
ซึ่งเมื่อใช้ loop device เปลี่ยน image file ให้กลายเป็น block device
คุณจะสามารถใช้งานได้เหมือนฮาร์ดดิสก์ ที่เพิ่มเข้ามาในเครื่อง linux
ทำอย่างที่ block device ทั่วไป ทำได้
loop device ภายในเครื่องคุณสามารถตรวจสอบได้โดยใช้คำสั่ง
ls /dev/loop*
เครื่องจะแสดงรายการ loop device ออกมาเช่น
/dev/loop0 /dev/loop2 /dev/loop4 /dev/loop6
/dev/loop1 /dev/loop3 /dev/loop5 /dev/loop7
แสดงว่าตอนนี้เครื่องเตรียม loop device เอาไว้ 8 ไฟล์
คุณสามารถเพิ่มทีหลังได้
คำสั่งที่จะจัดการ loop device คือ losetup
คุณสามารถหา loop device ที่ว่างอยู่โดยใช้คำสั่ง
losetup -f
เครื่องจะแสดง loop device ที่ว่างอยู่ โดยถ้าหากคุณยังไม่ได้ใช้
ก็น่าจะแสดงเป็น /dev/loop0 ออกมาให้
คำสั่งที่จะประกอบ loop device เข้ากับ image file คือ
losetup [loop device] [image file]
เช่น ถ้าหากคุณมีไฟล์ชื่อว่า windows.img
ที่คุณทำการ dd เข้ามาจากบทความก่อนหน้านี้
และสามารถใช้ vbladed ทำการปล่อย image นั้นออกไปทาง aoe target
ในกรณีนั้น การใช้งาน aoe target การเขียน/อ่านไฟล์
จะถูกกระทำกับ windows.img โดยตรง
การเปลี่ยนแปลงใดๆ ก็จะเปลี่ยนในไฟล์ windows.img ไปด้วย
ทีนี้เราลองมาใช้ loop device มาช่วยเสริมดู
ลองประกอบ /dev/loop0 เข้ากับ windows.img
ด้วยคำสั่ง
losetup /dev/loop0 windows.img
(คุณสามารถตรวจสอบการเรียกใช้ loop device โดยคำสั่ง losetup -a)
เมื่อประกอบกันเสร็จแล้ว คุณสามารถเอา /dev/loop0 ไปปล่อยทาง vbladed ได้เลย
ซึ่งสามารถใช้งานได้เช่นเดียวกัน กับการ vblade กับ windows.img โดยตรง
... คุณอาจจะคิดว่า ถ้ามันใช้งานได้เหมือนกัน แล้วจะต้องเอา loop device มาใช้ทำไม?
ลองปรับเปลี่ยนนิดหน่อย ขั้นตอนการประกอบ loop device เข้ากับ image
เพิ่มคำสั่ง -r เข้าไป เช่น
losetup -r /dev/loop0 windows.img
คำสั่งนี้คือคำสั่ง read only
หมายความว่าการใช้งาน image file นั้นจะเป็นแบบอ่านอย่างเดียว
ผลจากการนำ /dev/loop0 มาใช้เป็น AoE target
แล้วให้เครื่องนำไปใช้งาน
ทุกครั้งที่เครื่องลูก restart และติดต่อเข้ามายัง AoE target
ก็จะมีผลเหมือนติด undo card หรือโปรแกรมประเภท recovery เลย
คำสั่งยกเลิกการใช้งาน loop device ใช้คำสั่งว่า
losetup -d /dev/loop0
สามารถทำได้เมื่อไม่มีการใช้งาน loop device นั้นแล้วเท่านั้น
**เทคนิคพิเศษ**
ใน ubuntu 9.10 ปกติแล้วจะมี loop device มาให้ 8 ตัว
ซึ่งเรามักจะใช้ loop device 1 ตัวต่อเครื่องลูก 1 เครื่อง
ซึ่งมันจะไม่เพียงพอ เราจำเป็นต้องเพิ่มจำนวน loop device ในระบบ
วิธีการมีดังนี้
* แก้ไขไฟล์ /etc/defaults/grub เช่นคำสั่ง nano /etc/defaults/grub
* เพิ่มคำสั่ง max_loop=(จำนวน device ที่ต้องการ) เข้าไปในบรรทัดนี้
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash
เช่น ถ้าต้องการใช้งาน loop device จำนวน 100 ตัว
ก็แก้ไขเป็น
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash max_loop=100"
* จากนั้นใช้คำสั่ง update-grub แล้ว reboot เครื่อง
* ทดลองใช้คำสั่ง ls /dev/loop* เพื่อตรวจสอบ loop device ที่เพิ่มขึ้นมา