บันทึกการซ่อม และการแก้ไขแพกเกจเสียหาย
คราวก่อนบันทึก การติดตั้งหลายระบบปฏิบัติการ ปรากฎว่าเครื่องมีปัญหานิดหน่อย เลยต้องติดตั้ง WinMe กลับเข้าไป ทำให้ grub หายหมด จึงต้องทดลองซ่อมให้ grub คืนมา
คราวก่อน
/dev/hda1 เป็น WinMe
/dev/hda2 เป็น WinXP
/dev/hda3 เป็น extend
/dev/hda5 เป็น /boot
/dev/hda6 เป็น swap
/dev/hda7 เป็น /
เริ่มซ่อมดังนี้
บูตด้วยแผ่น Ubuntu Live CD 6.06.1 LTS
เปิด Terminal
Applications -> Accessories -> Terminal
แปลงตัวเป็น root
$ sudo su
สร้างจุดเมานต์ /mnt/root
# mkdir /mnt/root
เมานต์ให้ /dev/hda7 มาอยู่ที่ /mnt/root
# mount /dev/hda7 /mnt/root
เตรียมการย้ายรูตไปอยู่ที่ /mnt/root โดยต้องเมานต์ process และลิงก์ device ไปที่ใหม่
# mount -t proc none /mnt/root/proc
# mount -o bind /dev /mnt/root/dev
# mount -t sysfs none /mnt/root/sys
ย้ายรูต
# chroot /mnt/root /bin/bash
เนื่องจากแยก /boot เป็น /dev/hda5 เลยต้องเมานต์ลงมาทับ /boot
# mount /dev/hda5 /boot
คราวนี้ก็ทำตามวิธีของ คุณหมอ DrRider จาก ThaiLinuxCafe ได้แล้วครับ
# grub
grub> root (hd0,4)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. succeeded Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,4)/grub/stage2 /grub/menu .lst"... succeeded Done.
เรียบร้อยแล้วครับ ออกจาก grub ด้วยคำสั่ง quit แล้วก็บูตใหม่ได้เลย
update
Error Opening terminal: Bterm
ให้ใช้คำสั่งว่า
# export TERM=linux
แล้วก็จะสามารถทำงานต่อจนจบได้ครับ
ทดลองซ่อม grub บนเดเบียน ข้อมูลคือ
Device Boot Start End Blocks Id System /dev/hda1 1 1217 9775521 c W95 FAT32 (LBA) /dev/hda2 * 1218 1230 104422+ 83 Linux /dev/hda3 1231 6769 44492017+ 5 Extended /dev/hda5 1231 1293 506016 82 Linux swap / Solaris /dev/hda6 1294 3118 14659281 83 Linux /dev/hda7 3119 4335 9775521 83 Linux /dev/hda8 4336 5552 9775521 83 Linux /dev/hda9 5553 6769 9775521 83 Linux
/boot คือ /dev/hda2 และ / คือ /dev/hda6
ขั้นตอนมีดังนี้
# fdisk -l
# mkdir /mnt/root
# mount /dev/ide/host0/bus0/target0/lun0/part6 /mnt/root
ถ้าเป็นดิสก์แบบ sata เปลี่ยนจาก /dev/ide/... เป็น /dev/scsi/...
lun0 คือ hda
part6 คือ /dev/hda6 หรือ (hd0,5) ของ grub
# chroot /mnt/root
# mount /dev/hda2 /boot
ถ้าเป็น sata เปลี่ยนจาก hda2 เป็น sda2
# grub-install /dev/hda
# reboot
สมมุติว่าใช้เดเบียนรุ่นตั้งแต่ squeeze ขึ้นไป ซึ่งติดตั้ง grub2 เป็นตัวจัดการการบูตอยู่แล้ว
1. ที่ต้องใฃ้คือ Thumb Drive ที่ฟอร์แมตแล้ว (มีข้อมูลอยู่ก็ไม่เป็นไร ใช้เนื้อที่แค่ 1.44M ดิสเก็ตต์แผ่นเดียว โดยไม่ต้องฟอร์แมตใหม่) สมมุติว่าเมื่อเสียบช่อง usb แล้ว เขาจะเมานต์อัตโนมัติไว้ที่ /media/disk
2. ติดตั้งแพคเกจ
$ sudo aptitude install syslinux dosfstools
3. เตรียมไฟล์อัปเดตไบออสจากผู้ผลิตเมนบอร์ดเอาไว้ให้เรียบร้อย ถ้าไฟล์ถูกบีบอัดเป็นไฟล์เดียว ให้แตกออกมาด้วย Archive Manager (File Roller) จะมี 2 ไฟล์ที่ต้องใช้ คือไฟล์ EXE สำหรับการรันไฟล์นึง และไฟล์ข้อมูลไบออสอีกไฟล์นึง
สมมุติถ้าเป็นเมนบอร์ดกิกาไบต์ G31M-ES2L เมื่อแตกไฟล์ที่ดาวน์โหลดออกมาแล้วจะได้ไฟล์ FLASHSPI.EXE และ G31MES2L.F10 ตามลำดับ
4. เอาไฟล์ freedos มา
$ wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdboot.img
5. เมานต์ขึ้นมาเอาไว้ที่ /mnt/tmp เพื่อลบไฟล์ที่ไม่ต้องการออก
$ sudo mkdir -p /mnt/tmp $ sudo mount -o loop fdboot.img /mnt/tmp $ sudo rm -rf /mnt/tmp/{driver,fdconfig.sys,freedos}
และคัดลอกไฟล์ไบออสเข้าไป
จากตัวอย่างจะเป็นสองไฟล์ข้างต้น ให้ปรับเปลี่ยนเอาตามจริง
$ sudo cp ~/Desktop/FLASHSPI.EXE /mnt/tmp $ sudo cp ~/Desktop/G31MES2L.F10 /mnt/tmp
6. ถอดการเมานต์ คัดลอกไฟล์ไปยัง Thumb Drive
$ sudo umount /mnt/tmp $ cp fdboot.img /media/disk
7. คัดลอกไฟล์เคอร์เนลที่ต้องใช้ในการบูตคือ memdisk
จากแพคเกจ syslinux และรีบูต
$ cp /usr/lib/syslinux/memdisk /media/disk $ umount /media/disk $ sudo shutdown -r now
เมื่อเริ่มเข้า grub2 ให้กด "c" เพื่อเลือกใช้บรรทัดคำสั่ง และพิมพ์คำสั่งดังนี้
set root=(hd1,1) linux16 /memdisk initrd16 /fdboot.img boot
เครื่องจะบูตเข้า freedos ซึ่งเราสามารถแฟลชไบออสด้วยการรันโปรแกรมไบออสที่เราเตรียมการไว้แล้วข้างต้น
(จากตัวอย่าง จะต้องสั่งรันด้วย FLASHSPI.EXE G31MES2L.F10
เป็นต้น)
เมื่อเสร็จแล้ว ก็สามารถบูตเพื่อใช้งานไบออสใหม่ได้เลย
เอามาจาก
ล่าสุดใช้แพ็คเกจ flashrom แทนได้แล้ว
ติดตั้ง
# aptitude install flashrom
เก็บรอมเก่า
# flashrom -r OLD.bin
แฟลชรอมใหม่
# flashrom -w NEW.bin
เอามาจาก
เนื่องจากปัญหา initramfs ไม่ยอมสร้างไฟล์ initrd.img ทำให้ dpkg ค้างบูตไม่ได้
บูตด้วยแผ่นติดตั้ง netinst ของ lenny
ทำตามขั้นตอนไปเรื่อย ๆ จนถึงขั้นแบ่งพาร์ติชั่นดิสก์ แล้วจึงออกสู่เชลล์ busybox
เนื่องจากเชลล์ busybox ไม่ฉลาดเหมือน bash จึงต้องใส่พารามิเตอร์ตามลำดับ
# mount /dev/hda5 /mnt -t ext3 # mount sysfs /mnt/sys -t sysfs # mount proc /mnt/proc -t proc # mount tmpfs /mnt/tmp -t tmpfs # chroot /mnt /bin/bash
ตอนนี้เราย้าย root มาที่เครื่องที่ต้องการซ่อมแล้ว (ขอแทนเครื่องหมายพร้อมด้วย $#)
หากต้องมีการแก้ไขเนื้อไฟล์
$# TERM=linux $# vi XXXX.XXX
แก้ไขงานตามความจำเป็น
$# dpkg --reconfigure -a $# aptitude -f install $# exit
เสร็จแล้ว บูตเครื่องใหม่ได้เลย
# reboot