งานซ่อม

บันทึกการซ่อม และการแก้ไขแพกเกจเสียหาย

Topic: 

ubuntu: บันทึกการซ่อม grub

คราวก่อนบันทึก การติดตั้งหลายระบบปฏิบัติการ ปรากฎว่าเครื่องมีปัญหานิดหน่อย เลยต้องติดตั้ง 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

  • หากใช้แผ่นเดเบียนแบบดิบ ๆ เมื่อบูตและทำงานผ่านขั้นตอน chroot แล้ว ถ้าขึ้นข้อผิดพลาดว่า
    Error Opening terminal: Bterm

    ให้ใช้คำสั่งว่า
    # export TERM=linux
    แล้วก็จะสามารถทำงานต่อจนจบได้ครับ

debian: บันทึกการซ่อม grub

ทดลองซ่อม 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

ขั้นตอนมีดังนี้

  1. ใส่แผ่นติดตั้งเดเบียน
  2. เมื่อบูตจนถึงขั้นตอนติดตั้งเครือข่าย ให้กด ALT+F2 เพื่อออกมาสู่เชลล์
  3. ตรวจดูพาร์ติชั่นเก่าด้วยคำสั่ง
    # fdisk -l
  4. เตรียมการ chroot ไปยังพาร์ติชั่นของเดเบียนที่เราจะซ่อม
    # 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

  5. chroot ไปยังพาร์ติชั่นของเดเบียน
    # chroot /mnt/root
  6. ถ้าแยกบูตพาร์ติชั่นตามตัวอย่าง ต้องเมานต์ /boot ในขั้นตอนนี้ด้วย
  7. # mount /dev/hda2 /boot
    ถ้าเป็น sata เปลี่ยนจาก hda2 เป็น sda2

  8. ซ่อม grub
    # grub-install /dev/hda
    ถ้าเป็น sata เปลี่ยนจาก hda เป็น sda
  9. เรียบร้อยแล้ว รีบูตได้เลย
    # reboot

เอามาจาก nixCraft - Restore Debian Linux Grub boot loader

debian: อัปเดตไบออสด้วย Thumb Drive โดย freedos อาศัย grub2

สมมุติว่าใช้เดเบียนรุ่นตั้งแต่ 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 เป็นต้น)

เมื่อเสร็จแล้ว ก็สามารถบูตเพื่อใช้งานไบออสใหม่ได้เลย

เอามาจาก

update

ล่าสุดใช้แพ็คเกจ flashrom แทนได้แล้ว

ติดตั้ง

# aptitude install flashrom

เก็บรอมเก่า

# flashrom -r OLD.bin

แฟลชรอมใหม่

# flashrom -w NEW.bin

เอามาจาก

บันทึกแก้ไข sid บูตไม่ขึ้น

เนื่องจากปัญหา 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
Topic: