Vài kinh nghiệm dùng máy Linux
Để máy Linux không bao giờ bị treo cứng lâu
Kernel của Linux có các module để điều khiển các mạch watchdog trong máy. Các mạch watchdog đó có tính chất là một khi đã được bật lên rồi thì phải đụng đến nó đều đặn. Nếu nó thấy để lâu không đụng tới thì nó sẽ khởi động lại máy giống như ta bấm nút Reset.
Các máy PC trong khoảng 10 năm tuổi trở xuống thường có mạch watchdog sẵn trong mainboard. Có nhiều mạch watchdog tích hợp trong các chipset khác nhau, ví dụ như chip 8xx ICH của Intel, chip 83627HF của Winbond, chip M1535 của Ali… Để biết mainboard đang dùng có mạch watchdog nào thì phải biết nó dùng chipset nào bằng cách xem tài liệu hoặc lấy kính lúp coi số hiệu mấy con chip trên mainboard. Mainboard tôi đang dùng có chip ICH5 của Intel và có luôn chip 83627HF của Winbond, chỉ có watchdog trong ICH5 được dùng còn watchdog trong Winbond không dùng. Mainboard Pentium 100 thì cũng có chip 83877 của Winbond nhưng lại không được nối tới mạch reset nên không dùng được.
Kernel tạo sẵn trong các distribution thường có sẵn module watchdog driver cho nhiều loại chip. Ví dụ với máy cài FC6, kernel được build sẵn với các module driver sau:
[lhboi@desktop opt]$ ls /lib/modules/2.6.18-1.2798.fc6/kernel/drivers/char/watchdog/ alim1535_wdt.ko i8xx_tco.ko pcwd_pci.ko w83627hf_wdt.ko wdt_pci.ko alim7101_wdt.ko ibmasr.ko pcwd_usb.ko w83877f_wdt.ko i6300esb.ko machzwd.ko softdog.ko w83977f_wdt.ko
Nhìn tên một số file trong đám đó có thể đoán ra đó là driver cho chip gì: ALI M1535, ALI M7101, Intel ICH 8xx, Winbond 83… Nếu đã biết mainboard có chip nào trong đám đó thì load module đó lên bằng lệnhmodprobe w83627hf_wdt.
Nếu chưa biết chip nào thì cứ thử load lần lượt từng module vào. Khi load module mà không đúng với chip thì nó sẽ báo ngay là không đúng, nếu nó không báo gì hết thì dùng lệnh dmesg xem thông báo device watchdog đã được initialize
WDT driver for the Winbond(TM) W83627HF Super I/O chip initialising. w83627hf WDT: initialized. timeout=60 sec (nowayout=0)Load module rồi thử coi module đó có dùng được không bằng lệnh echo x > /dev/watchdog, rồi ngồi chờ chừng một tới hai phút, nếu máy khởi động lại tức là module đó dùng được. Máy khởi động y như bị bấm nút Reset chứ không phải là init 6, do đó nên thử ở runlevel 1 để ít ảnh hưởng tới các service của máy. Trong một tới hai phút đó có thể dùng lệnh dmesg để xem các thông báo của driver watchdog như:
w83627hf WDT: Unexpected close, not stopping watchdog!
Nhiều khi load module được nhưng máy không khởi động, đó là do mainboard có chip đó nhưng nó không nối tới mạch reset CPU. Nếu thử hết đám module đó mà vẫn chưa tìm thấy module nào dùng được thì config và build kernel lại để chọn những module khác (trong mục Device Drivers - Character devices - Watchdog Cards). Trong các module driver có một module là Software watchdog. Nó không dùng chip gì hết mà tự làm bằng code trong kernel, dùng tạm cũng được nhưng đôi khi không có tác dụng.
Để dùng watchdog, ta chạy một script gồm một vòng lặp bất tận, trong vòng lặp đó làm hai việc là ghi vào /dev/watchdog và kiểm tra một số dấu hiệu chứng tỏ là máy còn làm việc bình thường. Chu kỳ của vòng lặp đó không lớn hơn x giây (x tuỳ thuộc vào chip và thông số đặt cho watchdog, thường trong khoảng 30-60 giây). Nếu phát hiện thấy dấu hiệu bất thường thì exit khỏi vòng lặp, mạch watchdog sẽ khởi động lại máy; hoặc nếu việc kiểm tra quá lâu (cũng là dấu hiệu bất thường) thì máy cũng sẽ khởi động lại. Tuỳ theo nhiệm vụ của máy mà ta chọn kiểm tra dấu hiệu nào. Ví dụ để kiểm tra web server thì ta connect tới TCP port 80, GET về một trang html, rồi ping tới default gateway, có thể sleep 10 giây nữa; như vậy khi web server không trả lời hoặc ping không được default gateway thì máy sẽ khởi động lại.
Các máy ATM của ngân hàng đều dùng mạch watchdog để bảo đảm là máy không bị treo quá lâu. Những máy dùng Windows thì không có sẵn driver cho chip on board như Linux mà phải mua card watchdog về cắm vào và cài driver.
Cài Linux vào software RAID0
Khi có từ hai đĩa cứng trở lên trong máy, ta có thể ghép chúng lại thành RAID0 để tăng tốc độ đọc/ghi. RAID0 là một dãy các đĩa cứng được dùng cùng một lúc, khi ghi một file lớn vào RAID0 gồm n đĩa thì file sẽ được chia ra và ghi cùng lúc vào các block của các đĩa cứng, mỗi đĩa cứng chỉ chứa 1/n file do đó thời gian bus hệ thống chờ để ghi data sẽ giảm xuống. Thời gian khi đọc ra cũng nhanh hơn.
Nếu ta có hardware RAID controller thì không cần làm gì đặc biệt ở hệ điều hành cũng cài được hệ điều hành lên RAID. Nhưng máy ở gia đình thì ít khi có hardware RAID controller mà phải dùng software RAID. Hệ điều hành phải đứng ra tổ chức việc ghi RAID. Khi máy mới boot lên, hệ điều hành chưa chạy thì không thể điều khiển RAID được. Do đó MS Windows không thể cài vào software RAID (trừ dạng đơn giản nhất là RAID1, tức là mirrored). Linux có thể cài vào software RAID bất kỳ nhờ vào việc Linux có thể để nhân hệ điều hành trong một file system riêng /boot. Chỉ cần để /boot trong một đĩa cứng thường hoặc RAID1 là đủ để Linux boot lên và dùng toàn bộ các file system khác, kể cả /, trong software RAID bất kỳ. Kích thước của /boot rất nhỏ so với toàn bộ hệ điều hành; chỉ cần 20 MB là dư dùng, mặc dù khi cài thôi Fedora Core đòi /boot phải từ 75 MB trở lên.
Giả sử máy có hai đĩa cứng bằng nhau hda và hdc, tạo 20 MB /boot file system trên hda, tạo 250 MB swap trên hda và 270 MB swap trên hdc. Bây giờ, phần còn lại của hai đĩa vẫn bằng nhau. Tạo hai RAID partition trên toàn bộ phần còn lại. Tạo một RAID0 từ hai RAID partition đó. Tạo một physical volume trên RAID0 đó. Tạo một volume group từ physical volume. Rồi tạo các file system là các logical volume trong volume group.
Dùng LVM thay RAID0, RAID1
Một cách làm khác là tạo hai physical volume trên hai partition trên hai đĩa cứng, rồi tạo một volume group gồm hai physical volume đó, sau đó tạo các logical volume có hai stripe. Làm như vậy cũng có tác dụng như RAID0.
Nhưng khi đang cài đặt Linux thì không tạo được logical volume có nhiều stripe, nên cách này không làm được với / file system. / file system chỉ ở trên 1 stripe; nhưng các file system /usr, /home, /var thì có thể ở trên nhiều stripe và tác dụng cũng khá tốt vì / file system chỉ là 1 phần nhỏ trong tất cả các file system.
Muốn làm vậy thì khi cài Linux phải tạo các file system /usr, /home, /var trên các logical volume của 1 volumegroup. Sau khi cài xong, mở rộng volume group đó ra trên nhiều physical volume, rồi tạo các logical volume mới có nhiều stripe và kích thước lớn hơn hoặc bằng các file system kia, cuối cùng cp -pR tất cả các file từ các file system kia sang và sửa /etc/fstab lại để dùng các file system trên các logical mới.
LVM cũng có thể làm thay RAID1 (mirror).
Tốc độ chép file qua NFS và SMB
Thử chép 703 MB của 439 file giữa hai máy: Pentium 4 2.6GHz/NIC Intel 100Mbps, và Pentium M 1,7GHz NIC Intel 1000Mbps. Hai máy nối với nhau qua switch 100Mbps.
Client | Server | Tốc độ (Mbps) |
---|---|---|
NFS Linux | NFS Linux | 86 |
SMB Windows XP | SMB Windows XP | 56 |
SMB Windows XP | SMB Linux | 51 |
NFS Windows XP | NFS Linux | 34,3 |
SMB Linux | SMB Windows XP | 29,5 |
Tăng kích thước file system trong logical volume
Dùng Logical Volume (LVM) để chứa file system rất tiện ở chỗ là có thể tăng kích thước khi file system bị hết chỗ. Nếu các đĩa cứng đang dùng còn dư chỗ chưa dùng đến thì cho nó vào volume group rồi cho logical volume đang đầy nở đến chỗ đó. Nếu các đĩa cứng đang dùng đã hết chỗ thì mua thêm ổ cứng mới gắn vào volume group.
Để tăng kích thước thì làm các lệnh sau:
- umount file system
- lvresize -L +size{MG} LogicalVolumePath
- fsck device
- resize2fs device
- mount file system
Do phải umount file system nên không thể dùng cách này để tăng kích thước các file system cần thiết khi máy đang chạy là /usr, /var và nhất là /. Khi các file system này bị chật và không thể tăng kích thước thì ta có thể tạo một file system mới và dời bớt một directory nào đó từ file system bị chật sang file system mới.
Lệnh resize2fs có thể dùng cho cả file system loại ext3.
Logical Volume là một phần của một hay nhiều Physical Volume. Physical Volume được tạo từ một hay nhiều partition hay RAID. Vậy khi có từ hai đĩa cứng giống nhau trở lên thì có thể kết hợp vừa RAID vừa LVM để tạo các file system một cách linh động và có tốc độ cao. Khi mới cài đặt thì chỉ tạo các file system là các logical volume với kích thước vừa đủ dùng, để lại một khoảng trống chưa dùng trong physical volume. Khi các file system bắt đầu chật mới tăng kích thước lên cho đủ.
File system nằm trực tiếp trên partition (không phải logical volume) cũng có thể tăng kích thước nếu đĩa cứng còn trống ngay sát sau partition đó.
Lệnh resize2fs cũng có thể giảm kích thước file system trước khi giảm kích thước của partition hay logical volume.
Tạo các file định tính địa phương trong Linux
Trong Linux, biến môi trường LANG dùng để thay đổi các tính chất địa phương (kiểu ngày tháng, tên tháng, ký hiệu tiền, thứ tự từ điển…) của môi trường làm việc. Để chọn địa phương Việt nam thì ta đặt LANG=vi_VN.UTF-8.
Nếu cần thì ta còn phải dịch lại các file mô tả tính chất địa phương. Làm như sau trên Fedora Core 2:
cd /usr/share/i18n/locales/ localedef --verbose --force -f UTF-8 -i vi_VN vi_VN.UTF-8
Các file trong /usr/lib/locale/vi_VN không bị thay đổi. Không rõ output vào đâu nhưng những thay đổi có tác dụng!
Configure kernel để dùng IDE ATA nhanh nhất
Phải xem tài liệu kèm theo mainboard để biết nó dùng PCI IDE chipset nào và config kernel cho đúng. Luôn luôn chọn configuration parameter CONFIG_BLK_DEV_IDEPCI=y và CONFIG_IDEDMA_PCI_AUTO=y.
Với mainboard dùng chip Intel PIIX, thì chọn CONFIG_BLK_DEV_PIIX=y. Với ổ cứng Maxtor ATA-100, thì hdparm -t /dev/hda sẽ cho buffered disk read lên đến 34 MB/s. Đáng lẽ ATA-100 thì phải được 100 MB/sec. Nếu không dùng configuration đúng thì buffered disk read sẽ nhỏ hơn 5 MB/s.
Sửa udev rule để các device node có access mode cần thiết
Sửa MODE trong các file trong /etc/udev/rules.d
* Những kinh nghiệm khác