Post on 28-May-2015
Linux Diskless Command line - 1
Linux Ubuntu Diskless x86x64 ในตระกล linux ไมไดขนกบระบบ Ubuntu อยางเดยวในการท าระบบ Diskless
สามารถท าไดหมด ไมวาจะเปน Linux ClearOS ,Linux CentOS ,Linux Clark connect ,Unix
FreeBSD ขอแคเขาใจ package และตงคาการท างานของระบบใหถกตอง
กระบวนการและโครงสรางแถบไมแตกตางกน
ในรปตวอยางใชงาน hdd เครองละ 1 ลก .. จะท าการ upload img
เขาไปใน hdd บนเครองแม โดยไมตองถอด hdd ทเครองลกมาเปน master
Linux Diskless Command line - 2
ความหมายเนอเรองตางๆ ศกษาเพมเตมไดทวไป
*ศกษาเพมไดท
http://wiki.nakhon.net/wiki/Diskless_Server
http://www.linuxthai.org/
http://ict.in.th/
Linux Diskless Command line - 3
ลกษณะการตอสายแลนบนเครองแม (เฉพาะในคมอ)
อนดบแรกกลง OS แลวเขาใชงานตามปกต ลอกอนยสเซอรทแอด จากนนก าหนดรหสผานให
root ตอดวยการเปลยนสถานะยสเซอรเขาไปเปน root
Linux Diskless Command line - 4
# sudo passwd
[sudo] password for portspro:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
# su
Password:
Added user root.
# cd
*หมายเหต อนดบแรกตองท าใหเครอง Server ออกเนตไดกอน เพอท าการ download package
ในการตดตงมาลงท Server ตวมนเอง
# ifconfig -a
ด device การดแลนทงหมด
Linux Diskless Command line - 5
ในตวอยางจะก าหนดคาดงน
การดแลนใบท 1 ชอ device อปกรณคอ eth0 จะท าเปนการดทรบเนตเขามาแบบ dhcp
การดแลนใบท 2 ชอ device อปกรณคอ eth1 ท าเปนการดแชร disk ใหเครองลก ก าหนดเปน static
# nano /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 10.0.0.254
netmask 255.255.255.0
ท าการแกไขคา แลวบนทกออก
จากนน restart service network ใหม
# /etc/init.d/networking restart
Linux Diskless Command line - 6
# ifconfig
ท าการอพเวลาใหระบบใหตรงกบปจจบน
# /usr/sbin/ntpdate -u pool.ntp.org
ท าการอพเดต package
# sudo apt-get update
Linux Diskless Command line - 7
# sudo apt-get install tftp-hpa tftpd-hpa xinetd
# mkdir /tftpboot
# sudo chown nobody.nogroup /tftpboot
# sudo chmod 777 /tftpboot
# sudo nano /etc/default/tftpd-hpa
จากเดม
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
แกเปน โดยการเพม 2 บรรทดลงไป และก าหนดต าแหนง path ไฟลบตใหเครองลก
# /etc/default/tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /tftpboot"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
# sudo /etc/init.d/tftpd-hpa start
# netstat -a |grep tftp
udp 0 0 *:tftp *:*
Linux Diskless Command line - 8
สรางไฟล tftp ขนมาท างานรวมกบ Service
# nano /etc/xinetd.d/tftp
เพมค าสงเขาไปในตวไฟลทสราง พรอมระบพาธ tftpboot ใหถกตอง
service tftp {
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
disable = no
}
# sudo /etc/init.d/xinetd start
Linux Diskless Command line - 9
undionly.kpxe เปนไฟล gpxe ส าหรบปลอยใหเครองลกมารบไปบตเขาใชงานโอเอสจากเครองแม
ท าการ download file undionly.kpxe ลงมา
แลวท าการ Upload ขนไปเกบท server ในต าแหนง /tftpboot
โหลดไดท
http://www.mediafire.com/?tj30x1ew8jfb4c6
Linux Diskless Command line - 10
DHCP-Server
# sudo apt-get install dhcp3-server
# nano /etc/default/isc-dhcp-server
เพม device การดแลนทจะแชร disk ในตวอยางคอ eth1
# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/isc-dhcp-server by the maintainer scripts
#
# This is a POSIX shell fragment
#
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
Linux Diskless Command line - 11
# echo "" > /etc/dhcp/dhcpd.conf
# nano /etc/dhcp/dhcpd.conf
เพมค าสงเขาไปทงหมด
ddns-update-style interim;
ddns-rev-domainname "in-addr.arpa.";
option domain-name "sysdiskless";
option domain-name-servers 8.8.8.8,8.8.4.4;
option ntp-servers us.pool.ntp.org;
ignore client-updates;
update-static-leases on;
use-host-decl-names on;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
default-lease-time 43200;
max-lease-time 86400;
allow unknown-clients;
option routers 10.0.0.254;
range 10.0.0.100 10.0.0.199;
}
host bootdisk1 {
hardware ethernet 50:e5:49:e9:95:e8;
fixed-address 10.0.0.1;
option host-name com1;
if exists user-class and option user-class = "gPXE" {
filename "";
option root-path "aoe:e0.0";
} else {
filename "undionly.kpxe";
}
}
*หมายเหต
ค าสงทใชใน dhcpd.conf เปนเพยงค าสงเพอทดสอบระบบเทานน ค าสงจงไมมาก
Linux Diskless Command line - 12
ตอไปท าการคนหาทเครอง server ใช domain name ชออะไร
# hostname -d
sysdiskless
ในอยาง domain คอ sysdiskless
# nano +4 /etc/dhcp/dhcpd.conf
# sudo /etc/init.d/isc-dhcp-server start
Linux Diskless Command line - 13
Vblade # sudo apt-get install vblade
# mkdir /var/run/vblade
# /etc/init.d/vblade start
* Starting vblade deaemons vblade
ทดสอบ ท าการทดสอบแบบงายๆ เพอใหรวาเครองแมพรอมจะแชร disk แลว ..
ดวย script การปลอย disk จากเครอง server เอง ดวยโปรแกรม vblade
# cd /root
# nano test.sh
Copy ใสค าสงลงทงหมดเลยครบ ไมตองแกไขอะไรมาก แกอยบรรทดเดยว ตรงบรรทดสดทาย
เพอระบการดแลนทจะแชร disk ตวอยางเปน eth1
vblade 0 0 eth1 /dev/mapper/test1 &
แกตามการดแลนใบทแชร disk
ขนตอนนเปนการทดสอบจาก hdd sda ของเครองแมเทานน !
#!/bin/bash
losetup -r /dev/loop0 /dev/sda
dd if=/dev/zero of=/dev/test1 bs=512 count=0 seek=$(blockdev --getsize /dev/loop0)
losetup /dev/loop1 /dev/test1
echo "0 $(blockdev --getsize /dev/loop0) snapshot /dev/loop0 /dev/loop1 p 64" | dmsetup create test1
vblade 0 0 eth1 /dev/mapper/test1 &
# chmod +x /root/test.sh
Linux Diskless Command line - 14
กอนทดสอบใหดคาเกาท device mapper กอน .. มแค device sda ของเครองแมเทานน
ทดสอบเพอเหนผลตาง
# fdisk -l
จะเหนวาตอนนมแค /dev/sda
ตอไปสงรน script
# bash /root/test.sh
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.8998e-05 s, 0.0 kB/s
pid 1662: e0.0, 40130390 sectors O_RDWR
Linux Diskless Command line - 15
จากนนดวา disk ถกโหลดลงใน device mapper หรอยง
# fdisk -l
จะเหนวามเพมขนจากครงกอน คอ /dev/mapper/test1
แสดงวาเครอง server พรอมแชร disk แลวครบ
Linux Diskless Command line - 16
ทดสอบเครองลก ท าการเปดเครองลกแลวตงคาให boot lan
ผลลพธทเครองลกตองไดรบ ตามรปครบ
เครองลกบตถงหนา boot grup ของ linux เหมอนเครองแม
กแสดงวาทานท าผานและถกตองแลวครบ
ปดเครองลกไดเลยครบ ไปขนตอนตอไปในการ upload img ขน Server
Linux Diskless Command line - 17
Upload Image ในขนตอนนจะ upload image โดยใชโปรแกรม Ghost 32 ขนไปท Server Diskeless
ในตวอยางนจะ ghost hdd ทงลกทอยบนเครองลก อพขนไปท img เครองแมเทานน
*กลบมาทหนาจอเครองแม
# cd /root
ท าการสราง script ในการจองพนท img ใหเครองลก
# nano blockimg.sh
ใสเขาไปทงหมด
#!/bin/bash
#
dd if=/dev/zero of=/mnt/imgos bs=512 count=0 seek=12345678
vblade 0 0 eth1 /mnt/imgos &
#
echo "Create block image os ... [ OK ]";
*ความหมายค าสงในตว script
จากนนท าการสราง block device ส าหรบเกบ img ทพาธ /mnt สวน img ชอ imgos
โดยทความจ 12345678 เทากบ 6 GB กวาๆ และใช aoe ท e0.0
*ตวอยางค าสงตรงบรรทด vblade 0 0 eth1 /mnt/imgos &
ท าการเปลยนตามการดแลนทท าการแชร disk ใหเครองลก
ตอไปกก าหนดสทธ +x ใหไฟล และสงรน
Linux Diskless Command line - 18
# chmod +x /root/blockimg.sh
# bash /root/blockimg.sh
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.6288e-05 s, 0.0 kB/s
Create block image os ... [ OK ]
pid 1616: e0.0, 12345678 sectors O_RDWR
ถาผลลพธทไดออกมาเหมอนในตวอยางกผานครบ
จากนนไปท าขนตอนตอไปทหนาจอเครองลกไดเลยครบ
Linux Diskless Command line - 19
AoE tool ท าการตดตง driver ส าหรบบต aoe ลงทเครองลก
Download ไฟลลงมาตดตงไดเลยครบ http://www.mediafire.com/?jwjgylj57j7iww6
อนดบแรกใหท าการปด Firewall บน Windows กอน ..
จาก On ใหเปลยนเปน Off ซะ
Linux Diskless Command line - 20
เมอโหลดไฟล aoe tool เรยบรอยแลว ท าการตดตงลงไป โดยการไปท
Start -> Setting -> Control Panel -> เลอก Add Hardware ตามรปภาพเลยครบ
Linux Diskless Command line - 21
ท าการ Browse .. เพอน าไฟล aoe.inf
Linux Diskless Command line - 22
Linux Diskless Command line - 23
ตรวจสอบวา driver aoe โหลดเขาไปหหรอยง
ผลลพธตามภาพ จากนน Restart เครองลก 1 ครง
Linux Diskless Command line - 24
การ Mount Disk ดวย
AoE tool
ตรวจดวา IP Address ทไดรบถกตองหรอไม
เปดใชงานค าสงดอส
Linux Diskless Command line - 25
พมพ aoe แลว enter เพอแสดงรายการอาณกวเมนทพรอรายละเอยดการท างาน
พมพ aoe scan เพอแสดงรายการ disk ทถกแชรออกมาจากเครองแม
Linux Diskless Command line - 26
คลกขาวเมาทเพอท าการ Mark ต าแหนงทจะ copy
รายการ disk แสดงออกมา พรอม aoe e0.0 ทเครองแมแจกมาใหใน dhcpd.conf
จากนนกอปป mac address ของเครองลกเอาไว
Linux Diskless Command line - 27
ท าการ mount disk ดวยค าสง
aoe mount <ตามดวย mac addr> <ตามดวย aoe e0.0>
พมพค าสงแสดงรายการโชวทกระท าไปแลว ดวย aoe show
Linux Diskless Command line - 28
กลบไปดท Device Manager -> Disk drivers
จะเหนวาม disk เกดขนมาใหมชอ device คอ AoE Disk
Linux Diskless Command line - 29
จากนนไปท Disk Management เพอ Initiallize Disk ให OS มองเหน
จากนนท าตามรปเลยครบ
คลกเครองหมายถกทหนา Disk 1
Linux Diskless Command line - 30
ไมตองมเครองหมายถก Next ตอไป
ตอไปท าการ Format Disk ทสรางขนมาใหม
Linux Diskless Command line - 31
ตามรปเลยครบ
Linux Diskless Command line - 32
ท าเปน Primary Partition
Linux Diskless Command line - 33
ขนตอนการเลอก Drive letter สวนตวผมชอบสรางท drive Z เพราะมนแตกตางด
File system จะเปนอะไรกได แตแนะน า NTFS สวนตวอยางเครองทดลองไมแรง จงใช FAT32
Linux Diskless Command line - 34
Success !
Linux Diskless Command line - 35
เมอเสรจขนตอนตามรปแลว ตอไปกปรบแตง Registry ให Start ท 0
(ในตวอยางใช winxp จงตองตงคาเหลาน สวน MS ตวอนกศกษาเพมเตมจาก google)
ไปท Device Manager ตอดวยการดแลนทจะท าการ boot disk
แลว Properties เพอด Service ทการดแลนใชงาน
คลกเลอกทแถบ Details ตรงชอง combo box เลอกรายการค าวา Service ดงรป
ตวอยาง Service แลนการดชอ E100B
Linux Diskless Command line - 36
Start -> Run พมพ regedit
HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Services
Linux Diskless Command line - 37
ในตวอยาง Service แลนการดชอ E100B
เลอก Start แลวไปตงคาจาก 0x00000003(3) เปลยนไปเปน 0
Linux Diskless Command line - 38
ใสเลข 0 เขาไป ตามรป
เสรจ ! .. จากนน restart เครองลก 1 ครง เพอเรมคาการปรบแตง registry อกครง
Linux Diskless Command line - 39
Ghost 32 -to- Image
ในขนตอนตวอยางนจะเปนการ ghost แบบ Disk -to- Disk ลงใน Image ทเตรยมไว
*หมายเหต
ในขนตอนการ Ghost น เปดใชงานเฉพาะโปรแกรม Ghost32.exe เทานน
โหลดไดท http://www.mediafire.com/?xwimf6g4xd37jk8
Linux Diskless Command line - 40
Local -> Disk -> To Disk
เลอก Disk ตนฉบบ หรอ ตนทาง
เลอก Disk ปลายทาง
Linux Diskless Command line - 41
ในตวอยางไมเลอกอะไรมาก เพราะ Disk ทดลองพนทไมมาก
ตอบ YES
Linux Diskless Command line - 42
เลอก Volume Snapshot
เพอใหโปรแกรม Ghost ขามโปรแกรม Ghost32.exe ไป .. ในขณะทก าลงท าการ Ghost
*เพมเตม
ในขณะทก าลง Ghost อย มขอความมาแสดงโชว ใหตอบ Yes ผานไป
Linux Diskless Command line - 43
เสรจสนการ Ghost
คลกเลอก Continue แลวออกจากโปรแกรม Ghost32 เพอไปด Disk ทเปลยนแปลงไป
Disk -to- Disk
ปดเครองลกแลวตงคา BIOS บตแลน
Linux Diskless Command line - 44
กอนจะท าการทดสอบ ใหกลบมาแกไขคาเกาทอยใน device mapper ออกเสยกอน
เพราะคาเดมบน shell script ใหแชร disk /dev/sda ของเครองแมอย
ท Terminal บนเครองแม ใหพมพค าสงด device ทท างานอยบน mapper กอน
# dmsetup table
test1: 0 12345678 snapshot 7:0 7:1 P 64
คนหา Process ID ของ /dev/mapper/test1
# lsof /dev/mapper/test1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vblade 1985 root 3u BLK 252,0 0t0 13672 /dev/mapper/../dm-0
pid คอ 1985
ตอไปท าการฆา pid 1985
แลวลบ test1 ทถกโหลดลงใน device mapper จากนนแสดงตาราง device mapper
# kill -9 1985
# dmsetup remove --force /dev/mapper/test1
# dmsetup table
No devices found
Linux Diskless Command line - 45
ขนตอนตอไปท าการลาง loop device ของ test1
# losetup -a
/dev/loop0: [0005]:5960 (/dev/sda)
/dev/loop1: [0005]:13661 (/dev/test1)
ในตวอยางจะท าการลาง loop0 และ loop1 ทเปนคาเกาออก กอนทจะรน shell script ใหมอกครง
เพอไมใหเกดการ Busy เมอมขอมลซ ากน
# losetup --detach /dev/loop0
# losetup --detach /dev/loop1
# rm -rf /dev/loop0
# rm -rf /dev/loop1
# losetup -a
จะเหนวาใน loop device ไมมการใชงานแลว
*หมายเหต
ค าสงการ kill และ remove บน mapper และ loop จะงายขนในขนตอนการตดตงระบบ
Diskless แบบใชงานจรง หลงจากเสรจในเรองของการทดลองอยางงาย
จะใชโคดภาษา C เขามาชวยใชงาน shell script ใหงาย รวดเรว คณภาพ ดขนกวาเดม
Linux Diskless Command line - 46
ตอไปท าการแกไขไฟล script ใหแชร Disk Image ทท าเสรจเรยบรอยแลว
# nano /root/test.sh
ทบรรทดทสองแกเปนต าแหนงของ img
#!/bin/bash
losetup -r /dev/loop0 /mnt/imgos
dd if=/dev/zero of=/dev/test1 bs=512 count=0 seek=$(blockdev --getsize /dev/loop0)
losetup /dev/loop1 /dev/test1
echo "0 $(blockdev --getsize /dev/loop0) snapshot /dev/loop0 /dev/loop1 p 64" | dmsetup create test1
vblade 0 0 eth1 /dev/mapper/test1 &
สงรน shell script block device ส าหรบแชร disk อกครง
# bash /root/test.sh
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.8134e-05 s, 0.0 kB/s
root@portspro:~# pid 2138: e0.0, 12345678 sectors O_RDWR
ตอไปท าการเปดเครองลกทดสอบบตแลนไดเลย
Linux Diskless Command line - 47
บตแลนเสรจเขาวนโดว
ผาน ! ….. จบเรวครบกบการทดลองอยางงาย
*** ตอไปจะเปนการตดตงละใชงานจรง
Linux Diskless Command line - 48
การตดตงและใชงานจรง ทานใดเขาใจหลกการท างานของระบบ Diskless กสามารถขามมาท าในขนตอนนไดเลย
เพราะเรองแรกเปนการหดท าระบบอยางงาย (เหมาะกบมอใหม)
Linux Diskless Command line - 49
โครงการวางระบบในรานเกมสแหงหนง มเครองลกจ านวณ 20 เครอง
- เครองแยกเนต - แยกเกมส
โดยทเครองแยกเนต-แยกเกมส มการดแลน 3 ใบ ,แลนออนบอรด 1 พอรต
1 พอรตบนออนบอรดมหนาทแจกเนตใหเครองลก ไอพ 192.168.254.254
*สวนการดแลน 3 ใบ
ใบท 1 จดท า PPPoE เสนท 1 ส าหรบพอรดเนต 1 - 1023
ใบท 2 จดท า PPPoE เสนท 2 ส าหรบพอรตเกมส 1024 - 65535
ใบท 3 จดท า Chillispot Wifi Hotspot (รายไดเสรมแบบคปอง)
- เครองระบบ Linux Diskless x86x64 (64bit)
โดยทเครองระบบ Linux Diskless มการดแลน 4 ใบ ,แลนออนบอรด 1 พอรต
1 พอรตบนออนบอรดมหนาทแจก dhcp-server ใหเครองลกตอนบตแลน
แลนออนบอรด ไอพ 192.168.254.200
ยง Gateway ไปทเครองแยกเนต-แยกเกมส ไอพ 192.168.254.254
*สวนการดแลน 4 ใบ
ใบท 1 ไอพ 192.168.254.201 --> เฉลยเครองลก 5 เครอง
ใบท 2 ไอพ 192.168.254.202 --> เฉลยเครองลก 5 เครอง
ใบท 3 ไอพ 192.168.254.203 --> เฉลยเครองลก 5 เครอง
ใบท 4 ไอพ 192.168.254.204 --> เฉลยเครองลก 5 เครอง
*สวน Harddisk ของเครอง Diskless นใช 5 ตว (ตามงบ) ตวละ 1 TB
โดยท
HDD(sda) 1 กบ HDD(sdb) 2 น ามาท าเปน Raid0 บน HW BIOS
RAID 0 คอ ระบบ Linux Ubuntu Server 64 bit
สวน
HDD(sdc) 3 ท าเปน Master แชร Disk ใหเครองลก ถอดจากเครองลกมาใสโดยตรง
และ
HDD(sdd) 4 กบ HDD(sde) 5 น ามาท าเปน Raid0 บน Software Linux
RAID 0 คอ COW ส าหรบ Copy on Write บนระบบ Diskless
*** แนะน า
ในตวอยางเครองระบบ Linux Diskless ใชการดแลน 4 ใบ ตามจรงใบเดยวกรองรบ 20 เครอง
ไดอยแลว เนองจากการดแลนเสรม 1000Mbits ราคากไมแพง Slot PCI กเหลอวางเยอะ
ผมจงเพมความเรวใหระบบท างานไดดขนกวาเดม โดยการเสรมเสนทางจราจรใหระบบ
Diskless เฉลยเครองลกตอใบดกวาเยอะครบ
Linux Diskless Command line - 50
แผนผงตวอยาง
Linux Diskless Command line - 51
ทานใดทมาถงขนตอนนกคงเขาใจระบบ Linux Diskless พอสมควร
ในสวนนจะไปแบบเรวนดหนงครบ
อนดบแรกกลง OS แลวเขาใชงานตามปกต ลอกอนยสเซอรทแอด จากนนก าหนดรหสผานให
root ตอดวยการเปลยนสถานะยสเซอรเขาไปเปน root
login as: portspro
portspro@192.168.254.200's password:
Added user portspro.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic x86_64)
* Documentation: https://help.ubuntu.com/
# sudo passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
# su
Password:
Added user root.
# cd
Linux Diskless Command line - 52
สราง Raid Software Linux ท าการสราง raid software ระหวาง sdd กบ sde ส าหรบ /cow
*ขนตอนนถาไมไดท า Raid กขามไปขนตอนการตดตง Package ไดเลยครบ
# mkdir /cow
# fdisk /dev/sdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xfbcf5ebb.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-1953525167, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1953525167, default 1953525167):
Using default value 1953525167
Command (m for help): p
Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
81 heads, 63 sectors/track, 382818 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3539557b
Device Boot Start End Blocks Id System
/dev/sdd1 2048 1953525167 976761560 83 Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): da
Changed system type of partition 1 to da (Non-FS data)
Linux Diskless Command line - 53
Command (m for help): p
Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
81 heads, 63 sectors/track, 382818 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3539557b
Device Boot Start End Blocks Id System
/dev/sdd1 2048 1953525167 976761560 da Non-FS data
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk /dev/sde
จากนนกท าเหมอนกน
ส าหรบการสราง RAID 0 จากพารทชนบนฮารดดสก 2 ลก
เชน จาก /dev/sdd1 และ /dev/sde1 สามารถใชค าสงไดดงน
# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1
The program 'mdadm' is currently not installed. You can install it by typing:
apt-get install mdadm
# apt-get install mdadm
# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1
mdadm: /dev/sdd1 appears to contain an ext2fs file system
size=976761560K mtime=Thu Jan 1 07:00:00 1970
mdadm: /dev/sde1 appears to be part of a raid array:
level=raid0 devices=2 ctime=Mon Jan 7 05:33:05 2013
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
บนทกคาของ RAID
ขนตอนตอไป ใหบนทกคาของ RAID ลงไฟลก าหนดคา
# mdadm --detail --scan >> /etc/mdadm.conf
Linux Diskless Command line - 54
ตรวจสอบสถานะ RAID
เมอสราง RAID แลว การตรวจสอบสถานะของ RAID สามารถท าไดหลายวธ
ตรวจสอบโดยใชค าสง mdadm ไดดงน
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Mar 6 08:28:27 2013
Raid Level : raid0
Array Size : 1953518592 (1863.02 GiB 2000.40 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Wed Mar 6 08:28:27 2013
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Name : sysdisk:0 (local to host sysdisk)
UUID : 3773f98a:a6a69ef0:a0284fb0:f67b2873
Events : 0
Number Major Minor RaidDevice State
0 8 49 0 active sync /dev/sdd1
1 8 65 1 active sync /dev/sde1
# cat /proc/mdstat
Linux Diskless Command line - 55
ฟอรแมต Disk ทเปน Raid Device
# mke2fs -t ext4 -L cow_raid0md0 /dev/md0
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=cow_raid0md0
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
122101760 inodes, 488379648 blocks
24418982 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
โดยท
-t ext4 คอใหใช filesystem แบบ ext4
-L image_partition คอใหตงชอ filesystem วา image_partition
/dev/md0 คอชอ device ของ RAID
เพอลดขนาดของเนอทสงวนจากเดม 5% เปน 10 MB
# tune2fs -r 20480 /dev/md0
tune2fs 1.42.5 (29-Jul-2012)
Setting reserved blocks count to 20480
Linux Diskless Command line - 56
# fdisk -l /dev/md0
Disk /dev/md0: 2000.4 GB, 2000403038208 bytes
2 heads, 4 sectors/track, 488379648 cylinders, total 3907037184 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000
Disk /dev/md0 doesn't contain a valid partition table
# mkdir /cow
# mount /dev/md0 /cow
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/isw_dhajaggiic_rid0md0p1 1889916616 1479840 1792434588 1% /
udev 16427288 4 16427284 1% /dev
tmpfs 6574632 1596 6573036 1% /run
none 5120 0 5120 0% /run/lock
none 16436576 0 16436576 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/md0 1922864944 200028 1922582996 1% /cow
ตรวจสอบหา UUID ของ HDD ทได เพราะบางทระบบกใหใสหมายเลข UUID ลงไป
# blkid
/dev/sda: TYPE="isw_raid_member"
/dev/sdb: TYPE="isw_raid_member"
/dev/sdc1: LABEL="Windows" UUID="9644EAB044EA91F3" TYPE="ntfs"
/dev/sdc5: LABEL="GamesZone" UUID="D818619218617104" TYPE="ntfs"
/dev/sdd1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="77d43604-9513-ea77-314d-
b80b9bb291f2" LABEL="sysdisk:0" TYPE="linux_raid_member"
/dev/sde1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="e28d8c4d-e604-025e-d312-
ace626ede28d" LABEL="sysdisk:0" TYPE="linux_raid_member"
/dev/mapper/isw_dhajaggiic_rid0md0p1: UUID="683cef23-aff9-4c19-828c-fc5ccfa027ab" TYPE="ext4"
/dev/mapper/isw_dhajaggiic_rid0md0p5: UUID="ac1dad30-ac7b-410f-81bf-3d622ca2d67f" TYPE="swap"
/dev/md0: LABEL="cow_raid0md0" UUID="ac1820a6-b250-468f-b0d7-4f122717f321" TYPE="ext4"
Linux Diskless Command line - 57
# nano /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/isw_dhajaggiic_rid0md0p1 / ext4 errors=remount-ro 0 1
/dev/mapper/isw_dhajaggiic_rid0md0p5 none swap sw 0 0
/dev/md0 /cow ext4 defaults 0 2
# shutdown -r now
*** หมายเหต
เมอ reboot เครองเสรจระบบอาจจะสราง Device ใหม
จะท าให Raid ททานไดสรางเอาไว ท าการตรวจสอบ
# ls -l /dev/md
lrwxrwxrwx 1 root root 8 Mar 6 08:50 sysdisk:0 -> ../md127
แสดงวา Dev md เปลยนเปน md127 (ระบบจะเปลยนแคครงเดยว จากนนกถาวร)
ท าการตรวจสอบ UUID ใหม และ mount ใน fstab ใหม
# blkid
/dev/sda: TYPE="isw_raid_member"
/dev/sdb: TYPE="isw_raid_member"
/dev/sdc1: LABEL="Windows" UUID="9644EAB044EA91F3" TYPE="ntfs"
/dev/sdc5: LABEL="GamesZone" UUID="D818619218617104" TYPE="ntfs"
/dev/sdd1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="77d43604-9513-ea77-314d-
b80b9bb291f2" LABEL="sysdisk:0" TYPE="linux_raid_member"
/dev/sde1: UUID="3773f98a-a6a6-9ef0-a028-4fb0f67b2873" UUID_SUB="e28d8c4d-e604-025e-d312-
ace626ede28d" LABEL="sysdisk:0" TYPE="linux_raid_member"
/dev/md127: LABEL="cow_raid0md0" UUID="ac1820a6-b250-468f-b0d7-4f122717f321" TYPE="ext4"
/dev/mapper/isw_dhajaggiic_rid0md0p1: UUID="683cef23-aff9-4c19-828c-fc5ccfa027ab" TYPE="ext4"
/dev/mapper/isw_dhajaggiic_rid0md0p5: UUID="ac1dad30-ac7b-410f-81bf-3d622ca2d67f" TYPE="swap"
Linux Diskless Command line - 58
# nano /etc/fstab
เปลยนคาเขาไปใหม
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/isw_dhajaggiic_rid0md0p1 / ext4 errors=remount-ro 0 1
/dev/mapper/isw_dhajaggiic_rid0md0p5 none swap sw 0 0
/dev/md127 /cow ext4 defaults 0 2
รสตารดเครองใหมอกรอบ
# shutdown -r now
บตเสรจกท าการตรวจสอบการเมารทใหม
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/isw_dhajaggiic_rid0md0p1 1889916616 1480924 1792433504 1% /
udev 16427084 4 16427080 1% /dev
tmpfs 6574632 660 6573972 1% /run
none 5120 0 5120 0% /run/lock
none 16436576 0 16436576 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/md127 1922864944 200028 1922582996 1% /cow
# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 236 Mar 6 08:56 control
brw-rw---- 1 root disk 252, 1 Mar 6 2013 isw_dhajaggiic_rid0md0
lrwxrwxrwx 1 root root 7 Mar 6 08:56 isw_dhajaggiic_rid0md0p1 -> ../dm-0
lrwxrwxrwx 1 root root 7 Mar 6 08:56 isw_dhajaggiic_rid0md0p2 -> ../dm-2
lrwxrwxrwx 1 root root 7 Mar 6 08:56 isw_dhajaggiic_rid0md0p5 -> ../dm-3
***จบเรองการ Mount Disk
Linux Diskless Command line - 59
*หมายเหต อนดบแรกตองท าใหเครอง Server ออกเนตไดกอน เพอท าการ download package
ในการตดตงมาลงท Server ตวมนเอง
Linux Diskless Command line - 60
# ifconfig -a
ด device การดแลนทงหมด
เพมเตมเรองชอ device บางทานอาจจะไดชอ eth บางทานกได p?p1
ทานไดชอ device ไหนกใชงาน device นนนะครบ ไมตองตามตวอยาง เพราะตวอยางไดชอ p?p1 ครบ
(ตวอยางใชงาน Ubuntu 12.04 Server 64 bit)
ในตวอยางจะก าหนดคาดงน
แลนออนบอรด ชอ device อปกรณคอ p6p1
ท าเปนพอรดแจก dhcp-server ใหเครองลก ก าหนดเปน static ไอพ 192.168.254.200
การดแลนใบท 1 ชอ device อปกรณคอ p1p2
ท าเปนการดแชร disk ใหเครองลก ก าหนดเปน static ไอพ 192.168.254.201
การดแลนใบท 2 ชอ device อปกรณคอ p2p1
ท าเปนการดแชร disk ใหเครองลก ก าหนดเปน static ไอพ 192.168.254.202
การดแลนใบท 3 ชอ device อปกรณคอ p3p1
ท าเปนการดแชร disk ใหเครองลก ก าหนดเปน static ไอพ 192.168.254.203
การดแลนใบท 4 ชอ device อปกรณคอ p5p1
ท าเปนการดแชร disk ใหเครองลก ก าหนดเปน static ไอพ 192.168.254.204
Linux Diskless Command line - 61
# nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto p6p1
iface p6p1 inet static
address 192.168.254.200
netmask 255.255.255.0
network 192.168.254.0
broadcast 192.168.254.255
gateway 192.168.254.254
dns-nameservers 192.168.254.254
dns-search portspro.diskless
auto p1p1
iface p1p1 inet static
address 192.168.254.201
netmask 255.255.255.0
auto p2p1
iface p2p1 inet static
address 192.168.254.202
netmask 255.255.255.0
auto p3p1
iface p3p1 inet static
address 192.168.254.203
netmask 255.255.255.0
auto p5p1
iface p5p1 inet static
address 192.168.254.204
netmask 255.255.255.0
ท าการแกไขคา แลวบนทกออก
*เนองจากครงแรกตองใชงานอนเตอรเนตในการตดตง Package
จงให p6p1 รบเนตเขามากอนโดยวงเขา Gateway เคองเนตเกมส 192.168.254.254
Linux Diskless Command line - 62
จากนน restart service network ใหม
# /etc/init.d/networking restart
Linux Diskless Command line - 63
# ifconfig
Linux Diskless Command line - 64
ท าการอพเวลาใหระบบใหตรงกบปจจบน
# /usr/sbin/ntpdate -u pool.ntp.org
ท าการอพเดต package
# sudo apt-get update
# sudo apt-get install tftp-hpa tftpd-hpa xinetd
# mkdir /tftpboot
# sudo chown nobody.nogroup /tftpboot
# sudo chmod 777 /tftpboot
# sudo nano /etc/default/tftpd-hpa
จากเดม
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
แกเปน โดยการเพม 2 บรรทดลงไป และก าหนดต าแหนง path ไฟลบตใหเครองลก
# /etc/default/tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /tftpboot"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
# sudo /etc/init.d/tftpd-hpa start
Linux Diskless Command line - 65
# netstat -a |grep tftp
udp 0 0 *:tftp *:*
สรางไฟล tftp ขนมาท างานรวมกบ Service
# nano /etc/xinetd.d/tftp
เพมค าสงเขาไปในตวไฟลทสราง พรอมระบพาธ tftpboot ใหถกตอง
service tftp {
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
disable = no
}
# sudo /etc/init.d/xinetd start
สรางพนทส าหรบ COW
# mkdir /cow
Vblade # sudo apt-get install vblade
# mkdir /var/run/vblade
# /etc/init.d/vblade start
* Starting vblade deaemons vblade
Linux Diskless Command line - 66
undionly.kpxe เปนไฟล gpxe ส าหรบปลอยใหเครองลกมารบไปบตเขาใชงานโอเอสจากเครองแม
ท าการ download file undionly.kpxe ลงมา
แลวท าการ Upload ขนไปเกบท server ในต าแหนง /tftpboot
โหลดไดท
http://www.mediafire.com/?tj30x1ew8jfb4c6
กอนจะไปขนตอน DHCP-Server ใหสวนทเพมเขามาใชงานไดกอน ดวยโคดภาษา C
Linux Diskless Command line - 67
สรางโคดภาษา C
ในการใชงาน script ใหงายขน
# mkdir /root/tmp
สามารถโหลดเปนตวไฟล แลวท าการ Upload ขนไปท Server ในต าแหนง /root/tmp/
http://www.upload-thai.com/download.php?id=118c57c1aa52375fe06445b7a20b2da4
ส ารอง
http://www.mediafire.com/?hzvucfxqanoxyev
# cd /root/tmp/
# nano execdiskless.c
ในตวโคดจะท าการสราง Device ตามโครงสรางของ COW
Linux Diskless Command line - 68
ท าการ compile source code ภาษาซ ดวย gcc # sudo apt-get install gcc
# gcc /root/tmp/execdiskless.c -o /root/tmp/execdiskless
ทดสอบโครตภาษา C วาท างานถกตองหรอไม
# /root/tmp/execdiskless 20 load
Development
ท าไฟลใหใชงานในระบบไดโดยไมตองมพาธ
# chmod +x /root/tmp/execdiskless
# cp /root/tmp/execdiskless /sbin/
จากนนลองพมพค าสง execdiskless แบบไมตองมพาธ
# execdiskless 20 load
Linux Diskless Command line - 69
DHCP-Server
# sudo apt-get install dhcp3-server
# nano /etc/default/isc-dhcp-server
เพม device การดแลนทจะแชร disk ในตวอยางคอ p6p1 พรอมกบเอาเครองหมาย # ออก
# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts
#
# This is a POSIX shell fragment
#
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPD_CONF=/etc/dhcp/dhcpd.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
DHCPD_PID=/var/run/dhcpd.pid
# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="p6p1"
Linux Diskless Command line - 70
ปลดลอกชดเกราะ apparmor
profile dhcpd ใหสามารถใชงานค าสง execute ทอยใน dhcpd.conf ได เพอใหค าสงนรนไดตอนทท าการ
แจก DHCP-Server ใหเครองลกบตแลน
ในตวโคตจะเปนการ kill mapper และ kill loop รวมถงลบไฟลทเปนขยะ อตโนมต
หลกๆกคอ การท าใหเครองลกคนคาทกครงเมอมการเปดปดเครอง
อนดบแรกดวากลมของ DHCP-Server ใชชอกลมวาอะไร
# cat /etc/group
หาแทบไมยากเลย เจอทนทบรรทดสดทาย ใชชอกลมวา dhcpd
Linux Diskless Command line - 71
# /etc/init.d/apparmor status
# cat /sys/kernel/security/apparmor/profiles
# sudo ln -s /etc/apparmor.d/usr.sbin.dhcpd /etc/apparmor.d/disable/usr.sbin.dhcpd
# sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.dhcpd
# sudo aa-status
# /etc/init.d/apparmor restart
ยกเลก passwd ใน sudo # nano /etc/sudoers
น าค าสง
dhcpd ALL=NOPASSWD: ALL
ไปวางททายไฟลเลยครบ
# /etc/init.d/sudo restart
Linux Diskless Command line - 72
ความหมาย
อารกวเมนท execdiskless
ความหมายกตายตวเลยครบ
ตวอยาง
ภายในจ านวณคอมทงหมด 20 เครอง ตองการใชงานเครองท 3 ชอน าหนา PC คอ com
ต าแหนงบต disk คอ /dev/sdb เปน user ธรรมดา
exediskless 20 com 3 /dev/sdb eth1 normal
ถาตอไปเปนเครองท 4 ,5 ,6 ,7 ,8 ,9 ,10
exediskless 20 com 4 /dev/sdb eth1 normal
exediskless 20 com 5 /dev/sdb eth1 normal
exediskless 20 com 6 /dev/sdb eth1 normal
exediskless 20 com 7 /dev/sdb eth1 normal
exediskless 20 com 8 /dev/sdb eth1 normal
exediskless 20 com 9 /dev/sdb eth1 normal
exediskless 20 com 10 /dev/sdb eth1 normal
ตอไปเครองท 11-13 ตองการบตการดแลนทสอง คอ eth2
exediskless 20 com 11 /dev/sdb eth2 normal
exediskless 20 com 12 /dev/sdb eth2 normal
exediskless 20 com 13 /dev/sdb eth2 normal
จากนนไปตอท DHCP-Server
Linux Diskless Command line - 73
# echo "" > /etc/dhcp/dhcpd.conf
# nano /etc/dhcp/dhcpd.conf
ในตวอยาง host ของเครองลกทน ามาเปนตวอยางแค 3 เครอง (copy มาทงหมดคงยาว)
สวนทานใดมเครอง 4 5 6 7 n n n n .. กท าการเพมเองไดเลยครบ
เพมค าสงเขาไปทงหมด
ddns-update-style interim;
#ddns-update-style none;
ddns-rev-domainname "in-addr.arpa.";
option domain-name "portspro.diskless";
option domain-name-servers 8.8.8.8,8.8.4.4;
option ntp-servers us.pool.ntp.org;
# gPXE-specific encapsulated options
option space gpxe;
option gpxe-encap-opts code 175 = encapsulate gpxe;
option gpxe.priority code 1 = signed integer 8;
option gpxe.keep-san code 8 = unsigned integer 8;
option gpxe.no-pxedhcp code 176 = unsigned integer 8;
option gpxe.bus-id code 177 = string;
option gpxe.bios-drive code 189 = unsigned integer 8;
option gpxe.username code 190 = string;
option gpxe.password code 191 = string;
option gpxe.reverse-username code 192 = string;
option gpxe.reverse-password code 193 = string;
option gpxe.version code 235 = string;
ignore client-updates;
update-static-leases on;
use-host-decl-names on;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.254.0 netmask 255.255.255.0 {
default-lease-time 43200;
max-lease-time 86400;
allow unknown-clients;
option routers 192.168.254.254;
range 192.168.254.100 192.168.254.199;
}
Linux Diskless Command line - 74
host bootdisk1 {
hardware ethernet 50:e5:49:e9:95:e8;
fixed-address 192.168.254.1;
option host-name com1;
if exists user-class and option user-class = "gPXE" {
execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal");
filename "";
option root-path "aoe:e0.1";
} else {
filename "undionly.kpxe";
}
}
host bootdisk2 {
hardware ethernet 50:e5:49:e8:ee:46;
fixed-address 192.168.254.2;
option host-name com2;
if exists user-class and option user-class = "gPXE" {
execute("sudo","execdiskless","20","com","2","/dev/sdc","p5p1","normal");
filename "";
option root-path "aoe:e0.2";
} else {
filename "undionly.kpxe";
}
}
host bootdisk3 {
hardware ethernet 50:e5:49:e9:14:a0;
fixed-address 192.168.254.3;
option host-name com3;
if exists user-class and option user-class = "gPXE" {
execute("sudo","execdiskless","20","com","3","/dev/sdc","p5p1","normal");
filename "";
option root-path "aoe:e0.3";
} else {
filename "undionly.kpxe";
}
}
*หมายเหต
การใชงานในโคด dhcpd.conf ตองมการใชสทธ root กอน
จงจะสามารถเขาถงไฟลและสงรนได .. ดวย sudo
Linux Diskless Command line - 75
ตอไปท าการคนหาทเครอง server ใช domain name ชออะไร
# hostname -d
portspro.diskless
ในอยาง domain คอ portspro.diskless
# nano +5 /etc/dhcp/dhcpd.conf
# sudo /etc/init.d/isc-dhcp-server start
Linux Diskless Command line - 76
ด Process id อยางงายดวย HTop # sudo apt-get install htop
# htop
จบขนตอนการตดตงทงหมด
สงเปดเครองลกเพอดผลงานไดเลยครบ
หนาจอเครองลกหมายเลข 17 สวน AoE Disk = e0.17
Linux Diskless Command line - 77
***เมอตดตงเสรจเรยบรอยทกอยางกไมไดใชงาน internet
อยาลมไปปดการเชอมตอเนต ดงน
# nano /etc/network/interfaces
น าเครองหมาย # ไปแทรกดานหนาค าสงแตละบรรทด เพอใหกลายเปนคอมเมนท
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto p6p1
iface p6p1 inet static
address 192.168.254.200
netmask 255.255.255.0
#network 192.168.254.0
#broadcast 192.168.254.255
#gateway 192.168.254.254
#dns-nameservers 192.168.254.254
#dns-search portspro.diskless
auto p1p1
iface p1p1 inet static
address 192.168.254.201
netmask 255.255.255.0
auto p2p1
iface p2p1 inet static
address 192.168.254.202
netmask 255.255.255.0
auto p3p1
iface p3p1 inet static
address 192.168.254.203
netmask 255.255.255.0
auto p5p1
iface p5p1 inet static
address 192.168.254.204
netmask 255.255.255.0
Linux Diskless Command line - 78
# /etc/init.d/networking restart
เมอไมไดใชงานอนเตอรเนตกปด Bind9 ไปไดเลย
# /etc/init.d/bind9 stop
# nano /etc/rc.local
เพมค าสงเขาไปเมอบตเขาระบบทกครงจะปด bind9 ทนท
#!/bin/sh -e
#
/etc/init.d/bind9 stop
exit 0
# shutdown -r now
Linux Diskless Command line - 79
SUPER USER กบ AoE e0.0 ในตวโคดบงครบใหท า super user ใน aoe 0 0 เทานน เพอปองกนการหลงลม
ในขณะทเลกเปน super user แตลมไปแกไขค าสงใหเปน user normal
จงออกแบบโคดไมใหระบบไปกระท ากบ hdd img โดยตรง .. กรณลมจรงๆ ปองกนได
ขนตอนไมยาก ท าการแกไขทไฟล dhcpd.conf
ยกตวอยางเชน โคดในไฟล dhcpd.conf
ตวอยางแรกเครองหมายเลข 1 เปน User normal ใชงานคนคาธรรมดา
host bootdisk1 {
hardware ethernet 50:e5:49:e9:95:e8;
fixed-address 192.168.254.1;
option host-name com1;
if exists user-class and option user-class = "gPXE" {
execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal");
filename "";
option root-path "aoe:e0.1";
} else {
filename "undionly.kpxe";
}
}
เมอตองเปน Super User กเปลยนแค normal เปน super
และเปน aoe:e0.1 ไปเปน aoe:e0.0 แคนน
ตวอยาง Super User
host bootdisk1 {
hardware ethernet 50:e5:49:e9:95:e8;
fixed-address 192.168.254.1;
option host-name com1;
if exists user-class and option user-class = "gPXE" {
execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","super");
filename "";
option root-path "aoe:e0.0";
} else {
filename "undionly.kpxe";
}
}
Linux Diskless Command line - 80
จากนนท าการ reload service dhcpd ดวยสง force-reload เทานน ถา restart เฉยๆ
อาจจะท าใหเครองอนทก าลงเลนอยกระตกนาน หรออาจจะคางไปเลย
ตองบอกใหคนเลน reboot เครองนนใหม เสยชอรานแนๆครบ
ตวอยางค าสง
# /etc/init.d/isc-dhcp-server force-reload
Linux Diskless Command line - 81
ท าการเปดเครองลกแลวบตแลน เพอดสถานะ super user บน aoe e0.0
ในรป นบจากบรรทดลางขนบน บรรทดท 3 จะเหนวาบรรทดนแสดงค าวา
Booting from root path “aoe:e0.0” หมายถงสถานะ super
เครองลกบตเขา Windows พรอมใชงานเรยบรอยแลว เมอเปน Super User แลว
หามลมเดดขาด ! ตองเขาไปดใน Manage วา AoE Disk ทใชงานอยคอ e0.0 หรอไม
Linux Diskless Command line - 82
AoE Disk Properties
ตรง Location ตองเทากบ AoE e0.0 ดงรป
Linux Diskless Command line - 83
เมอตองการใหเครองหมายเลข 1 เปน User normal ใชงานคนคาธรรมดาแบบเดม
กท าการแกไขไฟล dhcpd.conf ใส normal และ aoe:e0.1 กลบเปนเหมอนเดม
ตวอยางการกลบมาเปน User normal ธรรมดา
host bootdisk1 {
hardware ethernet 50:e5:49:e9:95:e8;
fixed-address 192.168.254.1;
option host-name com1;
if exists user-class and option user-class = "gPXE" {
execute("sudo","execdiskless","20","com","1","/dev/sdc","p5p1","normal");
filename "";
option root-path "aoe:e0.1";
} else {
filename "undionly.kpxe";
}
}
จากนนก dhcpd force-reload อกครง
# /etc/init.d/isc-dhcp-server force-reload
เมอกลบมาใชงานเปน normal เขาไปด Manage อกครง
AoE Disk กจะเปน AoE e0.17
Linux Diskless Command line - 84
Block Device ส าหรบท า Image โดยการใหเครองลก Upload OS ขนมา Server ดวยโปรแกรม Ghost 32
*แนะน า
ขนตอนนตองท าความเขาใจพอสมควร ไฟลอาจเกดการ NULL หรอ วางเปลา ได
ทงๆทขอมลกมอยแลว ..
สวนนแนะน านกพฒนาระบบ เขยนโปรแกรมจดการปองกนเพมขนเองเลยครบ
# mkdir /root/tmp
Download แบบไฟลโคด
แลว upload ไปไวท /root/tmp/
http://www.mediafire.com/?p3m2cskl9jdt2mb
ส ารอง
http://www.upload-thai.com/download.php?id=29894712204db04f607c0fc2b3b1798a
จากนน compile code และใหสทธ execute
# gcc /root/tmp/makeimg.c -o /root/tmp/makeimg
# chmod +x /root/tmp/makeimg
# cp /root/tmp/makeimg /sbin/
ทดสอบ
ตองการจองพนทขนาด 12 GB ส าหรบท า Image ไฟลจากเครองลก เกบไฟลไวท /mnt/
มชอไฟลวา imgxp และใชงานหมายเลข AoE Disk ท 231 แชร disk ดวย eth1
# makeimg 12 imgxp /mnt/ 231 eth1
Linux Diskless Command line - 85
*หมายเหต
ในการใสต าแหนง path ทเกบไฟลอมเมจ ตองมเคองหมาย / ปดพาธนนทกครง
เชน ตวอยางพาธ /mnt/img/img_xp
ตองระบพาธ /mnt/img/
เมอเครองแมปลอย Image ไปทาง AoE หมายเลข 231 เรยบรอยแลว
ทางฝงเครองลกตองไปรบ Disk ทาง AoE หมายเลข 231 เชนกน
Linux Diskless Command line - 86
ในขนตอนนเครองลกตองอยในวงแลนของเครองแมทแจก dhcp-server
ตวอยาง และเทคนดโดยไมตองไปแกไขไฟล dhcpd.conf
ผมใชงานเครองลกทเปนระบบ Diskless อย โดยใชงาน aoe หมายเลข e0.17 จะไปท าการ
mount disk จากเครองแมทปลอยหลายเลข Image ทาง aoe หมายเลข 222
ภาพจากเครองลกกอนทจะท าการ mount disk อก aoe disk เขามาอก 1 disk
สราง disk ขนาด 99gb ชอไฟล imgxp เกบไวทพาธ /mnt/img/ ปลอยออกหมายเลข aoe ท 222 และแชร disk ออกทางแลนการด p3p1
ดไฟล Image ทสรางชอ imgxp
Linux Diskless Command line - 87
กลบมาตอทเครองลกเพอ aoe scan
ในรปตวอยางจะเหนวาใชค าสง aoe scan แลวไมม Disk หมายเลข 222 ออกมาแสดงโชวเลย
ไมตองกงวลเมอทานมนใจแลววาไดสง Image หมายเลข 222 มาทเครองลกแลว และเครองลกกใชงาน dhcp-server จากเครองแมแลว
ท าการ mount disk หมายเลข 222 โดยตรงเลยครบ
ในรปเปนการ mount aoe disk โดยตรง
ท Computer Management ในชองดานขวามอ –Disk drives กจะม AoE Disk ขนมาโชวอกตว คอหมายเลข AoE e0.222
Linux Diskless Command line - 88
ท Computer Management ดานซายมอเลอก Disk Management กจะม Disk ตวใหมเกดขนมาใหสราง ดงรป
ท าการสราง Partition
Linux Diskless Command line - 89
ของใหมกจะมาดงรป
เมอท าเสรจทกครงอยาลมเปลยนชอ Image เปนชออนนะครบ เพอความปลอดภาพของขอมลทเสยเวลา Upload ดวย Ghost32
และท าการฆา PID ของ Image ทสรางดวย
จากนนมาทเครองแมเพอใชงาน execdiskless ส าหรบ Image ของใหมทท ามาสดๆรอนๆ
โดยการแกไขไฟล dhcpd.conf เพอบต Disk แบบ Image
หมายเลข aoe กใชงานตามล าดบหมายเลขเครองคอมเลยนะครบ โปรแกรม execdiskless จะจดการใหเองอตโนมต
จากนน reload
# /etc/init.d/isc-dhcp-server force-reload
Linux Diskless Command line - 90
ทกครงทท าการ Upload Image เสรจ อยาลม kill pid ทกครง
เพอลดภาวะโปรเซสท างานโดยเปลาประโยชน kill ตามดวยชอ และพาธ
# makeimg kill imgxp /mnt/
*บงคบ เมอท าไฟล Image และเครองลก Upload OS มาเรยบรอยแลว
ท าการเปลยนชอ Img ทพาธนนใหม เพอปองกนการสรางไฟลซ า รวมถงหมายเลข
AoE ซ ากน ซงจะท าใหขอมลทท ามาเกด NULL ขนมาได
# mv /mnt/imgxp /mnt/imgxp12gb
*กรณทไมตองการใชงานไฟล Image แบบถาวร หรออาจจะตองการท า Image ใหม
ตองการลบตวเกาทง กใชค าสง rm -rf <ตามดวยพาธและชอไฟล> แบบธรรมดาทวไป
# rm -rf /mnt/imgxp12gb
*ตองการด PID ของ Vblade ทยงตกคางอยใน /mnt/
# lsof /mnt/*
# ps aux|grep vblade
***สวนขนตอนการ upload image จากเครองลกขนเครองแมนนจะอยในขนตอน
การทดลองอยางงายในหนาชวงแรกๆอยแลว
Linux Diskless Command line - 91
ลดภาระการท างาน CPU และ RAM ขนตอนนจะเพมพนทใหหนวยความจ ามพนทท างานไดมากขน ในขณะท PID ของ vblade ท างานโดยเปลาประโยชน
ทงๆทเครองลกเครองนนปดไปแลว
ตวอยางการด pid อยางละเอยดดวย htop
# htop
แลวกดแปน F3 แลวพมพชอ pid ทจะคนหา คอ vblade แลว F3 ไปเรอยๆจนกวาจะจบลป
จะท าการสราง shell script linux เพอท าการอานคา IP address จาก text file ชอ pingip.txt โดยพาธอยท /root/tmp/
# touch /root/tmp/pingip.txt
จากนนท าการใสหมายเลขไอพของเครองลกลงไปตามล าดบ
ตวอยาง
มคอมสงสด 20 เครอง โดยทไอพวงแลนของเครองลก ทเครองแมแจกแบบ fix ip ให
ระหวาง 192.168.254.1 – 192.168.254.20 จดสดทายใชงานตามหมายเลขเครองลก
Linux Diskless Command line - 92
# nano /root/tmp/pingip.txt
ใสหมายเลขไอพเครองตามล าดบเครองลงไป
หามนบผดเดดขาด ตองตามล าดบ 1 ,2 ,3 ,4 ,5 ,n n n ไมงน script จะไป kill pid ผดครบ
192.168.254.1
192.168.254.2
192.168.254.3
192.168.254.4
192.168.254.5
192.168.254.6
192.168.254.7
192.168.254.8
192.168.254.9
192.168.254.10
192.168.254.11
192.168.254.12
192.168.254.13
192.168.254.14
192.168.254.15
192.168.254.16
192.168.254.17
192.168.254.18
192.168.254.19
192.168.254.20
Linux Diskless Command line - 93
สราง shell script บน linux เพอไปอานคาไอพเขามา แลวตรวจสอบวาเครองลกเครองไหนปดใชงานไปแลว
เครองไหนปดกท าการ kill pid vblade และ loop ทงไปเลย
# nano /root/tmp/pingipdown.sh Copy ค าสง script ลงไปหมดเลยครบ
#!/bin/bash
NAME="com"
NUMREC=0
SOURCE=0
DEST=0
# no ping request
COUNT=10
# add ip / hostname separated by white space
for myHost in cat `cat /root/tmp/pingip.txt`
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ "$count" = 0 ]; then
#100% failed
kill -9 `lsof /dev/mapper/$NAME$NUMREC`
dmsetup remove --force /dev/mapper/$NAME$NUMREC
losetup --detach /dev/loop$SOURCE
losetup --detach /dev/loop$DEST
rm -rf /dev/loop$SOURCE
rm -rf /dev/loop$DEST
rm -rf /cow/$NAME$NUMREC
echo "ping ip $myHost <OFF> [$NAME$NUMREC] !"
echo "DEL Loop $SOURCE <-> $DEST"
else echo "ping ip $myHost <ON> [$NAME$NUMREC]"
fi
let NUMREC=NUMREC+1
let DEST=NUMREC-1
let SOURCE=NUMREC+DEST
let DEST=SOURCE+1
done
# show device dmsetup and losetup
dmsetup table
losetup -a
Linux Diskless Command line - 94
ท าการแกไขบรรทดท 3 เพอเปลยนชอเครองคอมททานใชงานตาม device mapper
ในตวอยางใชชอ com
# nano +3 /root/tmp/pingipdown.sh แกใหเปนชอคอมทใชงาน
NAME="com"
# nano +9 /root/tmp/pingipdown.sh บรรทดนระยะเวลาในการ ping แตละ ip หรอจ านวณ count request ในการตรวจสอบ ถาใชงานคา 1 ระบบกจะ ping เรวตอครง
COUNT=10
ทดสอบรน
# chmod +x /root/tmp/pingipdown.sh
# bash /root/tmp/pingipdown.sh
Linux Diskless Command line - 95
ตงเวลารน script เพอตรวจสอบไอพทปดเครองไปทกๆ 5 นาท บน crontab ใชงานในสทธ root
# nano /etc/crontab เพมค าสงเขาไปททายไฟล
*/5 * * * * root /root/tmp/pingipdown.sh
Linux Diskless Command line - 96
RC.local
ขนตอนนไมไดส าคญอะไรมาก กรณททานเกดเหตการ Server ดบ ในขณะทก าลงแชร Disk
ใหเครองลกใชงานอย .. เมอทานเปดเครอง Server ขนมาใหม แตเครองลกคางไปแลว
ในขนตอนน ถาตองการใหเครองลกทคาง ใชงานไดตอเมอเครองแมบตเขาระบบเรยบรอยแลว
โดยทเครองลกไมตอง restart เครองใหม (สวนใหญจะเกดกบรานเลกๆ)
ใหเพมค าสงรนระบบแชร disk อตโนมตใน /etc/rc.local
# nano /etc/rc.local
เพมค าสงลงไปกบจ านวณเครอง
exediskless 5 com 1 /dev/sdb eth1 normal
exediskless 5 com 2 /dev/sdb eth1 normal
exediskless 5 com 3 /dev/sdb eth2 normal
exediskless 5 com 4 /dev/sdb eth1 normal
exediskless 5 com 5 /dev/sdb eth3 normal
/etc/init.d/bind9 stop
exit 0
*แนะน า
ตองใหค าสงในไฟลตรงกนกบไฟล dhcpd.conf วาการดแลนหมายเลขอะไร
ทใชแชร Disk ออกไปใหแตละเครอง
*หมายเหต
หามน าค าสง /usr/sbin/ntpdate -u pool.ntp.org มาไวใน /etc/rc.local เปนค าสงแรกเดดขาด
เพราะในตวอยางคมอ ไมไดท าใหเครอง Server ออกเนตได .. ถามค าสงนเขามากอนค าสงอนในไฟล
rc.local พอระบบเจอค าสงนแตออกเนตไมได ระบบจะแจงวาค าสงลมเหลว ระบบจะหยดการรน script
ในไฟล /etc/rc.local ทงหมดทนท จะท าใหค าสงถดไปไมไดถกรนและใชงานทนท
แบบแรก
usr/sbin/ntpdate -u pool.ntp.org <------------------------------- หามเดดขาด
exediskless 5 com 1 /dev/sdb eth1 normal
exediskless 5 com 2 /dev/sdb eth1 normal
exediskless 5 com 3 /dev/sdb eth2 normal
exediskless 5 com 4 /dev/sdb eth1 normal
exediskless 5 com 5 /dev/sdb eth3 normal
/etc/init.d/bind9 stop
exit 0
Linux Diskless Command line - 97
แบบทสอง
exediskless 5 com 1 /dev/sdb eth1 normal
exediskless 5 com 2 /dev/sdb eth1 normal
exediskless 5 com 3 /dev/sdb eth2 normal
exediskless 5 com 4 /dev/sdb eth1 normal
exediskless 5 com 5 /dev/sdb eth3 normal
/etc/init.d/bind9 stop
usr/sbin/ntpdate -u pool.ntp.org <------------------------------- แนะน าครบ
exit 0
แบบทสองถกตองครบ ถาค าสงไหนไมแนใจวาจะใชงานได 100% กเอามาใสเหมอนใน
แบบทสองไดเลย เพราะแบบทสองเปนการรนล าดบสดทายในไฟล /etc/rc.local
ถงค าสงจะลมเหลวกไมเปนไร เพราะไมมค าสงรนตอทายแลว
Linux Diskless Command line - 98
ไฟล .BAT ส าหรบ Startup Windows เพอ Rename ชอเครองตอนเขา Windows
ชอไฟล rename.bat
@echo on
@echo Windows XP
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IP Address"') do set IP=%%b
for /f "tokens=1-4 delims=." %%a in ("%IP%") do set IP=%%d
echo %IP%
@echo off
set computername=COM-%IP%
reg delete "hklm\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "Hostname" /f
reg delete "hklm\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /f
reg add "hklm\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /d "%computername%" /f
reg add "hklm\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName" /v "ComputerName" /d "%computername%" /f
reg add "hklm\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "Hostname" /d "%computername%" /f
reg add "hklm\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /d "%computername%" /f
แบบทสอง
@echo on
@echo Windows 7
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4 Address"') do set IP=%%b
for /f "tokens=1-4 delims=." %%a in ("%IP%") do set IP=%%d
echo %IP%
@echo off
set computername=COM-%IP%
reg delete "hklm\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "Hostname" /f
reg delete "hklm\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /f
reg add "hklm\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /d "%computername%" /f
reg add "hklm\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName" /v "ComputerName" /d "%computername%" /f
reg add "hklm\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "Hostname" /d "%computername%" /f
reg add "hklm\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /d "%computername%" /f
Linux Diskless Command line - 99
*เพมเตมครบ
บางทานอาจจะใช IP ไมเหมอนในคมอตวอยาง
สวนใหญทเหนใชงานกนกจะเปน IP 192.168.1.254 ส าหรบออกเนต
และ IP ท Fix ใหเครองลกกจะเปน
192.168.1.1
,192.168.1.2
,192.168.1.3
,192.168.1.4
,192.168.1.x ตามจ าเครองในรานทม
ถาตองการใชงานตามคา ip ในแบบของทานกไปแกไข
# nano /etc/network/interfaces
ในสวนนจะเปนการก าหนดหมายเลข ip ใหการดแลนตาม ip ของรานทานใชงาน
แลวระบเปน ip ของรานทาน
auto p1p1
iface p1p1 inet static
address 192.168.1.201
netmask 255.255.255.0
วธท าจะเหมอนในตวอยางการทดลองอยางงายในชวงแรกๆ ของคมอ
Linux Diskless Command line - 100
จากนนกไฟล dhcpd.conf แกไข ip เครองลกใหใชงานตาม ip ราน
# nano /etc/dhcp/dhcpd.conf
ตวอยางการก าหนด Gateway ไปท ip ออกเนต และ ip ทใชงานในราน
ไปทบรรทด subnet
subnet 192.168.1.0 netmask 255.255.255.0 {
default-lease-time 43200;
max-lease-time 86400;
allow unknown-clients;
option routers 192.168.1.254; ------------ IP Gateway ใชออกเนต
range 192.168.1.100 192.168.1.199; ---------- แจกแบบ auto ส าหรบใชงานอยางอน (Authentication)
}
host bootdisk1 {
hardware ethernet 50:e5:49:e9:95:e8;
fixed-address 192.168.1.1; ----------- IP ท fix ใหเครองลก ตาม ip ราน
option host-name com1;
if exists user-class and option user-class = "gPXE" {
execute("sudo","execdiskless","17","com","1","/dev/sdc","p5p1","normal");
filename "";
option root-path "aoe:e0.1";
} else {
filename "undionly.kpxe";
}
}
Linux Diskless Command line - 101
จากนนกตอดวย text file ส าหรบการตรวจสอบ ip เครองลกทไมไดใชงานแลว
# nano /root/tmp/pingip.txt
แกเปน ip ตามรานใชงาน
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
Linux Diskless Command line - 102
จบแลวคะ