2015年5月29日 星期五

Diskless Remote Boot in Linux

一、其他補充:


# 睡眠 (一鍵可叫醒)
systemctl suspend

# 休眠 (按 Power 才可叫醒)
systemctl hibernate
======================================================

二、建無硬碟可開機之 Linux 虛擬機


1. 執行 PXE Server & buildlinux1.sh

用網路 PXE 安裝,完成安裝 linux1.img
hostname: pxeboot
domainname: my.com
mirror: 192.168.10.254

2. 備份一個 linux1.img

qemu-img convert -O raw linux1.img linux1.img.bak

================= 於 linux1.img 機器中設定 =================

3. 改 initramfs 設定

於 linux1.img 機器中設定,皆使用 root 權限
vi /etc/initramfs-tools/initramfs.conf

搜尋這兩個,並註解:
MODULES=most
BOOT=local

改成 or 如果沒有就自行新增:
#MODULES=most
MODULES=netboot
#BOOT=local
BOOT=nfs

4. 準備開機 Kernel & Initrd

mkdir -p /root/pxeboot
cd /root/pxeboot
mkinitramfs -o ./initrd.img
cp /boot/vmlinuz-3.16.0-4-amd64 ./vmlinuz
ls -l

確認有兩個檔案:
initrd.img
vmlinuz

================= 於 pxeserver.img 機器中設定 =================

5. 檢查虛擬機硬碟容量

進入 pxeserver 查看 /srv 目錄之容量,
架單台 Diskless 機器必需要大於 4 GB 空間,
若有大於則跳過步驟 6.
df -h

6. 擴充虛擬機容量

a. 關閉 pxeserver 虛擬機


b. 新增 10 GB hdb.img 給 pxeserver.img 使用:

qemu-img create hdb.img 10G

c. 修改 runpxe.sh ,新增:

HDB=hdb.img
-hdb $HDB

e. 開機、分割、格式化

sh runpxe.sh
fdisk /dev/sdb
n
p
1
enter
enter
w

mkfs.xfs /dev/sdb1

f. 設定 /dev/sdb1 自動掛載

blkid /dev/sdb1 >> /etc/fstab
vi /etc/fstab
改成下面格式:

UUID=XXXXXXXXX /srv/nfs xfs defaults 1 2

檢查錯誤 (正確的話不會有訊息)
mount -a 

reboot
df -h
mount

查看有無成功掛載 sdb1 至 pxeserver:/srv/nfs 目錄。

7. 架設 NFS Server

於 pxeserver.img 虛擬機器中
apt-get install nfs-kernel-server
mkdir -p /srv/nfs/disklessboot
vi /etc/exports

設定檔內容如下:
/srv/nfs/disklessboot 192.168.10.0/24(rw,no_root_squash,async,no_subtree_check)

exportfs -a
/etc/init.d/nfs-kernel-server restart

showmount -e localhost
輸出:
Export list for localhost:
/srv/nfs/disklessboot 192.168.10.0/24

從同網段(192.168.10.0/24) 的別台機器(例如 實體機或linux1.img) 上檢查 NFS Server:
showmount -e 192.168.10.254
輸出:
Export list for localhost:
/srv/nfs/disklessboot 192.168.10.0/24

================= 於 linux1.img 機器中設定 =================
# 將 linnux1.img 上之 rootfs 複製到 pxeserver 之 /srv/nfs/disklessboot 目錄

8. 掛載 NFS 

於 linux1.img 虛擬機器中:
sudo apt-get install nfs-common
mkdir -p /dev/nfs
sudo mount -t nfs -nolock 192.168.10.254:/srv/nfs/disklessboot /dev/nfs
df -h

9. 複製 rootfs 到 pxeserver NFS 目錄

cp -avx /. /dev/nfs/.
cp -avx /dev/. /dev/nfs/dev/.

================= 於 pxeserver.img 機器中設定 =================
回到 pxeserver 下指令:

10. 將 vmlinuz 及 initrd.img 移到 TFTP Server 目錄

mkdir -p /srv/tftp/disklessboot
cp /srv/nfs/disklessboot/root/pxeboot/vmlinuz /srv/tftp/disklessboot/
cp /srv/nfs/disklessboot/root/pxeboot/initrd.img /srv/tftp/disklessboot/

11. 修改 rootfs 網路設定檔

vi /srv/nfs/disklessboot/etc/network/interfaces

#allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet manual

12. 修改 rootfs 自動掛載設定檔

vi /srv/nfs/disklessboot/etc/fstab

舊的全部註解掉,新增以下內容:

proc            /proc           proc    defaults        0       0
/dev/nfs        /               nfs     defaults        1       1
none            /tmp            tmpfs   defaults        0       0
none            /var/run        tmpfs   defaults        0       0
none            /var/lock       tmpfs   defaults        0       0
none            /var/tmp        tmpfs   defaults        0       0

13. 設定 TFTP 網路開機選單

vi /srv/tftp/debian-installer/amd64/boot-screens/menu.cfg

include mybootmenu.cfg

vi /srv/tftp/mybootmenu.cfg
label My Diskless Boot PC
kernel disklessboot/vmlinuz
append initrd=disklessboot/initrd.img root=/dev/nfs nfsroot=192.168.10.254:/srv/nfs/disklessboot ip=dhcp rw

chmod 777 -R /srv/tftp

================= 回到實體機中測試 =================
關閉 linux1.img 虛擬機器後,修改網路開機至 runlinux1.sh 檔:
-boot n

開機後,選單出現 "My Diskless Boot PC" ,用此開機。





Reference:

http://www.serenux.com/2011/04/howto-create-a-diskless-workstation-that-boots-from-pxe-using-ubuntu/

DisklessUbuntuHowto

Linux Terminal Server Project






沒有留言:

張貼留言