Khởi động máy tính từ PXE

PXE (Preboot eXecution Environment hoặc Pre-eXecution Environment) là một môi trường cho phép khởi động máy tính bằng việc sử dụng card mạng cùng với RAM. Việc khởi động đó sẽ không phụ thuộc vào những thiết bị của máy tính như CD, harddisk và các hệ điều hành đã được cài đặt.



PXE bao gồm 2 thành phần: PXE Client và PXE Server. Thành phần PXE Client (PXE boot code) nằm trên card mạng. Các server, laptop hầu hết đều cho phép khởi động máy tính qua mạng với PXE boot code. Các mainboard có card mạng onboard cũng hầu hết có thành phần này. Card mạng có PXE boot code cũng được coi là một thiết bị khởi động giống như các thiết bị khởi động khác: ổ mềm, ổ cứng, ổ CD/DVD, ổ USB. PXE Server là phần mềm chạy trên một máy tính nào đó trong mạng LAN. Phần mềm này hỗ trợ các giao thức TFTP, DHCP.

Có thể xây dựng PXE Server để cung cấp việc cài đặt hệ điều hành Windows /Linux cho các máy tính mà không cần đĩa CD/DVD theo cách thức cài đặt truyền thống, hoặc cũng có thể xây dựng một mạng hoạt động không cần ổ cứng.

Khi máy tính gặp sự cố không khởi động được, người ta thường nghĩ đến các đĩa CD/DVD hoặc USB có thể khởi động được để khắc phục sự cố, phục hồi dữ liệu. Có một giải pháp khá hiệu quả là xây dựng một PXE Server trên một máy tính khác trong cùng mạng LAN và trên máy gặp sự cố, sẽ khởi động bằng card mạng và truy cập vào PXE Server để sử dụng các chương trình được cài sẵn trên đó. Bài viết này sẽ hướng dẫn cách thức xây dựng một PXE Server với nhiều lựa chọn khi khởi động để hỗ trợ người quản trị khắc phục các máy tính khi gặp sự cố. Các menu lựa chọn khi khởi động sẽ như sau:


Các menu khi khởi động từ card mạng

1. Cấu hình PXEServer với TFTPD32 và PXELinux
TFTPD32 là một chương trình nhỏ gọn, miễn phí và đã bao gồm DHCP server, TFTP server nên rất thuận tiện cho việc xây dựng một PXE Server. PXELinux là một gói phần mềm trong các phần mềm như syslinux, isolinux. Với PXELinux, bạn có thể tạo nhiều lựa chọn khi khởi động từ PXE.
Các phần mềm TFTPD32 và PXELinux đều được cài đặt và cấu hình trên PXE Server.

Hệ thống thử nghiệm
- PXE Server: Windows XP SP2 hoặc Windows 2003 Server.
- PXE Client: Máy tính có hỗ trợ khởi động qua mạng với PXE boot code, chọn máy có card mạng Intel onboard. RAM của máy tính này yêu cầu từ 384MB trở lên để có thể chạy được hết tất cả các lựa chọn trong bài viết.

Để người đọc thực hiện được việc xây dựng PXE Server, có thể download sẵn các file cần thiết trong file nén PXEServer_Base.rar (18.62 MB):

Link: http://www.mediafire.com/?91drthtt1nh

Sau khi download, giải nén được thư mục PXEServer. Copy thư mục này vào ổ C. Trong thư mục C:\PXEServer có các thành phần sau:
- Chương trình TFTPD32 bao gồm các file tftpd32.exe và tftpd32.chm nằm trong C:\PXEServer.
- Các file pxelinux.0, menu.c32, chain.c32, reboot.c32, memdisk đều thuộc gói phần mềm syslinux (bao gồm syslinux, isolinux, pxelinux). Các file cấu hình (dạng text) của PXELinux nằm trong thư mục TFTPRoot là: pxelinux.cfg\default; image\others.conf; linux\linux.conf.
- Thư mục TFTPRoot\boot có sẵn các file khởi động qua PXE của WinPE 2.0 (file WIM). Hai file CreateBCD.cmd, bcdedit.exe được dùng để tạo BCD cho các file WIM.
- Thư mục TFTPRoot\Image với các file image có đuôi .gz để khởi động máy tính với memdisk.

Chạy chương trình TFTPD32 bằng cách nhắp đúp vào file C:\PXEServer\tftpd32.exe. Giao diện của TFTPD32 như hình dưới:


Giao diện chương trình TFTPD32

Trên giao diện của TFTPD32, chọn các thông số như sau:
- Current Directory: thư mục gốc của TFTP, chọn C:\PXEServer\TFTPRoot.
- Server interface: Địa chỉ IP của card mạng đang được sử dụng. Trong ví dụ này card mạng đang sử dụng địa chỉ IP 192.168.1.101/255.255.255.0.
Chọn tab DHCP server để thiết lập các thông số sau:
- IP pool starting address: IP bắt đầu của máy sử dụng PXE. Thiết lập IP cùng lớp với IP của Server Inteface đang được chọn. Mục này, ví dụ 192.168.1.0
- Size of pool: số IP dùng cho DHCP của PXEServer, ví dụ chọn 20.
- Boot File: lựa chọn file khởi động của PXELinux là pxelinux.0. File này nằm trong thư mục C:\PXEServer\TFTPRoot. Do đã chọn mục gốc của TFTP là C:\PXEServer\TFTPRoot, nên ta chỉ cần gõ tên file pxelinux.0 vào ô này.
- Mask: 255.255.255.0
IP và Mask sẽ phụ thuộc vào lớp mạng đang sử dụng.

Sau đó nhắp nút Setting, xuất hiện hộp thoại TFTPD32 Settings.


TFTPD32 Settings

Trong hộp thoại Settings của TFTPD32, cần chú ý các thông số ở các nhóm Global Settings, Advanced TFTP Options như hình trên. Sau đó nhắp OK để kết thúc việc thiết lập, quay trở lại giao diện chính của TFTPD32. Khi đó PXE Server đã sẵn sàng cho việc sử dụng.

Khi kết nối từ PXE Client, trên máy cài PXE Server, trên TFTPD32 có thể theo dõi được các thông tin về việc truyền file qua giao thức TFTP, thông tin địa chỉ IP của PXEClient.


Truyền file qua TFTP

Trên hình trên, có thể theo dõi được kích thước file truyền qua TFTP, tốc độ truyền và địa chỉ IP (được cấp qua DHCP của TFTPD32) của máy đang kết nối đến.

Có thể chọn tab Log viewer để theo dõi việc kết nối đến PXEServer để có thể xử lý khi kết nối không thành công.



2. Khởi động máy tính từ card mạng với PXE boot code
Trên các laptop, server, hoặc các máy tính lắp ráp ngày nay đều có card mạng có PXE boot code cho phép khởi động qua mạng. Có thể vào BIOS của máy tính để kiểm tra tính năng PXE đã được cho phép (enable) hay chưa.

Để khởi động máy tính từ PXE, thông thường khi bật máy tính bấm phím F12, sẽ xuất hiện danh mục Boot Device của máy tính, khi đó chọn Boot Device là card mạng.


Network Booting

Trên hình trên, khi máy tính khởi động từ card mạng, máy tính sẽ dò tìm DHCP Server của PXE Server trong LAN, khi dò thấy tại IP 192.168.1.101 (địa chỉ của máy cài TFTPD32), PXE Client sẽ gửi yêu cầu và nhận IP do DHCP của PXE Server cung cấp. Sau đó sẽ nạp file pxelinux.0, để gọi menu.c32 nạp file cấu hình của pxelinux là pxelinux.cfg\default và đưa ra menu với các lựa chọn như hình dưới (thư mục pxelinux.cfg nằm trong mục gốc của TFTP Server là C:\PXEServer\TFTPRoot):


Menu chính của PXEServer

Trên menu chính của PXEServer có 10 lựa chọn như sau:

- 0. Boot from Harddisk: Khởi động từ ổ cứng của máy tính. Có thể dùng notepad để mở file pxelinux.cfg\default và tìm các thông tin sau:
# Boor from Harddisk
LABEL LOCAL
MENU LABEL ^0. Boot from Harddisk
KERNEL chain.c32 hd0 1
Trong cấu hình để khởi động từ harddisk, cần chú ý đến dòng "Kernel chain.c32 hd0 1". Với việc sử dụng chain.c32 (của syslinux) cùng với tham số "hd0 1" sẽ cho phép gọi phân vùng 1 của ổ cứng thứ nhất (hd0) để khởi động. Có thể thay đổi các giá trị để khởi động từ ổ cứng khác cũng như phân vùng khác trên ổ cứng.
- Các mục 1-7 sẽ được hướng dẫn chi tiết ở phía dưới, mục "8. Boot Linux Tools" được hướng dẫn như một lựa chọn thêm để có thể sử dụng một số bản Linux nhỏ.
- 10. REBOOT: Cho phép reboot lại máy tính. Khi mở file cấu hình pxelinux.cfg\default, sẽ có các thông tin sau:
# Reboot
LABEL REBOOT
MENU LABEL ^10. REBOOT
KERNEL reboot.c32
Trong cấu hình trên, sử dụng kernel là reboot.c32 để máy tính có thể khởi động lại.
- 9. Boot Other Tools: Khi chọn lựa chọn này, pxelinux sẽ gọi file cấu hình others.conf trong thư mục Image để hiển thị ra menu Boot Other Tools.


Menu Boot Other Tools

Menu "Boot Other Tools" cho phép máy tính khởi động từ các chương trình như Active Boot Disk (phiên bản DOS), HDD Regenerator, Ghost, Smart Boot Manager. Các chương trình này đã được kèm theo trong file nén và được lưu thành các file .gz ở thư mục Image. Cách thức cấu hình sẽ được hướng dẫn ở mục Memdisk.

Như vậy với file nén PXEServer_Base.rar download ở trên, người đọc đã có thể sử dụng được nhưng lựa chọn cơ bản của PXE. Tuy nhiên còn có nhiều lựa chọn chưa có, và các phần dưới sẽ hướng dẫn cách thức tạo thêm những lựa chọn đó.

3. Memdisk
Memdisk là một file nằm trong thư mục TFTPRoot\Image. Memdisk được các chương trình quản lý boot như syslinux, isolinux, pxelinux, grub sử dụng để nạp một file image của đĩa mềm, của ổ cứng.
Memdisk với PXELinux hỗ trợ các dạng file image của đĩa mềm chuẩn (kích thước tối đa là 2880 K) và hỗ trợ chuẩn nén gzip. Tham khảo ví dụ sau:
# Active Boot Disk
LABEL ACTIVE
MENU LABEL ^0. Active Boot Disk V2.1 DOS
KERNEL image/memdisk
APPEND initrd=image/active.gz
File active.gz là file active.img được nén theo chuẩn gzip để giảm kích thước file khi truyền qua mạng. Trên Windows, có thể dùng chương trình quản lý file quen thuộc là Total Commander để nén file .img thành file .gz.


Total Commander nén file .gz

Cũng có thể sử dụng memdisk với các file image của ổ cứng dạng thực (raw) như các file .dsk. Trong thư mục TFTPRoot\Image có file dos32.gz là file dos32.dsk được nén chuẩn gzip. File dos32.dsk là một file image của ổ cứng 32 MB có sẵn hệ điều hành DOS và các chương trình như GHOST, NTFS4DOS,... Tham khảo cách sử dụng trong file pxelinux.cfg\default như sau:
# Boot DOS98
LABEL DOS98
MENU LABEL ^6. Boot DOS98 (Ghost, NTFS, ...)
KERNEL image/memdisk
APPEND initrd=image/dos32.gz harddisk
Trong ví dụ này, chú ý là tham số harddisk đặt ở dòng APPEND. Nếu không dùng tham số harddisk, memdisk sẽ hiểu đó là một file image của floppy và file .dsk không thể khởi động được. Đây là điểm khác biệt khi sử dụng memdisk so với syslinux và grub.

Với việc sử dụng file .dsk, có thể tạo thêm lựa chọn để khởi động với đĩa Hiren V9.3 theo các bước sau:
- Download file hiren93.rar (62.36 MB): http://www.mediafire.com/?fw2uj241znh
- Giải nén file hiren93.rar, được file hiren93.dsk. Dùng Total Commander để nén file hiren93.dsk thành file hiren93.gz (file này cũng có thể dùng được với GRUB4DOS). Copy file hiren93.gz vào thư mục TFTPRoot\Image.
- Xác nhận lại các thông tin sau trong file pxelinux.cfg\default:
# Boot HIREN V93
LABEL HIREN
MENU LABEL ^7. Hiren Boot Disk V9.3
KERNEL image/memdisk
APPEND initrd=image/hiren93.gz harddisk

Như vậy khi lựa chọn khởi động file image với memdisk, máy khởi động qua PXE sẽ download file image thông qua giao thức TFTP và máy tính sẽ khởi động với file image này. Xem một ví dụ khởi động với file image dưới đây:


Khởi động với file image qua PXE

4. PXELinux với một số bản Linux
Các bản Linux được hướng dẫn ở đây là Acronis Disk Directory, Acronis True Image, Paragon Partition Manager. Đó là những bản Linux khá quen thuộc đối với người dùng Windows.

Để tạo các lựa chọn khởi động qua PXE với Acronis, thực hiện theo các bước sau:
- Download file acronis_01.rar (19.79 MB): http://www.mediafire.com/?6zmypb8ojcb
- Giải nén file acronis_01.rar, được các file kernadd.dat, ramdadd.dat, kernati.dat, ramdati.dat. Copy các file này vào trong thư mục TFTPRoot\acronis (nếu thư mục này chưa có, hãy tạo nó).
- Xác nhận lại các thông tin sau trong file pxelinux.cfg\default
# Acronis Disk Director 10
LABEL AcronisDD10
MENU LABEL ^3. Acronis Disk Director 10
KERNEL acronis/kernadd.dat
APPEND initrd=acronis/ramdadd.dat quiet ramdisk_size=32768 vga=788 init=/sbin/init sysboot /active

# Acronis True Image 9
LABEL AcronisTI9
MENU LABEL ^4. Acronis True Image 9
KERNEL acronis/kernati.dat
APPEND initrd=acronis/ramdati.dat quiet ramdisk_size=32768 vga=788 init=/sbin/init sysboot /active

Để tạo lựa chọn khởi động qua PXE với Paragon Hard Disk Manager 2008, thực hiện theo các bước sau:
- Download file ParagonHDManager.rar (42.25 MB): http://www.mediafire.com/?82czzymhwl3
- Giải nén ParagonHDManager.rar được file .iso. Dùng WinImage mở file .iso và extract 2 file là vmlinuzp và initrd.gz vào thư mục TFTPRoot\PPM (nếu chưa có thư mục này, hãy tạo nó).
- Xác nhận lại các thông tin sau trong file pxelinux.cfg\default:
# Paragon Hard Disk Manager
LABEL PPM2008
MENU LABEL ^5. Paragon Hard Disk Manager 2008
KERNEL PPM/vmlinuzp
APPEND initrd=PPM/initrd.gz vga=788 ramdisk_size=42000
Khi khởi động qua PXE, Paragon Hard Disk Manager có giao diện như sau:


Pargon Hard Disk Manager 2008

Chú ý:
- Tham số vga=788: giá trị 788 tương ứng với màn hình 800x600 16-bit mầu, giá trị vga=791 sẽ tương ứng với màn hình 1024x768 16 bit mầu.
- Tham số ramdisk_size là dung lượng RAM dành cho file initrd tương ứng. ramdisk_size phải lớn hơn kích thước của file initrd.
- Có thể tham khảo cách thức thêm lựa chọn khởi động từ một số bản Linux như RIP, DSL trong file Linux\linux.conf.

Như vậy với lựa chọn khởi động với một số bản Linux, cần lưu ý 2 file là kernel và initrd. Các file này có thể tìm thấy trên các đĩa live của chương trình. Ban đầu PXE sẽ nạp kernel vào RAM trên máy tính, sau đó sẽ nạp initrd vào ramdisk và gọi chương trình trong ramdisk để sử dụng.

5. PXELinux với WinPE 1.5, 1.6
- Download file pxelinux_winpe.rar (57.91 MB):
Link: http://www.mediafire.com/?amddgzfyn8k

- Giải nén file này được các file NTLDR, startrom.0, ntdetect.com, winpe.iso, winnt.sif. Copy 5 file vào TFTPRoot.
- Xác nhận lại các thông tin sau trong file pxelinux.cfg\default:
# Boot from Winpe
LABEL WinPE15
MENU LABEL ^1. Boot from Winpe
KERNEL startrom.0


PXE nạp WinPE.ISO

Chú ý:
- startrom.0 chính là file khởi động qua PXE của WinPE 1.5, 1.6.
- File winpe.iso trên được tạo để có thể khởi động theo kiểu RAM với việc sử dụng 2 file ramdisk.sys và SETUPLDR.BIN từ Windows 2003 SP1. Việc tạo file này có thể tham khảo bài viết về WinBuilder với dự án NativePE. Tuy nhiên việc tạo file dạng này dễ lỗi và dẫn đến không sử dụng để khởi động qua PXE được. Nên tham khảo mục sau để sử dụng các file WIM.
- File winpe.iso được thêm các driver cho card mạng, điều khiển ổ cứng để nhận nhiều loại card mới cũng như các ổ cứng SATA.
- File NTLDR được đổi tên từ file SETUPLDR.BIN.
- Winnt.sif có chứa tên file winpe.iso. Có thể dùng notepad để thay đổi tên file khi cần thiết.

6. PXELinux với file WIM
Việc khởi động với file WIM từ CD, USB, PXE, Harddisk đều thực hiện dễ dàng hơn so với các phiên bản WinPE trước đó.

* Quá trình khởi động WIM File qua PXE
Việc khởi động file WIM (WinPE 2.0) qua PXE được mô tả như hình trên. File Bootmgr.exe nằm trong TFTPRoot, file pxeboot.0, boot.sdi và các file cần thiết để khởi động qua PXE nằm trong thư mục TFTPRoot\boot. Các file WIM có thể đặt ở thư mục khác, tuy nhiên để thuận tiện có thể đặt trong TFTPRoot\boot. Tùy theo tên file WIM, số lượng file WIM mà ta sẽ phải tạo file BCD nằm trong TFTPRoot\boot tương ứng.

Trong phần này, sẽ hướng dẫn cấu hình khởi động với 03 file WIM sau:
- Vista Recovery: Copy file boot.wim trong thư mục SOURCES trên đĩa DVD cài đặt Vista vào thư mục TFTPRoot\boot, sau đó đổi tên thành recovery.wim.
- Download Active Boot Disk theo link sau:
Link:
Part 1 (50Mb): http://www.mediafire.com/?5z9hltzheiz
Part 2 (50Mb): http://www.mediafire.com/?8cmnqmmetzz
Part 3 (34MB): http://www.mediafire.com/?bdx3fxmjzez

Sau khi download, dùng Winrar giải nén được file .iso. Sử dụng WinImage để mở file .iso và extract file SOURCE\boot.wim này vào thư mục TFTPRoot\boot. Đổi tên file boot.wim thành file activebd.wim.
- Download file undelete.rar (94.21 MB):

Link: http://www.mediafire.com/?ca2spjfv1gg

Sau khi download, giải nén, ta được file undelete.wim. Copy file này vào thư mục TFTPRoot\boot.

Tạo file BCD với các tham số sau:
- Tên 3 file wim là recovery.wim, activebd.wim, undelete.wim và được copy vào thư mục boot.
- File boot.sdi nằm trong thư mục boot

Việc tạo file BCD không thuận tiện khi chỉ gõ lệnh bcdedit. Trong C:\PXEServer\TFTPRoot đã có sẵn 2 file là bcdedit.exe và CreateBCD.cmd. File CreateBCD.cmd đã có các lệnh bcdedit để thực hiện việc tạo file boot\BCD một cách tự động. Dùng notepad để mở file này, chú ý các dòng sau:
set BCD-File=boot\BCD
set WIM-FileA=recovery.wim
set WIM-FileB=activebd.wim
set WIM-FileC=undelete.wim
Nếu đặt tên file wim khác, chỉ cần thay đổi ở tham số tương ứng.


File CreateBCD.cmd

- Xác nhận lại các thông tin sau trong file pxelinux.cfg\default:
# Boot from WIM files
LABEL WinPE20
MENU LABEL ^2. Boot from WIM files
KERNEL boot/pxeboot.0

Khi khởi động máy tính với PXE, trong menu chính, chọn "2. Boot from WIM files", máy tính sẽ gọi BCD mới được tạo trên để đưa ra menu có 3 lựa chọn khởi động như hình dưới.


Menu BCD

Khi chọn một trong 3 lựa chọn trên PXEClient sẽ download các file WIM thông qua TFTP vào RAMDISK, kết thúc việc download, sẽ chạy file này.


Download file WIM qua TFTP

Nhận xét
Các lựa chọn khởi động qua mạng với memdisk, khởi động với winpe 1.5, 1.6 , khởi động với file WIM (winpe2.0), khởi động với 1 số bản Linux đều có chung 1 điểm là sử dụng RAM (ramdisk) để nạp toàn bộ file tương ứng. Do đó nó có những ưu điểm, nhược điểm sau:

- Kích thước file nạp lên ramdisk không được quá lớn. Nếu RAM của máy tính khoảng 384-512 MB thì nên tạo các file nạp lên RAM đó khoảng 200Mb.
- Download qua mạng với TFTP nhanh hay chậm? Với file khoảng 200 Mb, việc download trong các mạng LAN hiện nay với card mạng, switch 10/100 Mb đều rất nhanh.
- Sau khi nạp lên ramdisk, máy Client sẽ có thể hoạt động độc lập mà không phụ thuộc vào PXE Server. Do hoạt động trên RAM, nên chạy khá nhanh.

Với việc sử dụng TFTPD32 không cần cài đặt, PXE Server có tính portable. Sau khi tạo PXE Server, có thể lưu cả thư mục C:\PXEServer và copy sang bất kỳ máy nào trong mạng để có thể sử dụng.

Với việc sử dụng pxelinux, bạn dễ dàng tạo được các lựa chọn khởi động cho máy client bằng cách chỉnh sửa các file config tương ứng.

No comments: