3/13/09

Sửa một số lỗi chung trong Linux (phần 1)


Cách sửa các lỗi chung trong Linux (phần 1)





CHÚ Ý: các khuyến nghị dưới đây phần lớn là thực hiện bằng các lệnh. Đó là vì các lệnh thì bản Linux nào cũng cơ bản giống nhau. Cùng chức năng như các lệnh đó, mỗi bản Linux có thể có chương trình đồ hoạ dễ làm hơn, bạn phải tự tìm lấy.

Một số lệnh dưới đây phải thực hiện với quyền của root. Ubuntu và một số bản Linux có thể làm điều đó bằng cách thêm sudo vào trước lệnh. Với Mandriva, ... thì trước tiên phải chạy lệnh su để chuyển sang root rồi mới chạy lệnh đã nêu (không cần sudo nữa).

Khôi phục boot menu (Distro fixes)


Các bản Linux khi cài đặt đều phát hiện được Windows đã cài và thiết lập boot menu có cả Win và Linux để chọn khi khởi động. Nhưng nếu phải cài lại Win bị lỗi thì sau khi cài, boot menu bị xóa, máy sẽ boot thẳng vào Win không thấy Linux đâu nữa!

Đừng sợ: Win đã viết đè trình Grub bootloader bằng trình khởi động riêng của nó. Bản Linux đã cài vẫn còn nguyên. Chỉ cần tải lại cấu hình bootloader vào Master Boot Record (MBR) của ổ cứng. Trước tiên khởi động máy boot từ một đĩa Linux Live CD, mở terminal và chạy lệnh:
sudo grub-install /dev/sda

Lệnh trên đúng khi các hệ điều hành cài trên ổ cứng thứ nhất (hoặc ổ cứng duy nhất - /dev/sda). Trình grub-install sẽ phát hiện ra Grub đã có và khôi phục lại mọi thứ. Nếu không được, bạn phải cài thủ công như sau:

Chạy lệnh sudo grub (với Ubuntu, hoặc với Mandriva chạy lệnh su rồi chạy tiếp grub) để vào grub shell (dấu nhắc lệnh chuyển thành grub>). Trong grub shell chạy lệnh:
find /boot/grub/stage1

... để xác định xem partition nào có file Grub. Nếu Win cài trên partition 1 thì Grub sẽ nằm trên partition 2 và lệnh trên trả lại kết quả (hd0,1). Sau đó chạy tiếp ba lệnh:
root (hd0,1)
setup (hd0)
quit

Lệnh thứ nhất xác định boot partition, lệnh thứ hai ghi bootloader vào MBR, lệnh thứ ba để thoát khỏi Grub shell.

Dùng lệnh để phát hiện lỗi


Giao diện đồ họa thân thiện, dễ dùng nhưng khó phát hiện lỗi. Giao diện dòng lệnh (màn hình terminal) là nơi hiện lên chi tiết quá trình thực hiện một lệnh và các thông báo lỗi nếu có.

Khi thực hiện một số việc trong màn hình đồ họa (cài một phần mềm, chạy một phần mềm, ...) có thể không có kết quả mà không hề có thông báo lỗi.

Khi đó, nếu biết lệnh tương ứng, mở terminal và chạy lệnh đó trong terminal sẽ có các thông báo lỗi hiện trên màn hình. Thậm chí cả khi đã chạy được một phần mềm, nhấn vào một nút lệnh trong màn hình đồ họa bị lỗi cũng có thể làm như trên: mở terminal, chạy lệnh theo tên phần mềm, để nguyên terminal vẫn mở, nhấn vào nút lệnh bị lỗi, quay lại đọc trên màn hình terminal có thể có thông báo lỗi.

Dùng Live CD để chẩn đoán lỗi.


Khi không boot trực tiếp vào Linux đã cài trên ổ cứng, vẫn có thể chạy Linux từ đĩa Live CD (hoặc Live DVD) mà không cần cài bất kỳ thứ gì vào ổ cứng. Các hướng dẫn dưới đây dùng Live CD của bản Linux Knoppix.

Còn một phương án nữa là dùng bản Linux System Rescue CD. Bản này nhỏ (dưới 250MB), có thể cài lên ổ USB, có giao diện đồ hoạ và một số công cụ sửa chữa, khôi phục.

Khi khởi động ngưng lại giữa chừng.


Trước đây, khi khởi động các hệ Linux cho hiện lần lượt hàng loạt text trên màn hình. Phần lớn người dùng bình thường không hiểu nổi những text đó. Nhưng nếu quá trình khởi động có lỗi bị dừng lại thì những dòng text cuối cùng có thể cho biết nguyên nhân lỗi.

Hiện nay, các bản Linux khi khởi động đều có màn hình đồ hoạ (splash) đẹp nhưng nếu quá trình boot bị lỗi thì màn hình đó không cho biết nguyên nhân.

Khi đó có thể thêm option noapic vào quá trình boot hoặc sửa file /boot/grub/menu.lst hoặc /boot/grub/grub.conf để cho hiện các thông báo text khi khởi động.

Làm tương tự, nếu quá trình shutdown có lỗi.

Từng bước: phát hiện lỗi khi boot


Bỏ màn hình splash:

Knoppix: điểm sáng mục đầu trong boot menu, nhấn E để soạn thảo, chuyển con trỏ xuống dòng bắt đầu bằng từ "kernel" nhấn E lần nữa. Bỏ các option liên quan đến quiet và splash, làm xong nhấn Enter rồi B để boot lại.


Ubuntu, Mandriva, openSUSE: khi boot menu xuất hiện, dùng phím mũi tên chuyển thanh sáng xuống dòng Recovery Mode (với Ubuntu) hoặc Safe Mode (với Mandriva) hoặc Failsafe (với openSUSE) rồi Enter để khởi động tiếp.


(hoặc để thanh sáng ở hàng đầu tiên, nhấn F2, bên dưới màn hình xuất hiện Boot Options. Xoá các mục có từ quiet, splash rồi Enter để khởi động tiếp.)






Tìm vấn đề:

  • Theo dõi màn hình khởi động như trên để phát hiện lỗi khi quá trinh boot bị ngừng lại. Google thông báo lỗi để tìm cách giải quyết. Lỗi cũng có thể do không tương thích phần cứng: tháo các phần cứng không cần thiết rồi khởi động lại.

  • Nếu hệ thống khởi động được đến dấu  nhắc lệnh thì phần kernel không có lỗi. Gõ lệnh startx rồi Enter để vào chế độ đồ hoạ. Nếu đồ hoạ khởi động tốt thì lỗi thường nằm ở phần cấu hình của user (ở các chế độ recovery mode, ... này đăng nhập theo user root). Xoá user đi tạo lại hoặc tạo user mới thường giải quyết được vấn đề.




Sửa các lỗi liên quan đến phần cứng.


Các driver cho phần lớn thiết bị phần cứng đã được cài khi cài Linux dưới dạng các kernel module. Hệ thống HAL/D-BUS sẽ nhận ra các thiết bị và tự động tải các driver module tương ứng vào bộ nhớ. Làm sao biết module nào đã được tải và nếu chưa thì giải quyết thế nào?

Phát hiện các phần cứng.


Để xem có các thiết bị nào kết nối vào các cổng PCI và USB, chạy các lệnh sau trong terminal:
sudo lspci
sudo lsusb

(lệnh trên dùng cho Ubuntu. Với Mandriva đầu tiên chạy lệnh su để chuyển sang user root, rồi chạy lệnh lspci và lsusb)

...lspci  sẽ cho ra kết quả tương tự như thế này:

00:1f.2 SATA controller: Intel Corporation 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller (rev 02)


01:00.0 VGA compatible controller: nVidia Corporation GeForce 7100 GS (rev a1)


02:00.1 IDE interface: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 03)


03:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)



...hoặc như thế này (với lệnh lsusb):
Bus 001 Device 004: ID 03f0:2c17 Hewlett-PackardBus 004 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power SupplyBus 002 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

Muốn xem thêm thông tin về một thiết bị, thêm các option -s và -v như sau:
sudo lspci -s 03:00.0 -v
sudo lsusb -s 001:004 -v

Ví dụ lệnh sudo lspci -s 02:00.0 -v  với một card mạng LAN sẽ cho kết quả như sau:

02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
Subsystem: Giga-byte Technology Device e000
Flags: bus master, fast devsel, latency 0, IRQ 17
I/O ports at d000 [size=256]
Memory at e1110000 (64-bit, prefetchable) [size=4K]
Memory at e1100000 (64-bit, prefetchable) [size=64K]
[virtual] Expansion ROM at e1120000 [disabled] [size=64K]
Capabilities: [40] Power Management version 3
Capabilities: [50] Message Signalled Interrupts: Mask- 64bit+ Queue=0/1 Enable-
Capabilities: [70] Express Endpoint, MSI 01
Capabilities: [b0] MSI-X: Enable- Mask- TabSize=2
Capabilities: [d0] Vital Product Data <?>
Capabilities: [100] Advanced Error Reporting <?>
Capabilities: [140] Virtual Channel <?>
Capabilities: [160] Device Serial Number 78-56-34-12-78-56-34-12
Kernel driver in use: r8169
Kernel modules: r8169

Thông tin trên cho biết (2 dòng cuối) driver của card mạng này là r8169 và driver này có trong môđun r8169. Một kernel module có thể có nhiều driver nên tên driver và tên module có thể khác nhau.

Ngoài công cụ dòng lệnh, có thể dùng các chương trình đồ hoạ (tương tự như Device Manager của Windows) để xem thông tin về phần cứng. Một số hệ Linux cài sẵn chương trình này (Mandriva, openSUSE), một số hệ khác phải cài thêm. Một trong những chương trình đó là Hardinfo. Màn hình như sau:




Nếu một thiết bị nào không làm việc trong bộ Linux đã cài nhưng làm việc khi boot bằng Live CD thì vẫn trong chế độ Live CD, chạy lệnh lspci -k để xem thiết bị đó dùng module nào. Sau đó quay lại khởi động vào hệ Linux đã cài và thử tải module đó bằng lệnh:
modprobe -v modulename

Nếu lệnh trên không có thông báo lỗi nghĩa là module đã được tải vào bộ nhớ. Để kiểm tra, dùng lệnh lsmod (list module), trong danh sách hiện ra phải có module vừa tải bằng lệnh modprobe ở trên. Nếu có thông báo "device not present" nghĩa là thiết bị ứng với module đó không có, tức là trong lệnh modprobe trên ta chọn sai module.


Nếu thông báo là "module not found" nghĩa là trong nhân Linux không có module hỗ trợ thiết bị đang xét. Khi đó hoặc phải dịch lại kernel để kích hoạt module cần thiết hoặc chờ nâng cấp lên kernel mới hơn.



Kiểm tra version của linux kernel bản Live CD và bản Linux đã cài bằng lệnh sau:
uname -r

Nếu kernel của Live CD mới hơn, nâng cấp kernel của bản Linux đã cài lên (nếu có).

Một trường hợp nữa là thiết bị đang xét không có driver trong kernel mà phải dùng một driver bên ngoài cài thêm. Một số card wifi, máy in ở trường hợp này. Đầu tiên tìm các driver này trong các kho phần mềm của bản Linux, nếu không thấy phải tìm trên Internet.




Tải tự động các module.


Thông thường, Linux sẽ tự động nhận các thiết bị phần cứng và tải các module cần thiết khi khởi động. Trong trường hợp có một module cần thiết không tải tự động, ta có thể bắt nó tải như sau:

Trong Ubuntu, mở file /etc/modules rồi thêm tên module đó vào cuối file. Trong SUSE, mở file /etc/sysconfig/kernel đặt settings MODULES_LOADED_ON_BOOT:
MODULES_LOADED_ON_BOOT="module1 module2"

Trong Fedora, thêm một file script có đuôi là .modules vào thư mục /etc/sysconfig/modules/. Ví dụ cần tải module NdisWrapper, file /etc/sysconfig/modules/ndiswrapper.modules có nội dung như sau:
#!/bin/sh/sbin/modprobe ndiswrapper

Vì đó là file script nên cần phải gán cho nó thuộc tính chạy được (executable) bằng lệnh sau:
sudo chmod +x /etc/sysconfig/modules/ndiswrapper.modules


Đừng đổ mọi lỗi cho phần mềm.


Lỗi khó chẩn đoán nhất là những lỗi xảy ra ngẫu nhiên, nhất là khi nó gây treo máy hoặc tắt máy không có cảnh báo trước. Nếu lỗi xảy ra cùng vào một thời điểm hoặc khi dùng cùng một phần mềm thì còn có thể đoán được nguyên nhân, nhưng nếu nó xảy ra hoàn toàn ngẫu nhiên thì có thể là do phần cứng. Thông thường nhất là máy bị quá nóng, lỗi bộ nhớ hoặc bộ nguồn điện bị quá tải.

Cũng đừng có nghĩ rằng "lỗi này không xảy ra với hệ điều hành khác của tôi (ngụ ý Windows) vậy thì nó là lỗi của Linux rồi" vì các hệ điều hành làm việc với phần cứng theo những cách khác nhau. Ví dụ, Linux dùng bộ nhớ tích cực hơn do đó nếu bộ nhớ bị lỗi, Linux sẽ dễ mất ổn định hơn trước khi Windows để lộ ra triệu chứng. Quạt và các cánh tản nhiệt lâu ngày sẽ bị bụi và các chất bẩn khác bám làm giảm tác dụng, hãy định kỳ làm sạch. Cài gói phần mềm lm_sensors để theo dõi nhiệt độ CPU và case, cài những trình theo dõi hệ thống như GKrellM để hiện các thông số nhiệt độ trên desktop.

Laptop được thông gió tốt nhưng cũng nên kiểm tra các cửa thông gió tránh bị nghẽn. Nguồn của laptop tương đối an toàn vì có pin đảm bảo cung cấp điện ổn định. Nhưng nguồn của desktop thì không chắc như vậy nhất là các bộ nguồn rẻ tiền, no-name đi cùng với các case giá rẻ. Do giảm giá nên một số bộ nguồn đó chỉ đáp ứng đúng tính năng khi còn mới. Vì vậy nên thử các bộ nguồn khác nhau, bạn có thể sẽ ngạc nhiên. Nguồn không tốt có thể làm hỏng phần cứng và dữ liệu, vì vậy tiết kiệm có thể là không tiết kiệm trong khi một bộ nguồn tốt có thể dùng được nhiều năm. Nếu nguồn điện nơi bạn ở không ổn định, một bộ lưu điện là đáng đầu tư. Thiết bị chống sốc điện chỉ chống sốc không chống được giảm điện áp.

Test bộ nhớ rất dễ dàng chỉ tốn thời gian. Phần lớn các đĩa Linux Live CD đều có menu test bộ nhớ. Cần phải boot máy bằng Live CD để dùng ít bộ nhớ nhất vì chỉ test được vùng bộ nhớ không sử dụng. Nên test trong chế độ full test ít nhất hai lần và có thể để chạy qua đêm. Càng test kỹ càng chắc là bộ nhớ OK. Nếu đã có lỗi thì nên thay bộ nhớ khác.

Card màn hình.


Các cách làm nói trên không áp dụng cho card màn hình. Các driver card màn hình nằm trong phần mềm X.org, trừ các card ATI hoặc Nvidia vừa có driver nguồn mở vừa có driver nguồn đóng của chính hãng (tốt hơn). Nếu cần các hiệu ứng 3D để chơi game hay kích hoạt các hiệu ứng màn hình thì nên dùng driver chính hãng.

Nếu các driver chính hãng có trong kho phần mềm của bản Linux đang dùng thì cài từ đó dùng trình package manager là tốt nhất vì khi cài nó sẽ thay đổi cả file xorg.conf kiểm soát cấu hình đồ hoạ. Còn nếu phải tải driver từ site của hãng về thì cần đọc kỹ hướng dẫn cài đặt.

Mất màn hình đồ hoạ.


Sau khi đã cài đặt xong Linux, khởi động lại máy, thay vì màn hình đồ hoạ, bạn chỉ thấy màn hình đen xì với con trỏ nhấp nháy (hoặc màn hình đồ hoạ nhưng độ phân giải thấp, màu xấu, màn hình méo). Điều gì xảy ra? Thường nguyên nhân là vì chương trình cài đặt đã không tự phát hiện được đúng các thuộc tính của card màn hình và màn hình. Vì vậy phải cấu hình lại card màn hình, màn hình.

(Hiện tượng trên cũng xảy ra khi bạn chỉnh một số thông số của card màn hình, màn hình)

Dùng giao diện giòng lệnh.


Để cấu hình lại card màn hình, màn hình (và cả bàn phím, chuột), chạy các lệnh sau đây:


  • openSUSE - yast2

  • Debian - dpkg-reconfigure xserver-xorg

  • Ubuntu - sudo dpkg-reconfigure xserver-xorg

  • Mandriva - XFdrake


Các lệnh trên sẽ mở ra một giao diện text để cấu hình. Nếu bản Linux của bạn không có các lệnh trên thì dùng lệnh:
X -configure

Sau khi cấu hình xong, nếu vẫn còn ở giao diện dòng lệnh thì chạy lệnh sau để khởi động giao diện đồ hoạ:
startx

Nếu màn hình đồ hoạ vẫn không khởi động được thì tìm lỗi trong file:
/var/log/ Xorg.0.log

.trong đó những dòng có chứa cụm ký tự (EE) là thông báo lỗi. Có thể tìm nhanh thông báo lỗi bằng lệnh sau:
grep EE /var/log/Xorg.0.log


1 comment:

Chăm sóc ổ cứng trong Linux « Phần mềm nguồn mở – Linux said...

[...] Khôi phục boot menu bị mất (ví dụ sau khi cài lại Windows) theo cách đã nêu ở đây. [...]