Showing posts with label boot. Show all posts
Showing posts with label boot. Show all posts

Saturday, February 28, 2009

FreeBSD เมื่อ loader.conf มีปัญหา

วันนี้นั่งหาวิธีทำให้ FreeBSD บนโน้ตบุ๊คใช้ไวเลสได้ครับ มาถึงตอนนี้ก็ยังทำไม่ได้ ซ้ำร้ายทำไปทำมา FreeBSD บู๊ทไม่ขึ้นซะอีก

อาการ
ตอนที่ FreeBSD กำลังแสดงข้อความต่าง ๆ ของระบบอยู่ดีมันก็มาหยุดที่ ndis0 (เป็นโมดูลที่เกี่ยวกับเน็ตเวิร์กของ ndis ครับ) ผมสั่งให้มันโหลดขึ้นมาตอนบู๊ท มันก็แจ้งว่า failed แล้วก็ค้างอยู่ตรงนี้

สาเหตุ
เนื่องจากว่าผมไปแก้ไฟล์ loader.conf (/boot/loader.conf) ให้มันโหลดโมดูลไดรเวอร์ของการ์ดแลนผมขึ้นมา แต่ไม่รู้ว่ามันเกิดปัญหาอะไร มันถึงโหลดไม่สำเร็จ ก็เลยเป็นสาเหตุให้ค้างตอนบู๊ทครับ

วิธีแก้
ตอนบู๊ท FreeBSD ขึ้นมาแล้วมีออปชั่นให้เลือก ให้เลือกออปชั่นหมายเลข 6 ครับ (จำไม่ได้ว่ามันเขียนว่าอะไร) แล้วมันก็จะมี prompt ขึ้นมาว่า OK ให้เราป้อนค่าตามนี้ครับ (OK นั่นเป็น prompt นะครับ ไม่ต้องกรอกตาม)

OK unload
OK load kernel
OK snd_hda
OK boot

แล้วเราก็จะบู๊ทได้ โดยไม่อ่าน loader.conf ครับ

แต่เดี๋ยวก่อนครับ ผมยังเจออีกปัญหา ตอนบู๊ทขึ้นมาด้วยวิธีนี้ ปรากฏว่าผมไปแก้ไฟล์ /etc/rc.conf ด้วย และแก้ผิดไปครับ (มีเครื่องหมายคำพูดเกินมาตัว) ทำให้มันแจ้งเตือนว่าไฟล์ /etc/rc.conf ผิด จากนั้นมันให้กรอก path ของ shell ที่จะใช้งานครับหลังจากกรอกเสร็จมันก็เข้าสู่ระบบให้โดยอัตโนมัติ

แต่ผมพบว่ามันไม่ได้ mount file system ให้ซักตัวเลยครับ ผมต้องมา mount เอง ทั้ง /usr /var /tmp เพราะเนื่องจากว่ามันไม่ได้ mount /usr ให้ดังนั้นเราจะไม่เห็นคำสั่งหลาย ๆ คำสั่งครับ รวมถึง vi ด้วย ผมเลยต้อง mount /usr แต่ว่าการใช้ vi นั้นมันจะไปสร้างไฟล์ใน /tmp เลยจำเป็นต้อง mount /tmp ด้วย ส่วน /var นั่นก็ mount เผื่อ ๆ ไปครับ (ตอน mount ก็เรียกดูจากไฟล์ /etc/fstab)

หลังจากนั้นผมก็พยายามแก้ไฟล์ทั้งสองแต่ปรากฏว่าผมไม่สามารถบันทึกได้ครับ มันแจ้งเตือนว่า "Read-Only file system" หลังจากค้นดูก็พบวิธีแก้โดยใช้คำสั่ง

mount -u /

มันจะไปเปลี่ยนจาก Read-Only เป็น Read/Write ครับ ทีนี้เราก็จะสามารถแก้ไขไฟล์ที่เสียได้ตามที่ต้องการ

----

แถม
เนื่องจากตอนที่มันไม่ mount อะไรให้ซักอย่างผมเลยต้องมา mount เอง แต่ตอนค้นเรื่อง Read-Only ผมก็เจอคำสั่ง mount ทั้งหมดให้อัตโนมัติครับ

mount -a

มันจะ mount ตามไฟล์ /etc/fstab ให้อัตโนมัติครับ