วันอังคารที่ 21 ตุลาคม พ.ศ. 2551

directory

directory


ไฟล์จะเก็บไว้ใน directory ในแต่ละ directory อาจจะไม่มีไฟล์เลยก็ได้ หรือ อาจจะมีไฟล์เป็น ร้อยๆ ไฟล์ก็ได้ และ ใน directory หนึ่งๆ ยังสามารถมี directory อื่นๆ อยู่ภายในได้อีก เป็น ลักษณะ directory ซ้อน directory ทั้งหมดนี้เป็นวิธีที่ง่ายที่สุด ในการจัดการโครงสร้าง การจัดเก็บข้อมูล
ไฟล์ และ directory ถูกอ้างถึงได้ด้วย ชื่อไฟล์ และ ชื่อ directory ตามด้วยเครื่องหมาย slash , "/" ตามด้วยชื่อ directory อื่นๆ ตามความจำเป็น เช่น สมมุติว่าเรามี directory ชื่อ foo ซึ่งมี diretory ชื่อ bar อยู่ภายใน และมีไฟล์ชื่อ readme.txt อยู่ภายในอีกที ดังนั้น ชื่อเต็มๆ หรือ ที่เรียกว่า path ของไฟล์ readme.txt ก็คือ foo/bar/readme.txt
ไฟล์ และ directory ถูกจัดเก็บไว้ใน filesystem ซึ่งแต่ละ filesystem จะมี directory ประจำที่อยู่ตำแหน่งบนสุดของ directory ทั้งหมด เราเรียกว่า root directory ของ filesystem และ root directory มีความสำคัญมากเพราะ เป็นตัวเก็บ directory อื่นๆ ทั้งหมด
ทั้งนี้ทั้งนี้น เราอาจคุ้นเคยกับวิธีการข้างต้น ในระบบปฎิบัติการอื่น ที่เราเคยใช้งาน อาจมีความแตกต่างกันบ้าง เช่น MS-DOS ใช้ "\" เป็นตัวแยกชื่อไฟล์ และ ชื่อ directory ขณะที่ Mac OS กลับใช้ ":" แทน
FreeBSD ไม่มีการใช้ ชื่อ drive เช่น A: , B: , C: หรือ ชื่อ drive ใน path ตัวอย่างเช่น ใน FreeBSD เราจะไม่เขียนว่า C:/foo/bar/read.txt
ในวิธีการของ FreeBSD จะมี filesystem หนึ่งที่ถูกกำหนด ให้เป็น root filesystem และ ตัว root directory ของ root filesystem จะถูกอ้างอิงด้วยเครื่องหมาย "/" แล้ว filesystem อื่นๆ จะถูก mounted ให้มาอยู่ภายใต้ root filesystem อีกที ทั้งนี้ไม่ว่าเราจะมี disk มากเท่าไรก็ตาม ระบบของ FreeBSD จะถือว่า directory เหล่านั้น เป็นส่วนหนึ่งของ disk ตัวแรกเสมอ
สมมุติว่า เรามี filesystem จำนวน 3 filesystems มีชื่อเรียกว่า A , B , และ C แต่ละ filesystem ต่างก็มี root directory ซึ่งต่างก็มีอีก 2 directory อยู่ภายใน มีชื่อเรียกว่า A1, A2 (และเป็นลำดับไป เป็น B1 , B2 และ C1 , C2)
เมื่อเรียกดู root filesystem ของ A ด้วยคำสั่ง ls เราจะเห็น subdirectory A1 และ A2 อยู่ภายใน แสดงให้ดูได้ตามรูป

filesystem แต่ละอัน ต้องถูก mounted ให้ไปเป็น directory อยู่ในอีก filesystem หนึ่ง สมมุติว่า เรา mount filesystem B ให้อยู่ใน directory A1 ดังนั้น root directory ของ B จะแทนที่ A1 และ ข้อมูลใน directory B จะแสดงให้เห็นตามมา

เราสามารถ เข้าถึงไฟล์ต่างๆ ที่อยู่ใน directory B1 หรือ B2 ได้ด้วย path /A1/B1 หรือ /A1/B2 ตามลำดับ ทั้งนี้ไฟล์ต่างๆ ที่อยู่ใน /A1 จะถูกซ่อนไว้ชั่วคราว และจะแสดงตัวออกมาทันทีอีกครั้ง เมื่อ B ถูก unmount จาก A
และถ้า B ถูก mout เข้าไปใน A2 แล้ว สามารถแสดงให้เห็นได้ ดังนี้

ดังนั้น path สามารถอ้างได้แบบนี้ /A2/B1 และ /A2/B2 ตามลำดับ
เราสามารถ mount filesystem ให้อยู่ตำแหน่งบนสุด ของ filesystem อื่นได้ ในตัวอย่างสุดท้าย C filesystem สามารถถูก mount ให้อยู่ตำแหน่งบนสุด ของ directory B1 ใน B filesystem ได้ ตามรูปด้านล่าง

หรือ C สามารถถูก mount ไปที่ directory ของ A filesystem ซึ่งอยู่ภายใต้ directory A1 อีกที ตามรูป

แล้วถ้าใคร คุ้นเคยกับ MS-DOS จะเห็นว่า ระบบไฟล์ จะคล้ายๆ กัน
ทั้งหมดนี้ เราไม่ค่อยได้เกี่ยวข้องบ่อยนัก โดยทั่วไป เมื่อเราสร้าง filesystem ตอนเราติดตั้ง FreeBSD ครั้งแรก หลังจากตัดสินใจแล้วว่า จะ mount directory อะไร ไปเก็บไว้ที่ไหน แล้ว เราก็ไม่เคยไปเปลี่ยนแปลง อีกเลย จนกว่าเราจะมี disk ใหม่มาติดตั้งเพิ่ม
มีความเป็นไปได้ ที่เราจะสร้างเพียง 1 root filesystem ที่ใหญ่มากๆ โดยไม่สร้าง filesystem อื่นๆ อีกเลย วิธีแบบนี้ มีทั้งข้อดี และ ข้อเสีย
ข้อดึของ การมี filesystem จำนวนมาก
filesystem ที่แตกต่างกัน สามารถ mount ด้วยเงื่อนไขที่แตกต่างกัน เข่น root filesystem สามารถ mount ให้ อ่านได้เพียงอย่างเดียว เพื่อป้องกันไฟล์ สำคัญ ไม่ให้ถูกลบทิ้ง โดยบังเอิญ หรือ ป้องกันการแก้ไขไฟล์สำคัญต่างๆfilesystem ของ user เราอาจ mount ให้เขียนได้ เฉพาะ user รายนั้นๆ เช่น /home เราอาจ mout ด้วยเงื่อนไข nosuid เพื่อปรับปรุงด้านความปลอดภัย ให้เพิ่มมากขึ้น FreeBSD มีระบบการตรวจสอบ filesystem แบบอัตโนมัติ ประสิทธิภาพ ดัวกล่าว ขึ้นอยู่กับ จำนวนไฟล์ และ ขนาดของไฟล์ ใน filesystem และการใช้งาน ในแต่ละ filesystem สำหรับ filesystem ที่มีขนาดใหญ่มากๆ มักมีปัญหากับ การตรวจสอบ ของ FreeBSD ระบบ filesystem ของ FreeBSD อาจมีปัญหาจากกรณีไฟดับ หากเราจัดระบบ filesystem ให้มีจำนวนที่เหมาะสม กระจายกันเก็บข้อมูล เมื่อมีปัญหาด้านไฟดับ โอกาสในการสูญเสียก็น้อยลง และง่ายต่อการจัดทำการสำรองข้อมูล รวมถึงการ กู้ข้อมูลคืนด้วย
ข้อดี ของการมี filesystem เดียว
filesystem จะมีขนาดที่แน่นอน ถ้าเราสร้าง filesystem ตอนติดตั้ง FreeBSD และระบุขนาดให้แล้ว เราอาจจะมาพบภายหลังว่า ถ้าเราต้องการเพิ่ม partition ให้ใหญ่ขึ้น ซึ่งกรณีนี้ ไม่ง่ายเลยที่จะจัดการให้ได้ดี เราต้องสำรองข้อมูล สร้าง filesystem ด้วย การกำหนด ขนาดใหม่ และ ทำการนำข้อมูลเข้าใหม่ จากที่สำรองเก็บไว้ นับว่ายุ่งยากทีเดียว หมายเหตุสำคัญ : FreeBSD 4.4 และ version ที่สูงกว่า มีคำสั่ง growfs ที่สามารถขยายขนาด ของ filesystem ได้ทันที ทำให้ข้อจำกัดข้างต้น หมดไป
FreeBSD ยังมีการใช้ พื้นที่ใน disk สำหรับ การทำ swap space ใน FreeBSD นั้น swap space ทำหน้าที่เป็น หน่วยความจำเสมือน ซึ่งทำให้คอมพิวเตอร์ของเรา มีหน่วยความจำ มากขึ้นกว่าที่มีอยู่จริง และ เมื่อ หน่วยความจำจริง ใน ถูกใช้ไปจนหมด FreeBSD จะย้ายข้อมูล จำนวนหนึ่งที่ยังไม่ใช้งาน ออกจากหน่วยความจำ มาอยู่บน swap space ก่อน และ จะย้ายกลับไป ในหน่วยความจำทันที เมื่อจำเป็นต้องใช้งาน
partitions และ ข้อตกลงในการใช้งาน
ใน disk 1 ตัว สามารถมีได้เพียง 4 physical slice เท่านั้น แต่เราสามารถกำหนด logical slice ภายใน physical slice ได้logical slice เริ่มนับ จากตัวเลข 5 เป็นตันไป ดังนั้น "ad0s5" จึงหมายถึง extended slice ตัวแรก ของ IDE disk โดย device เหล่านี้ถูกใช้ โดย file system
Slice ,"dangerously dedicaed" physical drives , และ dirves อื่นๆ ต่างประกอบด้วย partitions ซึ่งถูกอ้างถึงด้วย ตัวอักษร a ถึง h ตัวอักษรเหล่านี้ ใช้ต่อท้าย ชื่อ device ดังนี้น "da0a" จึงหมายถึง partition ใน da drive ตัวแรก ซึ่งเป็น "dangerously dedicated" และ "ad1s3e" จึงหมายถึง partition ตัวที่ 5 ใน slice ตัวที่ 3 ของ IDE disk drive ตัวที่ 2
สุดท้าย disk แต่ละตัว ในระบบ สามารถระบุ และ อ้างอิงได้ทั้งสิ้น ชื่อของ disk เริ่มต้นด้วย รหัส ที่บอกถึง ประเภทของ disk และตามมาด้วย ตัวเลข เพื่อบอกว่า เป็น disk ตัวที่เท่าไหร่ ซึ่งแตกต่างจาก slice ตัวเลข disk เริ่มต้นด้วยตัวเลข 0 ดูได้จาก Table 3-1
เมื่อพูดถึง partition ใน FreeBSD จะหมายถึง slice และ partition ที่มีอยู่ใน slice นั้น และ เมื่อพูดถึง slice เราจะหมายถึงชื่อของ disk แทน ดูรายละเอียดตาม Example 3-1
Example 3-2 แสดงภาพโครงร่าง ของ disk ที่จะช่วยให้เห็นภาพชัดเจนขึ้น
ในการติตดั้ง FreeBSD เราต้องกำหนด disk slices เป็นอันดับแรก แล้วถึงไปสร้าง partitions ภายใน slice อีกที แล้วจึงสร้าง file system หรือ swap space ในแต่ละ partition และเสร็จสิ้น โดยการกำหนดว่า file system ตัวไหนบ้างทีจะถูก mount

ไม่มีความคิดเห็น: